Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否存在传统servlet仍比JAX-RS具有设计优势的用例?_Java_Servlets_Jax Rs - Fatal编程技术网

Java 是否存在传统servlet仍比JAX-RS具有设计优势的用例?

Java 是否存在传统servlet仍比JAX-RS具有设计优势的用例?,java,servlets,jax-rs,Java,Servlets,Jax Rs,最近,我开始寻找一个“-clone”,一个用于Java的超轻web框架。它允许您在一个干净的代码块中定义所有URL路由,甚至可以为简单的情况编写实现。与Servlets相反。。。使用XML或将注释分散在整个代码库中,即使是最简单的路由处理程序也需要完全独立的Servlet类 大多数选项要么太多,要么与此方法背道而驰(例如Spring、JEE),要么推动您使用Scala或Groovy,而不是纯Java(例如Scalatra、Play、Ratpack)。Spark和Vert.x很有趣,我正在我的个人

最近,我开始寻找一个“-clone”,一个用于Java的超轻web框架。它允许您在一个干净的代码块中定义所有URL路由,甚至可以为简单的情况编写实现。与Servlets相反。。。使用XML或将注释分散在整个代码库中,即使是最简单的路由处理程序也需要完全独立的Servlet类

大多数选项要么太多,要么与此方法背道而驰(例如Spring、JEE),要么推动您使用Scala或Groovy,而不是纯Java(例如Scalatra、Play、Ratpack)。Spark和Vert.x很有趣,我正在我的个人项目中修补这两个版本,但我希望在我的工作中将它们推广到生产项目之前,看到它们更成熟、更长寿

然后我想到JAX-RS基本上涵盖了我所说的一切。到目前为止,我只在RESTful“服务”的上下文中使用了Jersey。。。将JSON返回到AJAX调用,或将XML返回到其他后端系统。然而,没有理由认为JAX-RS方法不能同时将HTML(或任何内容)返回到浏览器,并取代对完整Servlet类的需求。JAX-RS允许您访问会话状态(如果需要),以及非平凡应用程序所需的过滤器/拦截器等工具。如果您添加了某种模板库(例如Velocity、FreeMarker),那么在广泛支持的Java标准中,您基本上掌握了Sinatra的要点。甚至为您提供了异步HTTP(即长轮询、服务器端推送),这似乎比Servlet3.x版本更容易


所以我很好奇,为什么在这一点上,您可能仍然想要使用传统的servlet呢?显然,人们有自己的主观偏好。。。有些人可能只是更喜欢为每个路由处理程序使用一个单独的类,或者希望在新开发人员入职时获得尽可能低的学习曲线,等等。然而,客观地说,Servlet 3.x提供了JAX-RS中缺少的功能(如果有的话)(或者使用起来可能更痛苦)?在为web应用程序选择传统的servlet还是JAX-RS时,是否仍然存在一些用例,对于这些用例,servlet无疑是更合适的设计选择?

好吧,这是一个基于观点的答案,如果不是太长的话,我宁愿以注释的形式写出来。最后,我认为Java开发人员根本不想使用基于servlet规范的框架。如果您正在寻找关于servlet API的讨论,您将以一种或另一种方式找到:

ServletAPI是建立在Java更重要的假设之上的 但事实并非如此。网络比网络更重要 爪哇

我同意JAX-RS提供了比ServletAPI更好的工具集。但Spring MVC也是如此。还有其他适配器,它们为web开发提供了比servlet规范更好的通用接口。例如,使用SpringMVC构建一个合适的web应用程序更容易,但您通常会插入其他框架,如thymeleaf或任何您喜欢的框架。因此,SpringMVC本身是一种原始的web框架,它提供了一个通用的界面,而不是一个完整的web框架

如果您看到的是web应用程序框架的总体趋势,我相信未来取决于忽略servlet规范的框架,例如。最后,网络过于注重可伸缩性和资源的精益使用。它是关于拥抱web(正如引用所暗示的),而不是将其包装到JavaAPI/SPI中。正因为如此,我不相信一个基于JAX-RS的web应用程序能够接近这种可能性!已经使您能够尽可能轻松地编写web应用程序

也就是说:从长远来看,人们希望找到比ServletAPI更简单的东西,我相信你是对的。然而,我不相信它会像JAX-RS那样,通常在API之上实现,我相信它会更接近于本机HTTP接口,比如Play!(它有一个Java API)