Servlet 概述

一、什麼是Servlet

  Servlet是用Java編寫的Server端程序,它與協議和平臺無關。Servlet運行於Java-enabled Web Server中。Java Servlet能夠動態地擴展Server的能力,並採用請求-響應模式提供Web服務。

  最先支持Servlet技術的是JavaSoft的Java Web Server。此後,一些其它的基於Java的Web Server開始支持標準的Servlet API。

二、Servlet有什麼做用

  Servlet的主要功能在於交互式地瀏覽和修改數據,生成動態Web內容。這個過程爲:

  客戶端發送請求至服務器端

  服務器將請求信息發送至Servlet

  Servlet處理請求生成響應內容並將其傳給Server

  服務器將響應返回給客戶端

  Servlet看起來像是一般的Java程序。Servlet導入特定的屬於Java Servlet API的包。由於是對象字節碼,可動態地從網絡加載,能夠說Servlet對Server就如同Applet對Client同樣,可是,因爲Servlet運行於Server中,它們並不須要一個圖形用戶界面。從這個角度講,Servlet也被稱爲Faceless Object。

三、Servlet的優點

  Servlet能夠和其餘資源(文件、數據庫、Applet、Java應用程序等)交互,以生成返回給客戶端的響應內容。若是須要,還能夠保存請求-響應過程當中的信息。

  採用Servlet,服務器能夠徹底受權對本地資源的訪問(如數據庫),而且Servlet自身將會控制外部用戶的訪問數量及訪問性質

  Servlet能夠是其它服務的客戶端程序,例如,它們能夠用於分佈式的應用系統中,能夠從本地硬盤,或者經過網絡從遠端硬盤激活Servlet。

  Servlet可被連接(chain)。一個Servlet能夠調用另外一個或一系列Servlet,即成爲它的客戶端。

  採用Servlet Tag技術,能夠在HTML頁面中動態調用Servlet。

  Servlet API與協議無關。它並不對傳遞它的協議有任何假設。

  像全部的Java程序同樣,Servlet擁有面向對象Java語言的全部優點

  Servlet提供了Java應用程序的全部優點——可移植、穩健、易開發。使用Servlet的Tag技術,Servlet可以生成嵌於靜態HTML頁面中的動態內容。

  一個Servlet被客戶端發送的第一個請求激活,而後它將繼續運行於後臺,等待之後的請求。每一個請求將生成一個新的線程,而不是一個完整的進程。多個客戶可以在同一個進程中同時獲得服務。通常來講,Servlet進程只是在Web Server卸載時被卸載。

四、Servlet的生命週期

  Servlet的生命週期是由Servlet的容器來控制的,它能夠分爲3個階段:初始化,運行,銷燬。

  初始化階段:當Servlet容器啓動時,或者在容器檢測到須要這個Servlet來響應第一個請求時,建立Servlet實例

  ①、加載:Servlet容器加載servlet類,把servlet類的.class文件中的數據讀到內存中。

  ②、而後Servlet容器建立一個ServletConfig對象。ServletConfig對象包含了Servlet的初始化配置信息。

  ③、實例化:Servlet容器建立一個servlet對象。

  ④、初始化:Servlet容器調用servlet對象的init方法進行初始化,Servlet實例可使用容器爲它準備的ServletConfig對象從Web應用程序的配置信息(在web.xml中配置)中獲取初始化的參數信息。 java

在web.xml文件中爲servlet設置了<load-on-startup>元素
<servlet>
    <servlet-name>servlet1</servlet-name>
    <servlet-class>servlet.servlet1</servlet-class>
    <load-on-startup>0</load-on-startup>
</servlet>
說明:
在servlet的配置當中,<load-on-startup>0</load-on-startup>的含義是:標記容器是否在啓動的時候就加載這個servlet。
當值爲0或者大於0時,表示容器在應用啓動時就加載這個servlet;當是一個負數時或者沒有指定時,則指示容器在該servlet第一次被請求時才加載。正數的值越小,啓動該servlet的優先級越高。
當web應用被從新啓動時,web應用中的全部servlet會在特定的時間被從新初始化。 web

  運行階段:

  當servlet容器接收到一個請求時,servlet容器會針對這個請求建立ServletRequest和ServletResponse對象。而後調用service方法,並把這兩個參數傳遞給service方法。service方法經過ServletRequest對象得到請求的信息,並處理該請求。再經過ServletResponse對象生成這個請求的響應結果,而後銷燬ServletRequest和ServletResponse對象。咱們無論這個請求是post提交的仍是get提交的,最終這個請求都會由service方法來處理。

  銷燬階段:

  當Web應用被終止時,servlet容器會先調用servlet對象的destrory方法,而後再銷燬servlet對象,同時也會銷燬與servlet對象相關聯的ServletConfig對象。咱們能夠在destroy方法的實現中,釋放servlet所佔用的資源,如關閉數據庫鏈接,關閉文件輸入輸出流等。

  在這裏該注意的地方:在servlet生命週期中,servlet的初始化和和銷燬階段只會發生一次,而service方法執行的次數則取決於servlet被客戶端訪問的次數。

五、Servlet怎麼處理一個請求

  當用戶發送一個請求到某個Servlet的時候,Servlet容器會建立一個ServletRequst和ServletResponse對象。在ServletRequst對象中封裝了用戶的請求信息,而後Servlet容器把ServletRequst和ServletResponse對象傳給用戶所請求的Servlet,Servlet把處理好的結果寫在ServletResponse中,而後Servlet容器把響應結果傳給用戶。

六、Servlet與JSP有什麼區別

  a、jsp經編譯後就是servlet 。

  a、jsp更擅長頁面(表現)。servlet更擅長邏輯編輯(最核心的區別)。

  c、在實際應用中採用Servlet來控制業務流程,而採用JSP來生成動態網頁。在struts框架中,JSP位於MVC設計模式的視圖層,而Servlet位於控制層。

七、Servlet裏的cookie技術

  cookies是一種WEB服務器經過瀏覽器在訪問者的硬盤上存儲信息的手段,是由Netscape公司開發出來的。

  cookie技術的好處:

    a、Cookie有效期限未到時,Cookie能使用戶在不鍵入密碼和用戶名的狀況下進入曾經瀏覽過的一些站點。

    b、Cookie能使站點跟蹤特定訪問者的訪問次數、最後訪問時間和訪問者進入站點的路徑。

建立一個cookie
//裏面的兩個參數分別是cookie的名和cookie的值
response.addCookie(new Cookie("abc","10000000"));

使用cookie
Cookie[] cook =request.getCookies();//用一個Cookie數組來接收
for(int j=0;j<cook.length;j++){//經過循環來打印Cookie
	cook[j].getName();//取cookie的名
	cook[j].getValue();//取cookie的值
}

八、Servlet裏的過濾器

  (1)過濾器的主要做用

  a、任何系統或網站都要判斷用戶是否登陸

  b、網絡聊天系統或論壇中過濾非法文字

  c、統一解決編碼問題

  (2)怎麼建立一個過濾器:

  a、編寫一個普通的class類,實現Filter接口(javax.servlet.Filter)。

  b、重寫接口裏面的三個方法:init,doFilter,destroy。

  c、而後在web.xml配置過濾器。

九、Servlet裏的監聽器

  監聽器的做用:自動執行一些操做

  三種servlet監聽器:在Servlet規範中定義了多種類型的監聽器,它們用於監聽的事件源分別爲ServletContext、HttpSession 和 ServletRequest 這三個域對象

  怎麼建立一個session監聽器:

  a、編寫一個普通的class類,若是監聽HttpSession的操做,則實現HttpSessionListener接口

  b、而後重寫裏面的方法:
public void sessionCreated(HttpSessionEvent arg0) {} // 建立

public void sessionDestroyed(HttpSessionEvent arg0) {} // 銷燬
相關文章
相關標籤/搜索