我正在寻找 之间的确切区别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 参数的传递方法。通过扩展.Servlet
getServletName
getServletInfo
HttpServlet
GenericServlet
通常,每个针对此 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 协议)