我正在寻找 之间的确切区别javax.servlet.http.HttpServlet
,javax.servlet.GenericServlet但javax.Servlet无法找到它。
“完全不同”是指
- 用法
javax.servlet.GenericServlet存在背后的原因
“完全不同”是什么意思?API 列出了确切的差异。
Servlet是一个定义 servlet 必须实现什么的接口。
GenericServlet就是这样,一个通用的、独立于协议的 servlet。
HttpServlet是一个专门绑定到 HTTP 协议的 servlet。
你是在问你什么时候会用这些吗?
通常,您会扩展HttpServlet以实现应用程序的 Web 层。
Servlet如果您正在编写自己的容器或自己处理所有内容,则可以实施。您可能会扩展GenericServlet以处理不同的协议,但您可能不会。
javax.servlet
Servlet 是一种服务器端 Web 技术。顾名思义,它服务于客户端请求并接收来自服务器的响应。您必须实现 javax.Servlet(接口)来处理 servlet 工作。
javax.servlet.GenericServlet
签名:
public abstract class GenericServlet extends java.lang.Object implements Servlet, ServletConfig, java.io.Serializable
javax.servlet.http.HttpServlet
签名:
public abstract class HttpServlet extends GenericServlet implements java.io.Serializable
javax.servlet.Servlet是接口,它定义了所有实现的方法——这就是接口通常做的事情。
javax.servlet.GenericServlet是独立于协议的。它是抽象的,所以不能直接实例化。如果有一天你必须为 HTTP 以外的协议编写 servlet,它是一个可用的类来扩展。
javax.servlet.http.HttpServlet是要通过 HTTP 协议进行通信的抽象类。很可能你只需要关心这个。
您可以在链接后面找到更准确的信息。
-> 一个共同的特点是,这两个类都是抽象类。
-> 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)。
小服务程序:-
GenericServlet:-
HttpServlet:-
HttpServlet特定于 HTTP 协议,因此它为 HTTP 动词提供方法:doGet、doPost等,以及service采用 HTTP 特定请求和响应对象的通用方法的一个版本。它是一种特殊类型,Servlet实际上是一个非常小的接口。
GenericServlet是Servlet接口的基本的、协议中立的实现。通常,您会在 API 中找到类似的接口基本实现。在这种情况下,为APIGenericServlet添加了一些功能: 、和 servlet init 参数的传递方法。通过扩展.ServletgetServletNamegetServletInfoHttpServletGenericServlet
通常,每个针对此 API 进行编码的人都HttpServlet用于实现 HTTP Web 服务,但也可以GenericServlet使用自定义协议或其他现有协议(例如 FTP)扩展或用于实现服务器/服务功能。
Servlet 是一个包含五个抽象方法的接口,为了使用 servlet,我们必须为所有这五个方法提供一个实现,这是一个令人头疼的问题。为了避免这种复杂性,我们将 GenericServlet 和 HttpServlet 用于下一级。
GenericServlet 是独立于协议的,这意味着它可以接受任何协议请求。GenericServlet 可以转发和包含请求,但我们不能重定向请求。在 GenericServlet 中无法使用 cookie 和 HttpSession 进行会话管理。在 GenericServlet 中,无法为获取和发布请求定义单独的逻辑。
HttpServlet 依赖于协议。这意味着,它只接受 HTTP 协议请求。HttpServlet 可以转发、包含和重定向请求。在 HttpServlet 中可以使用 cookie 和 HttpSession 进行会话管理。在 HttpServlet 中,可以为 get 和 post 请求定义单独的逻辑。
-->GenericServlet可以处理来自单个表单的多个客户端请求。然而,HttpServlet可以处理来自多个HTML表单的多个客户端请求。
-->GenericServlet是无状态的并且HttpServlet是有状态的。
包中的所有类、接口和方法javax.servlet都是独立于协议的(对所有协议都是通用的)。
相反,javax.servlet.http包中存在的所有类、接口和方法都依赖于协议(特定于 HTTP 协议)