为什么在Java中使用RESTful服务的框架而不是vanilla servlet

我知道有一些关于可用于在Java中执行RESTful服务的库的问题,但是使用它们对付vanilla实现的价值是什么。 我的意思是,如果我想创建Wim描述的url结构

  • www.example.com/images
  • www.example.com/images/id/num
  • www.example.com/images/tag/num
  • www.example.com/images/tag/num/num/num

是不是更容易(对于未来的开发人员)和更快(实现和学习)将url模式/图像映射到servlet并且有一行或两行解析参数的url而不是学习,实现和配置其中一个这些库可以帮到你。

  • Apache CXF
  • 泽西岛 (受欢迎)
  • Restlet (JAX-RS的先驱)
  • 高枕无忧

基本上我要问的是……使用RESTful Java框架有什么价值? 对于一个简单的问题,它不会在实现中增加很多复杂性吗?

编辑:这个jersey代码处理非常整齐,如果他们正在寻找图书馆为他们做这个,每个人都应该知道如何以servletforms。

@Path("/helloworld") public class HelloWorldResource { // The Java method will process HTTP GET requests @GET // The Java method will produce content identified by the MIME Media // type "text/plain" @Produces("text/plain") public String helloWorld() { // Return some cliched textual content return "Hello World"; } } 

如果您要做的只是返回由URL参数驱动的文本的“服务”,那么纯文本返回,是否需要一个框架?

是不是更容易(对于未来的开发人员)和更快(实现和学习)将url模式/images映射到servlet并且有一行或两行解析参数的url而不是学习,实现和配置其中一个这些库可以帮到你。

更轻松? 这肯定不容易编写 – 你必须自己完成所有路径提取和所有方法处理和所有内容类型协商(双向)和所有cookie处理和对象反序列化/序列化thunks和……好吧,许多低级的东西都需要测试和调试 – 或者更容易维护,因为JAX-RS接口允许你在资源级别(RESTful webapps的自然特征)而不是请求中运行; 凭借丰富的经验,当概念模型与实施之间的差距最小时,维护最容易。 它的实现速度也不快(因为JAX-RS的低级实现已经为您测试和调试;对您来说更少)并且学习它的成本不是很高,因为它主要是声明性的API很少有惊喜。

好吧,当你只处理简单的webapps时,这些好处可能看起来不那么多。 毕竟,你可以在很短的时间内解决问题,并在网上进行调整。 然后,你必须祈祷你没有明显意外的利用漏洞或拒绝服务攻击。 维护程序员在添加小function或修复错误时,必须了解通过代码喷出的那些正则表达式(Good Luck With That!)。 但随着webapp越来越大,拥有一个经过测试的库来处理所有低级别内容的好处确实很有用。

(在你提问之前,你提到的一些库会快乐地将它们自己安装为servlet;这允许你的代码只描述servlet的业务逻辑,并声明如何以抽象的方式完成到线的映射。这非常容易。)

JAX-RS是一个设计良好的API,它将HTTP请求映射到方法,从HTTP请求的各个部分提取参数,处理内容协商以及许多其他低级别任务非常容易。

使用JAX-RS,主要是通过Apache CXF,大约两年了,我总是比普通的Servlet更喜欢它。

框架用于使您的任务更容易。 我同意我们可以通过实现servlet然后解析url然后实现基本逻辑来做同样的事情。

如果你使用像泽西这样的框架,那么你不必担心那些解析模式和其他类似的任务。 ServletContainer类将负责处理(在其服务方法中解析url),还有许多其他类也可以使您的任务更容易。

还有一件事我们只采用一种方案(匹配模式)但是当我们的需求增长时,由我们自己的servlet编写的相同代码将变得更加复杂和复杂。

在这种情况下,我会使用Jersey或库,如果它执行以下操作(添加足够的值):

  • URL的配置都是自包含在一个文件中的源代码
  • 没有隐藏的配置文件或过于冗长的配置(例如web.xml)
  • 参数很好地映射到强类型变量(例如使用注释)
  • 获取参数值(例如RESTlet )并不令人费解
  • 运行库的开销很低(我在其他库中使用reflection解决方案的经验很糟糕)
  • 它有很好的记录
  • 它被很好地采用了

在这种情况下,我发现使用库可以为我的项目增加使用它所需的工作量。 虽然我还没有给其他框架足够的调查,但泽西确实看起来很满足要求。