GenericServlet,HttpServlet和Servlet有什么区别?

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

“确切差异”是指

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

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,因此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的: –

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

GenericServlet类: –

  1. 适用于所有协议。
  2. 实现Servlet接口。
  3. 使用服务方法。

HttpServlet的: –

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

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

GenericServletServlet接口的基本协议中立实现。 通常,您会在API中找到类似的接口基本实现; 在这种情况下, GenericServletServlet API添加了一些function: getServletNamegetServletInfo和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请求定义单独的逻辑。

  1. Servlet接口
    它是GenericServletHttpServlet的超级接口。 它包含5个抽象方法,并且全部由GenericServlet和HttpServletinheritance。
    • 问题
      如果你想通过实现Servlet接口来创建servlet,那么应该覆盖Servlet接口的所有5个抽象方法,尽管Programmer不感兴趣
    • 用法
      如果您想开发自己的容器,只能实现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。

      等级制度
      参考: way2java.com

– > GenericServlet可以从单个表单处理多个客户端请求。 然而, HttpServlet可以处理从多个HTML表单请求的多个客户端。

– > GenericServlet是无状态的, HttpServlet是有状态的。

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

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