1. 程式人生 > >Servlet簡單筆記

Servlet簡單筆記

HTTP Servlet繼承了GencenServlet類    GencenServlet實現了兩個介面··一個用於ServletConfig設定介面,一個為Servlet介面只要是(1) init() 方法 控制Servlet的生命週期··重點記憶8個方法HTTPServlet 使用一個 HTML 表格來發送和接收資料。要建立一個 HTTP Servlet,請擴充套件 HttpServlet 類, 該類是用專門的方法來處理 HTML 表格的 GenericServlet 的一個子類。 HTML 表單是由 <FORM> 和 </FORM> 標記定義的。表單中典型地包含輸入欄位(如文字輸入欄位、複選框、單選按鈕和選擇列表)和用於提交資料的按鈕。當提交資訊時,它們還指定伺服器應執行哪一
個Servlet(或其它的程式)。 HttpServlet 類包含 init()、destroy()、service() 等方法。其中 init() 和 destroy() 方法是繼承的。 (1) init() 方法 在 Servlet 的生命期中,僅執行一次 init() 方法。它是在伺服器裝入 Servlet 時執行的。可以配置伺服器,以在啟動伺服器或客戶機首次訪問 Servlet 時裝入 Servlet。 無論有多少客戶機訪問 Servlet,都不會重複執行 init() 。  預設的 init() 方法通常是符合要求的,但也可以用定製 init() 方法來覆蓋它,典型的是管理伺服器端資源。例如,可能編寫一個定製 init() 來只用於一次裝入 GIF 影象,改進 Servlet 返回 GIF
影象和含有多個客戶機請求的效能。另一個示例是初始化資料庫接。預設的 init() 方法設定了 Servlet 的初始化引數,並用它的 ServletConfig 物件引數來啟動配置, 因此所有覆蓋 init() 方法的 Servlet 應呼叫 super.init() 以確保仍然執行這些任務。在呼叫 service() 方法之前,應確保已完成了 init() 方法。 (2) service() 方法service() 方法是 Servlet 的核心。每當一個客戶請求一個HttpServlet 物件,該物件的service() 方法就要被呼叫,而且傳遞給這個方法一個"請求"(ServletRequest)物件和一個"響應"(ServletResponse)物件作為引數。
在 HttpServlet 中已存在 service() 方法。預設的服務功能是呼叫與 HTTP 請求的方法相應的 do 功能。例如,如果 HTTP 請求方法為 GET,則預設情況下就呼叫 doGet() 。Servlet 應該為 Servlet 支援的 HTTP 方法覆蓋 do 功能。因為 HttpServlet.service() 方法會檢查請求方法是否呼叫了適當的處理方法,不必要覆蓋 service() 方法。只需覆蓋相應的 do 方法就可以了。  Servlet的響應可以是下列幾種型別:  一個輸出流,瀏覽器根據它的內容型別(如text/HTML)進行解釋。  一個HTTP錯誤響應, 重定向到另一個URL、servlet、JSP。(3)doGet()方法  當一個客戶通過HTML 表單發出一個HTTP GET請求或直接請求一個URL時,doGet()方法被呼叫。與GET請求相關的引數新增到URL的後面,並與這個請求一起傳送。當不會修改伺服器端的資料時,應該使用doGet()方法。(4)doPost()方法  當一個客戶通過HTML 表單發出一個HTTP POST請求時,doPost()方法被呼叫。與POST請求相關的引數作為一個單獨的HTTP 請求從瀏覽器傳送到伺服器。當需要修改伺服器端的資料時,應該使用doPost()方法。 (5) destroy() 方法 destroy() 方法僅執行一次,即在伺服器停止且卸裝Servlet 時執行該方法。典型的,將 Servlet 作為伺服器程序的一部分來關閉。預設的 destroy() 方法通常是符合要求的,但也可以覆蓋它,典型的是管理伺服器端資源。例如,如果 Servlet 在執行時會累計統計資料,則可以編寫一個 destroy() 方法,該方法用於在未裝入 Servlet 時將統計數字儲存在檔案中。另一個示例是關閉資料庫連線。  當伺服器卸裝 Servlet 時,將在所有 service() 方法呼叫完成後,或在指定的時間間隔過後呼叫 destroy() 方法。一個Servlet 在執行service() 方法時可能會產生其它的執行緒,因此請確認在呼叫 destroy() 方法時,這些執行緒已終止或完成。 (6) GetServletConfig()方法  GetServletConfig()方法返回一個 ServletConfig 物件,該物件用來返回初始化引數和ServletContext。ServletContext 介面提供有關servlet 的環境資訊。 (7) GetServletInfo()方法  GetServletInfo()方法是一個可選的方法,它提供有關servlet 的資訊,如作者、版本、版權。  當伺服器呼叫sevlet 的Service()、doGet()和doPost()這三個方法時,均需要 "請求"和"響應"物件作為引數。"請求"物件提供有關請求的資訊,而"響應"物件提供了一個將響應資訊返回給瀏覽器的一個通訊途徑。 javax.servlet 軟體包中的相關類為ServletResponse和ServletRequest,而javax.servlet.http 軟體包中的相關類為HttpServletRequest 和 HttpServletResponse。Servlet 通過這些物件與伺服器通訊並最終與客戶機通訊。Servlet 能通過呼叫"請求"物件的方法獲知客戶機環境,伺服器環境的資訊和所有由客戶機提供的資訊。Servlet 可以呼叫"響應"物件的方法傳送響應,該響應是準備發回客戶機的。

servlet的應用建立Servlet 1.繼承Httpervlet 2.實現doPost()或doGet()方法部署Servlet 編譯Servlet到/WEB-INF/classes目錄 編輯部署描述檔案web.xml <servlet> <servlet-name>test</servlet-name> <servlet-class>com.mxl.servlet.TestServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>test</servlet-name> <url-pattern>/test</url-pattern> </servlet-mapping>啟動Tomcat,訪問servlet1.絕對匹配(精確匹配) /xx 根目錄/xx <servlet> <servlet-name>test</servlet-name> <servlet-class>com.mxl.servlet.TestServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>test</servlet-name> <url-pattern>/test</url-pattern> </servlet-mapping>2.萬用字元配置方式 * /xx/* 根目錄/xx/aa 根目錄/xx/bb <servlet> <servlet-name>test</servlet-name> <servlet-class>com.mxl.servlet.TestServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>test</servlet-name> <url-pattern>/test/*</url-pattern> </servlet-mapping>3.萬用字元配置方式 *.xx 根目錄/aa/bb/c.xx <servlet> <servlet-name>test</servlet-name> <servlet-class>com.mxl.servlet.TestServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>test</servlet-name> <url-pattern>/test/*.do</url-pattern> </servlet-mapping>----------------------------------------------------servlet生命週期生命週期的各個階段例項化 Servlet容器建立Servlet的例項初始化 該容器呼叫init()方法請求處理 如果請求Servlet,則容器呼叫servlet()方法服務終止 銷燬例項之前呼叫destroy()方法 public TestServlet() { System.out.println("====例項化TestServlet====="); } @Override public void init() throws ServletException { super.init(); System.out.println("====初始化Servlet例項====="); } @Override protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException { super.service(arg0, arg1); System.out.println("====處理Servlet請求====="+this); } @Override public void destroy() { super.destroy(); System.out.println("====銷燬Servlet例項====="); } 結果順序:====例項化TestServlet=========初始化Servlet例項=========處理Servlet請求=====com.mxl.servlet.TestServlet@578641a4====處理Servlet請求=====com.mxl.servlet.TestServlet@578641a4====處理Servlet請求=====com.mxl.servlet.TestServlet@578641a4--------------------------------Servlet控制器控制器的主要功能是接受請求,例項化javaBean物件,來呼叫javabean獨享對業務進行處理jsp頁面的主要功能是顯示資料可以獲取專案的根路徑:request.getContextPath();String contextPath = request.getContextPath();-----------------------------------使用Servlet配置引數1.Servlet初始化引數配置 <servlet> <servlet-name>test</servlet-name> <servlet-class>com.mxl.servlet.TestServlet</servlet-class> <init-param> <param-name>name</param-name> <param-value>bdqn</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>test</servlet-name> <url-pattern>/test</url-pattern> </servlet-mapping> @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // Servlet初始化引數配置 String value = getInitParameter("name"); System.out.println(value+"========="); doPost(req, resp); }ServletContext 介面概述 獲取Servlet上下文ServletContext的常用方法1.public String getInitParameter(String name) 獲取名稱為name的系統範圍內的初始化引數值,系統範圍內的初始化引數可以部署描述符中使用<context-param>元素定義2.public void setAttribute(String name,Object object) 設定名稱為name的屬性3.public Object getAttribute(String name) 獲取名稱為name的屬性4.public String getTealPath(String path) 返回引數所代表目錄的真實路徑5.public void(String message) 記錄一般日誌資訊配置Servlet上下文<context-param> <param-name>key</param-name> <param-value>java</param-value> </context-param> 獲取Servlet上下文 @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String value = getInitParameter("name"); System.out.println(value+"========="); // 獲取Servlet上下文 String key = this.getServletContext().getInitParameter("key"); System.out.println(key+"============="); doPost(req, resp); }總結: 配置初始化引數 init-param getInitParameter("initParam"); 配置全域性引數 context-param this.getServletContext().getInitParameter("key");1. Servlet是一個java程式,它執行在服務端,接收和處理使用者的請求,並做出響應2. Servlet API包含兩個包:javax.servlet中包含的類和介面支援通用的不依賴協議的Servletjavax.servlet.http中的類和介面用於支援HTTP協議的Servlet API。3. Servlet的生命週期如下:載入和例項化,初始化,服務,銷燬4. 容器根據在web.xml檔案定義的URL對映查詢Servlet(查詢方式:<servlet-mapping>中的<url-pattern>--> <servlet-name> ,再到<servlet>中的<servlet-name>--> <servlet-calss>),並呼叫該Servlet以處理使用者的請求