2012-07-17 63 views
17

我在找尋javax.servlet.http.HttpServletjavax.servlet.GenericServletjavax.Servlet的區別,找不到它。GenericServlet,HttpServlet和Servlet有什麼區別?

「準確的區別」 是指

  1. 使用
  2. 背後的原因javax.servlet.GenericServlet存在
+4

這只是已經在他們的javadocs回答。你讀過它嗎? [Servlet](http://docs.oracle.com/javaee/6/api/javax/servlet/Servlet.html),[GenericServlet](http://docs.oracle.com/javaee/6/api/javax /servlet/GenericServlet.html)和[HttpServlet](http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServlet.html) – BalusC 2012-07-17 20:20:49

回答

22

「精確差」 的含義是什麼?該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以處理不同的協議,但您可能不會。

+0

+1對於'你可能會實現Servlet'重新寫你自己的容器或自己處理一切' – UnKnown 2015-10-16 17:55:30

11

的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類定義了一個通用的,獨立於協議的小服務程序。
  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,因此繼承了GenericServlet的 屬性。
+2

這個答案摘自http://javapapers.com/servlet/difference-between-httpservlet-and-genericservlet/ – 2013-01-15 14:17:57

+0

對我來說最好的答案 – 2017-06-24 14:44:29

9

javax.servlet.Servlet是接口,它定義了所有實現的方法 - 這就是接口通常所做的。

javax.servlet.GenericServlet是獨立於協議的。它是抽象的,所以它不被直接實例化。如果您有一天需要爲HTTP以外的協議編寫servlet,那麼它是可用的類來擴展。

javax.servlet.http.HttpServlet是抽象類,如果要通過HTTP協議進行通信,則要擴展。很可能你只需要關心這個。

您可以在鏈接後面找到更準確的信息。

2

HttpServlet是特定於HTTP協議,因此它爲HTTP動詞供給方法:doGetdoPost等,和版本的一般service方法,它有特定的HTTP請求和響應的對象。它是一種特殊類型的Servlet,它實際上是一個非常小的界面。

GenericServletServlet接口的基本協議中立實現。通常,您會在API中找到類似的基本接口實現;在這種情況下,GenericServletServlet API添加了一些功能:getServletName,getServletInfo以及servlet初始參數的傳遞方法。 HttpServlet通過擴展GenericServlet從這些添加中受益。

通常,針對此API編碼的每個人都使用HttpServlet來實現HTTP Web服務,但也可以使用自定義協議或另一個現存協議(例如FTP)來擴展或使用GenericServlet來實現服務器/服務功能。

1

- >GenericServlet可以處理來自單個表單的多個客戶端請求。而HttpServlet可以處理多個客戶請求多個HTML表單。

- >GenericServlet是無狀態的,HttpServlet是有狀態的。

3

的Servlet: -

  1. Servlet的運行作爲在Web容器線程,而不是在一個單獨的操作系統進程。
  2. 第一次請求到來時,只有一個對象被創建,其他請求共享同一個對象。
  3. Servlet是平臺獨立的。
  4. Servlet很快。

GenericServlet類: -

  1. 通用於所有協議。
  2. 實現Servlet接口。
  3. 使用服務方法。

的HttpServlet: -

  1. 僅適用於HTTP協議。
  2. 繼承GenericServlet類。
  3. 使用doPost,doGet方法代替服務方法。
7

- >一個共同特點是,這兩個類是抽象類。

- > 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類僅支持服務()方法中不包含的doGet()和doPost()方法。 HttpServlet還支持doGet(),doPost(),doHead()方法(HTTP 1.0)和doPut(),doOptions(),doDelete(),doTrace()方法(HTTP 1.1)。

0

javax.servlet包中的所有類,接口和方法都是協議獨立(對所有協議都是通用的)。

相反,所有類,接口,和存在於javax.servlet.http封裝方法是協議依賴(特定於HTTP協議)

2

Servlet是包含以在使用的servlet我們有五個抽象方法的接口爲所有這五種方法提供實施,這是一個令人頭疼的問題。爲了避免這種複雜性,我們將GenericServlet和HttpServlet用於下一級。

GenericServlet類是獨立的協議,這意味着它可以接受任何協議請求。 GenericServlet可以轉發幷包含請求,但我們不能重定向請求。 通過Cookie和HttpSession進行會話管理在GenericServlet中是不可能的。 在GenericServlet中,不可能爲get和post請求定義單獨的邏輯。

HttpServlet依賴於協議。這意味着,它只接受HTTP協議請求。 HttpServlet可以轉發幷包含並重定向請求。 在HttpServlet中可以使用Cookie和HttpSession進行會話管理。 在HttpServlet中,可以爲獲取和發佈請求定義單獨的邏輯。

+0

我喜歡你的答案。 請也喜歡我的回答。 – 2018-01-11 12:02:31