【问题标题】:When to use GenericServlet over HttpServlet?何时使用 GenericServlet 而不是 HttpServlet?
【发布时间】:2013-10-08 17:45:27
【问题描述】:

我知道 GenericServlet 是独立于协议的,是一个抽象类。所以我的问题是什么时候有人会选择使用 GenericServlet?您是否知道使用 GenericServlet 的任何特定示例?

我一直将 servlet 与 HTTP 协议及其响应和请求相关联。我想不出 servlet 在 HTTP 以外的协议中如何有用。这并不意味着它不可能。过去可能没有使用在其他协议中使用的选项,并且不再需要它。也可能是我对它的了解不够。

【问题讨论】:

  • 来自 javadoc:GenericServlet makes writing servlets easier. It provides simple versions of the lifecycle methods init and destroy and of the methods in the ServletConfig interface. GenericServlet also implements the log method, declared in the ServletContext interface.
  • @SotiriosDelimanolis 谢谢。我了解实现了生命周期方法的更简单版本。但是,您不必在代码中处理 httprequest 和 httpresponse 吗?还是 GenericServlet 会解决这个问题?
  • 首先,您不能拥有GenericServlet 对象。类是抽象的。其次,Servlet 的入口点是它的service() 方法。您需要创建一个实现该方法的实现类。 HttpServletdoXXX方法是从HttpServletservice方法调用的。
  • @SotiriosDelimanolis 这是我不理解的地方,当它说使编写 servlet 更容易时。您必须编写自己的 service() 方法。如果您使用 HttpServlet,则您拥有 doXXX 范例。这如何使它更容易?
  • 如果您的课程从GenericServlet 扩展,您不必编写一些样板代码。正如您所说,doXXX 范式仅与 HTTP 相关,因此仅与 HttpServlet 及其子类相关。如果你想为流媒体音乐(或其他)创建一个Servlet,你不会使用 GET、POST 等。GenericServlet 真的像任何通用的abstract 类一样,添加一些你可能想要重用的非常基本的信息.

标签: java servlets


【解决方案1】:

您的问题的简短回答是“从不。实际上。”

答案很长,GenericServlet 是一个抽象的(不能被实例化的)协议无关的 servlet,它是一个可以通过网络(如 web)访问的端点。 GenericServlet 提供了一些基本的生命周期管理,但您必须对其进行扩展以使其变得有用。

HttpServletGenericServlet 的实现,它处理HTTP 协议的许多低级细节,如标头、分块、cookie 等。实际上,这是任何人关心的唯一实现。

我想理论上可以扩展GenericServlet 来实现不同的协议,例如 FTP 或 SMTP,但何必呢?

希望对您有所帮助。

【讨论】:

  • 你是什么意思为什么要打扰 FTP和SMTP?
【解决方案2】:

GenericServlet 没有实现所有 10 个 HTTP 协议请求(获取 post put delete head trace 连接选项等)。所以如果你扩展 GenericServlet 那么所有的请求都会调用 service() 方法。 由于此 HttpServlet 的解决方案实现了它们,因此您可以根据收到的请求执行不同的操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-12
    • 2014-05-29
    • 2010-09-28
    相关资源
    最近更新 更多