GenericServlet,HttpServlet和Servlet有什么区别?
我正在寻找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
- GenericServlet定义了一个通用的,与协议无关的servlet。
- GenericServlet提供了一个蓝图,使编写servlet变得更容易。
- GenericServlet提供了生命周期方法init和destroy的简单版本以及ServletConfig接口中的方法。
- GenericServlet实现了在ServletContext接口中声明的日志方法。
- 要编写通用servlet,覆盖抽象service()方法就足够了。
javax.servlet.http.HttpServlet
签名:
public abstract class HttpServlet extends GenericServlet implements java.io.Serializable
- HttpServlet定义了一个特定于HTTP协议的servlet。
- HttpServlet为Http servlet提供了蓝图,使编写更容易。
- HttpServlet扩展了GenericServlet,因此inheritance了GenericServlet属性。
javax.servlet.Servlet是接口,它定义了所有实现的方法 – 这就是接口通常所做的事情。
javax.servlet.GenericServlet与协议无关。 它是抽象的,因此不能直接实例化。 如果你有一天必须为HTTP以外的协议编写servlet,那么它是可用的扩展类。
如果要通过HTTP协议进行通信, javax.servlet.http.HttpServlet是要扩展的抽象类。 很可能你只需要关心这个。
您可以在链接后面找到更准确的信息。
– >一个常见的特性是,这两个类都是抽象类。
– > 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)。
Servlet的: –
- Servlet作为Web容器中的线程运行,而不是在单独的OS进程中运行。
- 第一个请求到来时,第一次只创建一个对象,其他请求共享同一个对象。
- Servlet与平台无关。
- Servlet很快。
GenericServlet类: –
- 适用于所有协议。
- 实现Servlet接口。
- 使用服务方法。
HttpServlet的: –
- 仅适用于HTTP协议。
- inheritanceGenericServlet类。
- 使用doPost,doGet方法代替服务方法。
HttpServlet
特定于HTTP协议,因此它为HTTP谓词提供方法: doGet
, doPost
等,以及获取特定于HTTP的请求和响应对象的通用service
方法的版本。 它是一种特殊类型的Servlet
,实际上是一个非常小的界面。
GenericServlet
是Servlet
接口的基本协议中立实现。 通常,您会在API中找到类似的接口基本实现; 在这种情况下, GenericServlet
为Servlet
API添加了一些function: getServletName
, getServletInfo
和servlet init参数的传递方法。 通过扩展GenericServlet
HttpServlet
可以从这些新增function中受益。
通常,针对此API编码的每个人都使用HttpServlet
来实现HTTP Web服务,但是也可以使用自定义协议或其他现存协议(例如,FTP)来扩展或使用GenericServlet
来实现服务器/服务function。
Servlet是一个包含五个抽象方法的接口,为了使用servlet,我们必须为所有这五个方法提供一个实现,这很令人头疼。 为了避免这种复杂性,我们将GenericServlet和HttpServlet用于下一级。
GenericServlet与协议无关,它意味着它可以接受任何协议请求。 GenericServlet可以转发并包含请求,但我们无法重定向请求。 GenericServlet中无法使用cookie和HttpSession进行会话管理。 在GenericServlet中,无法为get和post请求定义单独的逻辑。
HttpServlet依赖于协议。 这意味着,它只接受HTTP协议请求。 HttpServlet可以转发并包含和重定向请求。 在HttpServlet中可以使用cookie和HttpSession进行会话管理。 在HttpServlet中,可以为get和post请求定义单独的逻辑。
- Servlet接口
它是GenericServlet和HttpServlet的超级接口。 它包含5个抽象方法,并且全部由GenericServlet和HttpServletinheritance。- 问题
如果你想通过实现Servlet接口来创建servlet,那么应该覆盖Servlet接口的所有5个抽象方法,尽管Programmer不感兴趣 - 用法
如果您想开发自己的容器,只能实现Servlet接口。
- 问题
- GenericServlet类
它是Servlet接口的直接子类和HttpServlet的超类。 在这个类中,存在一个抽象方法:service()。 在这个类中实现了其他4种抽象方法。- 问题
除了service()方法之外,所有方法都是具体的,因此您必须将其实现为回调方法。 - 用法
它独立于协议,因此可以与任何协议一起使用,如FTP,SMTP,HTTP等。
- 问题
- HttpServlet的
它的GenericServlet和Servlet接口的子类。 立即超级HttpServlet是GenericServlet。 HttpServlet不包含任何抽象方法。 虽然HttpServlet不包含任何抽象方法,但设计者将其声明为抽象类,不允许任何人直接创建对象,因为Servlet容器是由Servlet容器创建的。- 问题
HttpServlet是依赖于协议的,仅用于HTTP协议。 - 用法
不需要覆盖service()方法。 它可以用具有相同参数的doGet()或doPost()方法替换。 它最常用的方法是创建servlet。等级制度
参考: way2java.com
- 问题
– > GenericServlet
可以从单个表单处理多个客户端请求。 然而, HttpServlet
可以处理从多个HTML
表单请求的多个客户端。
– > GenericServlet
是无状态的, HttpServlet
是有状态的。
javax.servlet
包中存在的所有类,接口和方法都是独立于协议的(所有协议都是通用的)。
相反, javax.servlet.http
包中存在的所有类,接口和方法都依赖于协议(特定于HTTP协议)