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

ava*_*erw 23 java rest jersey

我知道有一些关于可用于在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而不是学习,实现和配置其中一个这些库可以帮到你.

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

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

@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";
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Don*_*ows 12

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

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

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

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


小智 7

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

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

  • @avanderw也许你的体验只适用于简单的webapps,因为我从我的经验中知道它对于更复杂的应用程序确实有很大的帮助.直接在servlet级别完成所有这些工作将会有很多工作,但JAXRS可以让您更专注于应用程序中的资源.(并不是说我声称它是完美的 - 一些令人惊讶的东西仍然很尴尬 - 但它确实让事情变得容易多了.) (2认同)