Servlet与REST

MyT*_*tle 27 java rest servlets

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

所以我很困惑 - 在这种情况下使用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....

}
Run Code Online (Sandbox Code Playgroud)

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

Séb*_*nec 39

你在这里混淆两种范式:

  • REST是一种软件架构"风格";
  • Servlet是一种服务器端技术.

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

  • 在使用servlet实现REST样式服务的情况下,我需要为我想要的每个URL创建一个servlet.但是当使用REST服务(Jersey)时,我只能创建一个类 (3认同)

小智 25

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

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

  2. 它很直观(如果你很好地设计你的其他API).

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

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


小智 5

首先,您所说的是两种不同的范式。这有点像苹果和橘子。

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

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

由于您的问题意味着您正在寻求处理输入->输出方法,因此只需一个普通的 servlet 就可以完成这项工作。