程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> Servlet容器工作原理

Servlet容器工作原理

編輯:關於JSP

本文介紹servlet 容器的基本原理。現有兩個Servlet容器,第一個很簡單,第二個則是根據第一個寫出。為了使第一個容器盡量簡單,所以沒有做得很完整。復雜一些的 servlet 容器 (包括 TOMCAT 4 和 5) 可以參考其他資料。

兩個servlet容器都處理簡單的servlet及staticResource。您可以使用 webroot/ 目錄下的 PrimitiveServlet 來測試它。復雜一些的 servlet會超出這些容器的容量,創建復雜servlet容器不是本文的內容,所以在這裡就不詳細介紹了。

兩個應用程序的類都封裝在ex02.pyrmont 包下。在理解應用程序如何運作之前,您必須熟悉 javax.servlet.Servlet 接口。首先就來介紹這個接口。隨後,就介紹 servlet 容器服務servlet 的具體內容。

javax.servlet.Servlet 接口

servlet編程,需要引用以下兩個類和接口:javax.servlet 和 javax.servlet.http,在這些類和接口中,javax.servlet.Servlet接口尤為重要。所有的 servlet 必須實現這個接口或繼承已實現這個接口的類。

Servlet 接口有五個方法,如下:

 public void init(ServletConfig config) throws ServletException
 public void service(ServletRequest request, ServletResponse response) throws ServletException, java.io.IOException
 public void destroy()
 public ServletConfig getServletConfig()
 public java.lang.String getServletInfo()

init、service和 destroy 方法是 Servlet 生命周期的方法。當 Servlet 類實例化後,容器加載 init,以通知 servlet 它已進入服務行列。init 方法必須被加載,Servelt 才能接收和請求。如果要載入數據庫驅動程序、初始化一些值等等,程序員可以重寫這個方法。在其他情況下,這個方法一般為空。

service 方法由 Servlet 容器調用,以允許 Servlet 響應一個請求。Servlet 容器傳遞 javax.servlet.ServletRequest 對象和 javax.servlet.ServletResponse 對象。ServletRequest 對象包含客戶端 HTTP 請求信息,ServletResponse 則封裝servlet 響應。通過這兩個對象,您可以寫一些需要 servlet怎樣服務和客戶怎樣請求的代碼。

從service中刪除Servlet實例之前,容器調用destroy方法。在servlet容器關閉或servlet 容器需要更多的內存時,就調用它。這個方法只有在servlet 的service 方法內的所有線程都退出的時候,或在超時的時候才會被調用。在 servlet 容器調用 destroy方法之後,它將不再調用 servlet的 service方法。

destroy 方法給了servlet機會,來清除所有空閒資源(比如:內存,文件處理和線程),以確保在內存的持續狀態和 servlet的當前狀態是同步的。Listing 2.1 包含了PrimitiveServlet 的代碼,此servlet非常簡單,可以用它來測試本文的servlet容器應用程序。

PrimitiveServlet 類實現了javax.servlet.Servlet 並提供了五個servlet方法的接口。它做的事情也很簡單:每次調用 init、service 或 destroy方法的時候,servlet就向控制口寫入方法名。service 方法也從ServletResponsec對象中獲得java.io.PrintWriter 對象,並發送字符串到浏覽器。

Listing 2.1.PrimitiveServlet.java

import javax.servlet.*;
import java.io.IOException;
import java.io.PrintWriter;
public class PrimitiveServlet implements Servlet {
public void init(ServletConfig config) throws ServletException {
System.out.println("init");
}
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
System.out.println("from service");
PrintWriter out = response.getWriter();
out.println("Hello.Roses are red.");
out.print("Violets are blue.");
}
public void destroy() {
System.out.println("destroy");
}
public String getServletInfo() {
return null;
}
public ServletConfig getServletConfig() {
return null;
}
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved