Servlet原理:
1.Servlet簡(jiǎn)介:
servlet是運(yùn)行在 Web 服務(wù)器或應(yīng)用服務(wù)器上的程序,它是作為來(lái)自 Web 瀏覽器或其他 HTTP 客戶端的請(qǐng)求和 HTTP 服務(wù)器上的數(shù)據(jù)庫(kù)或應(yīng)用程序之間的中間層。
2.作用:
收集來(lái)自網(wǎng)頁(yè)表單的用戶輸入,呈現(xiàn)來(lái)自數(shù)據(jù)庫(kù)或者其他源的記錄,還可以動(dòng)態(tài)創(chuàng)建網(wǎng)頁(yè)。
3.優(yōu)勢(shì):
(1)性能明顯更好。
(2)Servlet 在 Web 服務(wù)器的地址空間內(nèi)執(zhí)行。這樣它就沒(méi)有必要再創(chuàng)建一個(gè)單獨(dú)的進(jìn)程來(lái)處理每個(gè)客戶端請(qǐng)求。
(3)Servlet 是獨(dú)立于平臺(tái)的,因?yàn)樗鼈兪怯?Java 編寫的。
(4)服務(wù)器上的 Java 安全管理器執(zhí)行了一系列限制,以保護(hù)服務(wù)器計(jì)算機(jī)上的資源。因此,Servlet 是可信的。
(5)Java 類庫(kù)的全部功能對(duì) Servlet 來(lái)說(shuō)都是可用的。它可以通過(guò) sockets 和 RMI 機(jī)制與 applets、數(shù)據(jù)庫(kù)或其他軟件進(jìn)行交互。
4.架構(gòu)原理圖:
5.Servlet 任務(wù):
(1)讀取客戶端(瀏覽器)發(fā)送的顯式的數(shù)據(jù)。這包括網(wǎng)頁(yè)上的 HTML 表單,或者也可以是來(lái)自 applet 或自定義的 HTTP 客戶端程序的表單。
(2)讀取客戶端(瀏覽器)發(fā)送的隱式的 HTTP 請(qǐng)求數(shù)據(jù)。這包括 cookies、媒體類型和瀏覽器能理解的壓縮格式等等。
(3)處理數(shù)據(jù)并生成結(jié)果。這個(gè)過(guò)程可能需要訪問(wèn)數(shù)據(jù)庫(kù),執(zhí)行 RMI 或 CORBA 調(diào)用,調(diào)用 Web 服務(wù),或者直接計(jì)算得出對(duì)應(yīng)的響應(yīng)。
(4)發(fā)送顯式的數(shù)據(jù)(即文檔)到客戶端(瀏覽器)。該文檔的格式可以是多種多樣的,包括文本文件(HTML 或 XML)、二進(jìn)制文件(GIF 圖像)、Excel 等。
(5)發(fā)送隱式的 HTTP 響應(yīng)到客戶端(瀏覽器)。這包括告訴瀏覽器或其他客戶端被返回的文檔類型(例如 HTML),設(shè)置 cookies 和緩存參數(shù),以及其他類似的任務(wù)。
6.servlet的生命周期(創(chuàng)建——?dú)?#xff09;:
(1)init ()方法被設(shè)計(jì)成只調(diào)用一次。它在第一次創(chuàng)建 Servlet 時(shí)被調(diào)用,在后續(xù)每次用戶請(qǐng)求時(shí)不再調(diào)用。當(dāng)用戶調(diào)用一個(gè) Servlet 時(shí),就會(huì)創(chuàng)建一個(gè) Servlet 實(shí)例,每一個(gè)用戶請(qǐng)求都會(huì)產(chǎn)生一個(gè)新的線程,適當(dāng)?shù)臅r(shí)候移交給 doGet 或 doPost 方法。init() 方法簡(jiǎn)單地創(chuàng)建或加載一些數(shù)據(jù),這些數(shù)據(jù)將被用于 Servlet 的整個(gè)生命周期。
public void init() throws ServletException {// 初始化代碼... }(2)service() 方法:處理來(lái)自客戶端(瀏覽器)的請(qǐng)求,并把格式化的響應(yīng)寫回給客戶端。service() 方法由容器調(diào)用,service 方法在適當(dāng)?shù)臅r(shí)候調(diào)用 doGet、doPost、doPut、doDelete 等方法。所以,您不用對(duì) service() 方法做任何動(dòng)作,您只需要根據(jù)來(lái)自客戶端的請(qǐng)求類型來(lái)重寫 doGet() 或 doPost() 即可。
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException{ }(3)doGet() 方法:GET 請(qǐng)求來(lái)自于一個(gè) URL 的正常請(qǐng)求,或者來(lái)自于一個(gè)未指定 METHOD 的 HTML 表單,它由 doGet() 方法處理。
public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {// Servlet 代碼 }實(shí)例:
(4)doPost() 方法:POST 請(qǐng)求來(lái)自于一個(gè)特別指定了 METHOD 為 POST 的 HTML 表單,它由 doPost() 方法處理。
public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {// Servlet 代碼 }(5)destroy() 方法:destroy() 方法只會(huì)被調(diào)用一次,在 Servlet 生命周期結(jié)束時(shí)被調(diào)用。destroy() 方法可以讓您的 Servlet 關(guān)閉數(shù)據(jù)庫(kù)連接、停止后臺(tái)線程、把 Cookie 列表或點(diǎn)擊計(jì)數(shù)器寫入到磁盤,并執(zhí)行其他類似的清理活動(dòng)。
public void destroy() {// 終止化代碼...}7.servlet過(guò)濾器:
Servlet 過(guò)濾器可以動(dòng)態(tài)地?cái)r截請(qǐng)求和響應(yīng),以變換或使用包含在請(qǐng)求或響應(yīng)中的信息。可以將一個(gè)或多個(gè) Servlet 過(guò)濾器附加到一個(gè) Servlet 或一組 Servlet。Servlet 過(guò)濾器也可以附加到 JavaServer Pages (JSP) 文件和 HTML 頁(yè)面。調(diào)用 Servlet 前調(diào)用所有附加的 Servlet 過(guò)濾器。
作用:
- 在客戶端的請(qǐng)求訪問(wèn)后端資源之前,攔截這些請(qǐng)求。
- 在服務(wù)器的響應(yīng)發(fā)送回客戶端之前,處理這些響應(yīng)。
提高了三個(gè)方法:
public void doFilter (ServletRequest, ServletResponse, FilterChain)
該方法完成實(shí)際的過(guò)濾操作,當(dāng)客戶端請(qǐng)求方法與過(guò)濾器設(shè)置匹配的URL時(shí),Servlet容器將先調(diào)用過(guò)濾器的doFilter方法。FilterChain用戶訪問(wèn)后續(xù)過(guò)濾器。
public void init(FilterConfig filterConfig)
web 應(yīng)用程序啟動(dòng)時(shí),web 服務(wù)器將創(chuàng)建Filter 的實(shí)例對(duì)象,并調(diào)用其init方法,讀取web.xml配置,完成對(duì)象的初始化功能,從而為后續(xù)的用戶請(qǐng)求作好攔截的準(zhǔn)備工作(filter對(duì)象只會(huì)創(chuàng)建一次,init方法也只會(huì)執(zhí)行一次)。開發(fā)人員通過(guò)init方法的參數(shù),可獲得代表當(dāng)前filter配置信息的FilterConfig對(duì)象。
public void destroy()
Servlet容器在銷毀過(guò)濾器實(shí)例前調(diào)用該方法,在該方法中釋放Servlet過(guò)濾器占用的資源。
實(shí)例:
總結(jié)
以上是生活随笔為你收集整理的Servlet原理:的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: iText 下载
- 下一篇: 如何把代码写的更优雅,你需要这一份代码精