Servlet与REST

我需要在服务器端创建5个方法,这将使用二进制数据。 远程客户端是applet和JavaScript。 客户端将文件发送到服务器,服务器必须解析这些文件,然后以XML / JSON的forms返回响应。

所以我很困惑 – 在这种情况下使用REST服务是一种好习惯吗? 或者我应该使用servlet?

我的同事说我:

“创建仅由一个应用程序使用的REST服务并不好。只有在许多应用程序使用REST时才能创建REST。而REST比servlet有一些缺点:REST比servlet慢;它更难以编写线程安全的REST比servlet“

但是,我看到使用Servlet的一些缺点:我需要发送一个我想调用的函数名(即作为额外的HTTP参数发送函数名),然后在doPost方法中执行以下开关:

 switch(functionName) { case "function1": function1(); break; case "function2" function2(); break; //.... more `case` statements.... } 

在REST的情况下,我可以简单地使用不同的URL来实现不同的function。 此外,在REST的情况下,从服务器返回JSON / XML更方便。

谢谢。

好吧,我不同意你的同事的意见,只有一个应用程序rest是不好的,因为你可能决定将来有不同的应用程序使用相同的rest api。 如果我是你,我会选择纯REST。 为什么?

  1. 如果你正在使用一些框架进行rest实现(让我们说apache cxf或jersey )你会得到许多开箱即用的东西 – 你写POJO你得到rest,你得到序列化和反序列化,来回使用JSON对象开箱即用(最终你需要实现一些JsonProviders,但这不是什么大问题)。

  2. 工作直观(如果您设计好其他API)。

  3. JavaScript客户端非常容易使用(特别是如果你使用的是JQuery或类似的东西)

但是,它很大程度上取决于你想要做什么,如果你有一些强大的事务逻辑,其余的可能会非常棘手。 如果您只打算执行POST请求(不使用其他HTTP方法),您可能希望使用Servlet,因为您不必使用其他框架并创建更多依赖项。 请注意,REST或多或少是一个体系结构概念,它与Servlet技术不矛盾,如果你足够顽固,你只能使用servlet进行restapi :-)。 希望我能帮到你。

你在这里混淆两种范式:

  • REST是一种软件架构“风格”;
  • Servlet是一种服务器端技术。

例如,您可以使用Servlet实现类似REST的服务。

首先,你是用两种不同的范式来说话的。 它有点像苹果和橘子。

REST是一种服务样式,它使用HTTP操作(GET,PUT等)来读取和写入资源状态。 将资源视为“名词”和“事物”。

另一方面,Servlet是最初由Sun Microsystems提供的用于将HTTP请求连接到自定义Java代码的软件规范。 Servlet经常用方法调用来说话:“动词”和“动作”。

因为你的问题意味着你正在寻找处理input-> output方法,所以只需要一个普通的servlet来完成这项工作。

我在使用Jersey和创建REST服务时看不到任何问题。 我知道我是一个REST-taliban但是使用JAX-RS实现这种架构真的很简单,所以……为什么不呢?

你的同事说:“只有在许多应用程序使用REST时才能创建REST”,但我看不出这是怎么回事。为什么我不能为单个应用程序创建REST服务?

根据您的容器版本,Jersey(或任何其他JAX-RS实现)仍将使用Servlet将请求分派给适当的处理程序。

如果您的应用程序真的是RESTful,那么JAX-RS将做您想要的。 否则,请考虑使用FrontController来解释请求并将其转发到适当的处理程序。

另外,不要将XML或JSON与REST混淆。 您将在大多数(如果不是全部)JAX-RS实现中免费获得这些,但这些实现仍然将内容编组委托给其他库(例如JAXB)。

听起来你的同事正在应用过早的优化。 如果你可以快速地用JAX-RS库编写它,那么……如果它被certificate只是瓶颈那么你是否花时间重写为servlet。

根据我的经验,JAX-RS的性能开销不足以certificate在问题很好地映射到JAX-RS的情况下直接在servlet中编写等效项的开发和维护开销。

这是类似的链接。 他用简单的servlet http://software.danielwatrous.com/restful-java-servlet/完成了它