GenericServlet,HttpServlet和Servlet有什么区别?

时间:2012-07-17 20:13:15

标签: java servlets

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

“确切差异”意味着

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

11 个答案:

答案 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
  1. GenericServlet定义了一个与协议无关的通用servlet。
  2. GenericServlet提供了一个蓝图,使编写servlet变得更容易。
  3. GenericServlet提供生命周期方法的简单版本 init和destroy以及ServletConfig接口中的方法。
  4. GenericServlet实现了在。中声明的日志方法 ServletContext接口。
  5. 要编写通用servlet,覆盖它就足够了 abstract service()方法。
  6. <强> 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。

答案 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: -

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

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

      1. 仅适用于HTTP协议。
      2. 继承GenericServlet类。
      3. 使用doPost,doGet方法代替服务方法。

答案 5 :(得分:2)

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

GenericServletServlet接口的基本协议中立实现。通常,您会在API中找到类似的接口基本实现;在这种情况下,GenericServletServlet API添加了一些功能:getServletNamegetServletInfo和servlet init参数的传递方法。通过扩展HttpServletGenericServlet可以从这些新增功能中受益。

通常,针对此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)

  1. Servlet界面
    它是 GenericServlet HttpServlet 的超级界面。它包含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的方法。


      hierarchy
      参考:way2java.com

答案 8 :(得分:1)

- &gt; GenericServlet可以处理来自单个表单的多个客户端请求。鉴于HttpServlet可以处理多个HTML表单请求的客户端。

- &GT; GenericServlet是无国籍的,HttpServlet是有状态的。

答案 9 :(得分:0)

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

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

答案 10 :(得分:0)

  1. http servlet 是一个特定的类,它只允许 http 协议,不允许其他协议如 ftp smtp
  2. 通用servlet允许所有类型的协议只有一种抽象方法是服务方法,其他四种方法是具体方法
  3. 通用servlet是http servlet的超类