我正在寻找javax.servlet.http.HttpServlet
之间的确切区别
,javax.servlet.GenericServlet
和javax.Servlet
无法找到它。
“确切差异”意味着
javax.servlet.GenericServlet
存在背后的原因答案 0 :(得分:24)
“确切的差异”意味着什么? API列出了完全差异。
Servlet
is an interface defining what a servlet must implement.
GenericServlet
is just that, a generic, protocol-independent servlet.
HttpServlet
is a servlet tied specifically to the HTTP protocol.
您是否在询问何时使用其中任何一个?
通常,您需要扩展HttpServlet
来实现应用程序的Web层。
如果您正在编写自己的容器或自己处理所有内容,则可以实现Servlet
。您可以扩展GenericServlet
以处理不同的协议,但您可能不会。
答案 1 :(得分: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
<强> javax.servlet.http.HttpServlet 强>
签名:
public abstract class HttpServlet extends GenericServlet implements java.io.Serializable
答案 2 :(得分:10)
javax.servlet.Servlet是接口,它定义了所有实现的方法 - 这就是接口通常所做的事情。
javax.servlet.GenericServlet与协议无关。它是抽象的,因此不能直接实例化。如果你有一天必须为HTTP之外的协议编写servlet,那么它是可用的扩展类。
如果要通过HTTP协议进行通信,javax.servlet.http.HttpServlet是要扩展的抽象类。很可能你只需要关心这个。
您可以在链接后找到更准确的信息。
答案 3 :(得分:7)
- &GT;一个常见的特性是,这两个类都是抽象类。
- &GT; GenericServlet是HttpServlet类的超类。
- &GT;主要区别在于,HttpServlet是依赖于协议的,而GenericServlet是协议无关的。所以GenericServlet可以处理所有类型的协议,但是HttpServlet只处理HTTP特定的协议。
- &GT; GenericServlet属于javax.servlet包。 HttpServlet属于javax.servlet.http包
- &GT; GenericServlet是一个抽象类,它扩展了Object并实现了Servlet,ServletConfig和java.io.Serializable接口。 HttpServlet是一个抽象类,它扩展了GenericServlet并实现了java.io.Serializable接口。
- &GT; GenericServlet仅支持service()方法,不包含doGet()和doPost()方法。 HttpServlet还支持doGet(),doPost(),doHead()方法(HTTP 1.0)以及doPut(),doOptions(),doDelete(),doTrace()方法(HTTP 1.1)。
答案 4 :(得分:3)
的Servlet: -
GenericServlet类: -
的HttpServlet: -
答案 5 :(得分:2)
HttpServlet
特定于HTTP协议,因此它为HTTP谓词提供方法:doGet
,doPost
等,以及通用service
方法的一个版本它采用特定于HTTP的请求和响应对象。它是一种特殊类型的Servlet
,实际上是一个非常小的界面。
GenericServlet
是Servlet
接口的基本协议中立实现。通常,您会在API中找到类似的接口基本实现;在这种情况下,GenericServlet
为Servlet
API添加了一些功能:getServletName
,getServletInfo
和servlet init参数的传递方法。通过扩展HttpServlet
,GenericServlet
可以从这些新增功能中受益。
通常,针对此API编码的每个人都使用HttpServlet
来实现HTTP Web服务,但是也可以使用自定义协议或其他现有协议扩展或使用GenericServlet
来实现服务器/服务功能,例如,FTP。
答案 6 :(得分:2)
Servlet是一个包含五个抽象方法的接口,为了使用servlet,我们必须为所有这五个方法提供一个实现,这很令人头疼。为了避免这种复杂性,我们将GenericServlet和HttpServlet用于下一级。
GenericServlet与协议无关,它意味着它可以接受任何协议请求。 GenericServlet可以转发并包含请求,但我们无法重定向请求。 GenericServlet中无法使用Cookie和HttpSession进行会话管理。 在GenericServlet中,无法为get和post请求定义单独的逻辑。
HttpServlet与协议有关。这意味着,它只接受HTTP协议请求。 HttpServlet可以转发并包含和重定向请求。 在HttpServlet中可以使用cookie和HttpSession进行会话管理。 在HttpServlet中,可以为get和post请求定义单独的逻辑。
答案 7 :(得分:2)
答案 8 :(得分:1)
- &gt; GenericServlet
可以处理来自单个表单的多个客户端请求。鉴于HttpServlet
可以处理多个HTML
表单请求的客户端。
- &GT; GenericServlet
是无国籍的,HttpServlet
是有状态的。
答案 9 :(得分:0)
javax.servlet
包中存在的所有类,接口和方法都是协议独立(对所有协议都是通用的)。
相比之下,javax.servlet.http
包中存在的所有类,接口和方法都是协议依赖(特定于HTTP协议)
答案 10 :(得分:0)