Servlet 是什麼?Servlet 架構 Servlet 建立
技術標籤:Java
Servlet簡介
Servlet 是什麼?
Java Servlet 是執行在 Web 伺服器或應用伺服器上的程式,它是作為來自 Web 瀏覽器或其他 HTTP 客戶端的請求和 HTTP 伺服器上的資料庫或應用程式之間的中間層。
使用 Servlet,您可以收集來自網頁表單的使用者輸入,呈現來自資料庫或者其他源的記錄,還可以動態建立網頁。
Java Servlet 通常情況下與使用 CGI(Common Gateway Interface,公共閘道器介面)實現的程式可以達到異曲同工的效果。但是相比於 CGI,Servlet 有以下幾點優勢:
- 效能明顯更好。
- Servlet 在 Web 伺服器的地址空間內執行。這樣它就沒有必要再建立一個單獨的程序來處理每個客戶端請求。
- Servlet 是獨立於平臺的,因為它們是用 Java 編寫的。
- 伺服器上的 Java 安全管理器執行了一系列限制,以保護伺服器計算機上的資源。因此,Servlet 是可信的。
- Java 類庫的全部功能對 Servlet 來說都是可用的。它可以通過 sockets 和 RMI 機制與 applets、資料庫或其他軟體進行互動。
Servlet 架構
下圖顯示了 Servlet 在 Web 應用程式中的位置。
Servlet 任務
Servlet 執行以下主要任務:
- 讀取客戶端(瀏覽器)傳送的顯式的資料。這包括網頁上的 HTML 表單,或者也可以是來自 applet 或自定義的 HTTP 客戶端程式的表單。
- 讀取客戶端(瀏覽器)傳送的隱式的 HTTP 請求資料。這包括 cookies、媒體型別和瀏覽器能理解的壓縮格式等等。
- 處理資料並生成結果。這個過程可能需要訪問資料庫,執行 RMI 或 CORBA 呼叫,呼叫 Web 服務,或者直接計算得出對應的響應。
- 傳送顯式的資料(即文件)到客戶端(瀏覽器)。該文件的格式可以是多種多樣的,包括文字檔案(HTML 或 XML)、二進位制檔案(GIF 影象)、Excel 等。
- 傳送隱式的 HTTP 響應到客戶端(瀏覽器)。這包括告訴瀏覽器或其他客戶端被返回的文件型別(例如 HTML),設定 cookies 和快取引數,以及其他類似的任務。
Servlet 包
Java Servlet 是執行在帶有支援 Java Servlet 規範的直譯器的 web 伺服器上的 Java 類。
Servlet 可以使用javax.servlet和javax.servlet.http包建立,它是 Java 企業版的標準組成部分,Java 企業版是支援大型開發專案的 Java 類庫的擴充套件版本。
這些類實現 Java Servlet 和 JSP 規範。在寫本教程的時候,二者相應的版本分別是 Java Servlet 2.5 和 JSP 2.1。
Java Servlet 就像任何其他的 Java 類一樣已經被建立和編譯。在您安裝 Servlet 包並把它們新增到您的計算機上的 Classpath 類路徑中之後,您就可以通過 JDK 的 Java 編譯器或任何其他編譯器來編譯 Servlet。
、實現 Servlet 介面
因為是實現 Servlet 介面,所以我們需要實現接口裡的方法。
下面我們也說明了 Servlet 的執行過程,也就是 Servlet 的生命週期。
//Servlet的生命週期:從Servlet被建立到Servlet被銷燬的過程
//一次建立,到處服務
//一個Servlet只會有一個物件,服務所有的請求
/*
* 1.例項化(使用構造方法建立物件)
* 2.初始化 執行init方法
* 3.服務 執行service方法
* 4.銷燬 執行destroy方法
*/
public class ServletDemo1 implements Servlet {
//public ServletDemo1(){}
//生命週期方法:當Servlet第一次被建立物件時執行該方法,該方法在整個生命週期中只執行一次
public void init(ServletConfig arg0) throws ServletException {
System.out.println("=======init=========");
}
//生命週期方法:對客戶端響應的方法,該方法會被執行多次,每次請求該servlet都會執行該方法
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
System.out.println("hehe");
}
//生命週期方法:當Servlet被銷燬時執行該方法
public void destroy() {
System.out.println("******destroy**********");
}
//當停止tomcat時也就銷燬的servlet。
public ServletConfig getServletConfig() {
return null;
}
public String getServletInfo() {
return null;
}
}
2、繼承 GenericServlet 類
它實現了 Servlet 介面除了 service 的方法,不過這種方法我們極少用。
public class ServletDemo2 extends GenericServlet {
@Override
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
System.out.println("heihei");
}
}
3、繼承 HttpServlet 方法
public class ServletDemo3 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("haha");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("ee");
doGet(req,resp);
}
}
建立 Servlet 的第三種方法,也是我們經常用的方法。
這裡只簡單講 Servlet 的三種建立方式,關於更詳細的應用我們後面再說。