23

我正在寻找 之间的确切区别javax.servlet.http.HttpServletjavax.servlet.GenericServletjavax.Servlet无法找到它。

“完全不同”是指

  1. 用法
  2. javax.servlet.GenericServlet存在背后的原因
4

11 回答 11

26

“完全不同”是什么意思?API 列出了确切的差异。

Servlet是一个定义 servlet 必须实现什么的接口。

GenericServlet就是这样,一个通用的、独立于协议的 servlet。

HttpServlet是一个专门绑定到 HTTP 协议的 servlet。

你是在问你什么时候会这些吗?

通常,您会扩展HttpServlet以实现应用程序的 Web 层。

Servlet如果您正在编写自己的容器或自己处理所有内容,则可以实施。您可能会扩展GenericServlet以处理不同的协议,但您可能不会。

于 2012-07-17T20:17:54.703 回答
12

javax.servlet

Servlet 是一种服务器端 Web 技术。顾名思义,它服务于客户端请求并接收来自服务器的响应。您必须实现 javax.Servlet(接口)来处理 servlet 工作。

javax.servlet.GenericServlet

签名:

public abstract class GenericServlet extends java.lang.Object implements Servlet, ServletConfig, java.io.Serializable
  1. GenericServlet 定义了一个通用的、独立于协议的 servlet。
  2. GenericServlet 提供了一个蓝图,使编写 servlet 更容易。
  3. GenericServlet 提供生命周期方法 init 和 destroy 以及 ServletConfig 接口中的方法的简单版本。
  4. GenericServlet 实现了在 ServletContext 接口中声明的 log 方法。
  5. 要编写通用 servlet,重写抽象 service() 方法就足够了。

javax.servlet.http.HttpServlet

签名:

public abstract class HttpServlet extends GenericServlet implements java.io.Serializable
  1. HttpServlet 定义了一个 HTTP 协议特定的 servlet。
  2. HttpServlet 为 Http servlet 提供了一个蓝图,并使编写它们变得更容易。
  3. HttpServlet 扩展了 GenericServlet,因此继承了 GenericServlet 的属性。
于 2012-07-17T20:19:00.913 回答
10

javax.servlet.Servlet是接口,它定义了所有实现的方法——这就是接口通常做的事情。

javax.servlet.GenericServlet是独立于协议的。它是抽象的,所以不能直接实例化。如果有一天你必须为 HTTP 以外的协议编写 servlet,它是一个可用的类来扩展。

javax.servlet.http.HttpServlet是要通过 HTTP 协议进行通信的抽象类。很可能你只需要关心这个。

您可以在链接后面找到更准确的信息。

于 2012-07-17T20:20:25.780 回答
7

-> 一个共同的特点是,这两个类都是抽象类。

-> GenericServlet 是 HttpServlet 类的超类。

-> 主要区别在于,HttpServlet 是依赖于协议的,而 GenericServlet 是独立于协议的。所以 GenericServlet 可以处理所有类型的协议,但 HttpServlet 只处理 HTTP 特定的协议。

-> GenericServlet 属于 javax.servlet 包。HttpServlet 属于 javax.servlet.http 包

-> GenericServlet 是一个抽象类,它扩展了 Object 并实现了 Servlet、ServletConfig 和 java.io.Serializable 接口。HttpServlet 是一个抽象类,它扩展了 GenericServlet 并实现了 java.io.Serializable 接口。

-> GenericServlet 仅支持 service() 方法,不包含 doGet() 和 doPost() 方法。HttpServlet 还支持 doGet()、doPost()、doHead() 方法 (HTTP 1.0) 以及 doPut()、doOptions()、doDelete()、doTrace() 方法 (HTTP 1.1)。

于 2013-10-22T06:31:29.970 回答
3

小服务程序:-

  1. Servlet 在 Web 容器中作为线程运行,而不是在单独的 OS 进程中运行。
  2. 第一次请求时只创建一个对象,其他请求共享同一个对象。
  3. Servlet 是平台无关的。
  4. Servlet 很快。

GenericServlet:-

  1. 通用所有协议。
  2. 实现 Servlet 接口。
  3. 使用服务方法。

HttpServlet:-

  1. 仅适用于 HTTP 协议。
  2. 继承 GenericServlet 类。
  3. 使用 doPost、doGet 方法代替 service 方法。
于 2013-10-14T06:57:21.030 回答
2

HttpServlet特定于 HTTP 协议,因此它为 HTTP 动词提供方法:doGetdoPost等,以及service采用 HTTP 特定请求和响应对象的通用方法的一个版本。它是一种特殊类型,Servlet实际上是一个非常小的接口。

GenericServletServlet接口的基本的、协议中立的实现。通常,您会在 API 中找到类似的接口基本实现。在这种情况下,为APIGenericServlet添加了一些功能: 、和 servlet init 参数的传递方法。通过扩展.ServletgetServletNamegetServletInfoHttpServletGenericServlet

通常,每个针对此 API 进行编码的人都HttpServlet用于实现 HTTP Web 服务,但也可以GenericServlet使用自定义协议或其他现有协议(例如 FTP)扩展或用于实现服务器/服务功能。

于 2012-07-17T20:23:13.840 回答
2

Servlet 是一个包含五个抽象方法的接口,为了使用 servlet,我们必须为所有这五个方法提供一个实现,这是一个令人头疼的问题。为了避免这种复杂性,我们将 GenericServlet 和 HttpServlet 用于下一级。

GenericServlet 是独立于协议的,这意味着它可以接受任何协议请求。GenericServlet 可以转发和包含请求,但我们不能重定向请求。在 GenericServlet 中无法使用 cookie 和 HttpSession 进行会话管理。在 GenericServlet 中,无法为获取和发布请求定义单独的逻辑。

HttpServlet 依赖于协议。这意味着,它只接受 HTTP 协议请求。HttpServlet 可以转发、包含和重定向请求。在 HttpServlet 中可以使用 cookie 和 HttpSession 进行会话管理。在 HttpServlet 中,可以为 get 和 post 请求定义单独的逻辑。

于 2017-09-14T12:06:31.110 回答
2
  1. Servlet 接口它是GenericServletHttpServlet
    的超级接口。它包含 5 个抽象方法,全部由 GenericServlet 和 HttpServlet 继承。
    • 问题
      如果你想通过实现 Servlet 接口来创建 servlet,那么接口 Servlet 的所有 5 个抽象方法都应该被覆盖,即使程序员不感兴趣
    • 用法
      如果您想开发自己的容器,请仅实现 Servlet 接口。
  2. GenericServlet
    它是 Servlet 接口的直接子类和 HttpServlet 的超类。在这个类中,存在一个抽象方法:service()。其他4个抽象方法在这个类中实现。
    • 问题
      除 service() 方法外,所有方法都是具体的,因此您必须将其实现为回调方法。
    • 用法
      它是独立于协议的,因此可以与任何协议一起使用,如 FTP、SMTP、HTTP 等。
  3. HttpServlet
    它是 GenericServlet 和 Servlet 接口的子类。HttpServlet 的直接超类是 GenericServlet。HttpServlet 不包含任何抽象方法。尽管 HttpServlet 不包含任何抽象方法,但设计者将其声明为抽象类,不允许任何人直接创建对象,因为 Servlet 对象是由 Servlet 容器创建的。
    • 问题
      HttpServlet 依赖于协议,并且仅用于特定于 HTTP 协议。
    • 使用
      service() 方法不需要被覆盖。它可以被具有相同参数的 doGet() 或 doPost() 方法替换。它最常用的方法是创建 servlet。


      层次结构
      参考:way2java.com
于 2018-03-29T05:47:29.573 回答
1

-->GenericServlet可以处理来自单个表单的多个客户端请求。然而,HttpServlet可以处理来自多个HTML表单的多个客户端请求。

-->GenericServlet是无状态的并且HttpServlet是有状态的。

于 2013-04-26T13:51:36.530 回答
0

包中的所有类、接口和方法javax.servlet都是独立于协议的(对所有协议都是通用的)。

相反,javax.servlet.http包中存在的所有类、接口和方法都依赖于协议(特定于 HTTP 协议)

于 2013-10-24T17:58:29.730 回答
0
  1. http servlet 是一个特定的类,只允许 http 协议,不允许其他协议,如 ftp smtp
  2. generic servlet 允许所有类型的协议只有一种抽象方法是服务方法,其他四种方法是具体方法
  3. generic servlet 是 http servlet 的超类
于 2021-01-30T07:21:57.897 回答