欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳談Servlet和Filter的區(qū)別以及兩者在Struts2和Springmvc中的應(yīng)用

 更新時(shí)間:2017年08月05日 08:56:09   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇詳談Servlet和Filter的區(qū)別以及兩者在Struts2和Springmvc中的應(yīng)用。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

在javaweb開(kāi)發(fā)中,Servlet和Filter是很重要的兩個(gè)概念,我們平時(shí)進(jìn)行javaweb開(kāi)發(fā)的時(shí)候,會(huì)經(jīng)常和Servlet和Filter打交道,但我們真的了解Servlet和Filter嗎?

一、基本概念

Servlet:

Servlet 是在WEB服務(wù)器上運(yùn)行的程序。這個(gè)詞是在 Java applet的環(huán)境中創(chuàng)造的,Java applet 是一種當(dāng)作單獨(dú)文件跟網(wǎng)頁(yè)一起發(fā)送的小程序,它通常用于在客戶(hù)端運(yùn)行,結(jié)果得到為用戶(hù)進(jìn)行運(yùn)算或者根據(jù)用戶(hù)互作用定位圖形等服務(wù)。

服務(wù)器上需要一些程序,常常是根據(jù)用戶(hù)輸入訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的程序。這些通常是使用公共網(wǎng)關(guān)接口(Common Gateway Interface,CGI)應(yīng)用程序完成的。然而,在服務(wù)器上運(yùn)行 Java,這種程序可使用 Java 編程語(yǔ)言實(shí)現(xiàn)。在通信量大的服務(wù)器上,JavaServlet 的優(yōu)點(diǎn)在于它們的執(zhí)行速度更快于 CGI 程序。各個(gè)用戶(hù)請(qǐng)求被激活成單個(gè)程序中的一個(gè)線(xiàn)程,而無(wú)需創(chuàng)建單獨(dú)的進(jìn)程,這意味著服務(wù)器端處理請(qǐng)求的系統(tǒng)開(kāi)銷(xiāo)將明顯降低。

Servlet創(chuàng)建并返回一個(gè)包含基于客戶(hù)請(qǐng)求性質(zhì)的動(dòng)態(tài)內(nèi)容的完整的html頁(yè)面;

創(chuàng)建可嵌入到現(xiàn)有的html頁(yè)面中的一部分html頁(yè)面(html片段);

讀取客戶(hù)端發(fā)來(lái)的隱藏?cái)?shù)據(jù);

讀取客戶(hù)端發(fā)來(lái)的顯示數(shù)據(jù);

與其他服務(wù)器資源(包括數(shù)據(jù)庫(kù)和java的應(yīng)用程序)進(jìn)行通信;

通過(guò)狀態(tài)代碼和響應(yīng)頭向客戶(hù)端發(fā)送隱藏?cái)?shù)據(jù)。

Filter:

filter是一個(gè)可以復(fù)用的代碼片段,可以用來(lái)轉(zhuǎn)換HTTP請(qǐng)求、響應(yīng)和頭信息。Filter不像Servlet,它不能產(chǎn)生一個(gè)請(qǐng)求或者響應(yīng),它只是修改對(duì)某一資源的請(qǐng)求,或者修改從某一的響應(yīng)。

二、生命周期:

1、servlet:servlet的生命周期始于它被裝入web服務(wù)器的內(nèi)存時(shí),并在web服務(wù)器終止或重新裝入servlet時(shí)結(jié)束。servlet一旦被裝入web服務(wù)器,一般不會(huì)從web服務(wù)器內(nèi)存中刪除,直至web服務(wù)器關(guān)閉或重新結(jié)束。

(1)、裝入:?jiǎn)?dòng)服務(wù)器時(shí)加載Servlet的實(shí)例;

(2)、初始化:web服務(wù)器啟動(dòng)時(shí)或web服務(wù)器接收到請(qǐng)求時(shí),或者兩者之間的某個(gè)時(shí)刻啟動(dòng)。初始化工作有init()方法負(fù)責(zé)執(zhí)行完成;

(3)、調(diào)用:從第一次到以后的多次訪(fǎng)問(wèn),都是只調(diào)用doGet()或doPost()方法;

(4)、銷(xiāo)毀:停止服務(wù)器時(shí)調(diào)用destroy()方法,銷(xiāo)毀實(shí)例。

2、filter:(一定要實(shí)現(xiàn)javax.servlet包的Filter接口的三個(gè)方法init()、doFilter()、destroy(),空實(shí)現(xiàn)也行)

(1)、啟動(dòng)服務(wù)器時(shí)加載過(guò)濾器的實(shí)例,并調(diào)用init()方法來(lái)初始化實(shí)例;

(2)、每一次請(qǐng)求時(shí)都只調(diào)用方法doFilter()進(jìn)行處理;

(3)、停止服務(wù)器時(shí)調(diào)用destroy()方法,銷(xiāo)毀實(shí)例。

三、職責(zé)

1、servlet:

創(chuàng)建并返回一個(gè)包含基于客戶(hù)請(qǐng)求性質(zhì)的動(dòng)態(tài)內(nèi)容的完整的html頁(yè)面;

創(chuàng)建可嵌入到現(xiàn)有的html頁(yè)面中的一部分html頁(yè)面(html片段);

讀取客戶(hù)端發(fā)來(lái)的隱藏?cái)?shù)據(jù);

讀取客戶(hù)端發(fā)來(lái)的顯示數(shù)據(jù);

與其他服務(wù)器資源(包括數(shù)據(jù)庫(kù)和java的應(yīng)用程序)進(jìn)行通信;

通過(guò)狀態(tài)代碼和響應(yīng)頭向客戶(hù)端發(fā)送隱藏?cái)?shù)據(jù)。

2、filter:

filter能夠在一個(gè)請(qǐng)求到達(dá)servlet之前預(yù)處理用戶(hù)請(qǐng)求,也可以在離開(kāi)servlet時(shí)處理http響應(yīng):

在執(zhí)行servlet之前,首先執(zhí)行filter程序,并為之做一些預(yù)處理工作;

根據(jù)程序需要修改請(qǐng)求和響應(yīng);

在servlet被調(diào)用之后截獲servlet的執(zhí)行

四、區(qū)別:

1,servlet 流程是短的,url傳來(lái)之后,就對(duì)其進(jìn)行處理,之后返回或轉(zhuǎn)向到某一自己指定的頁(yè)面。它主要用來(lái)在 業(yè)務(wù)處理之前進(jìn)行控制.

2,filter 流程是線(xiàn)性的, url傳來(lái)之后,檢查之后,可保持原來(lái)的流程繼續(xù)向下執(zhí)行,被下一個(gè)filter, servlet接收等,而servlet 處理之后,不會(huì)繼續(xù)向下傳遞。filter功能可用來(lái)保持流程繼續(xù)按照原來(lái)的方式進(jìn)行下去,或者主導(dǎo)流程,而servlet的功能主要用來(lái)主導(dǎo)流程。

filter可用來(lái)進(jìn)行字符編碼的過(guò)濾,檢測(cè)用戶(hù)是否登陸的過(guò)濾,禁止頁(yè)面緩存等

五、執(zhí)行流程圖:

1、servlet:

2、filter:

javaweb開(kāi)發(fā)我們常用到的后臺(tái)框架有Struts2和Springmvc。其中Struts2的入口filter,而Springmvc的入口是servlet;

我們?cè)谑褂肧truts2進(jìn)行開(kāi)發(fā)時(shí),web.xml中的核心控制器是這樣配置的

<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>

而使用Springmvc進(jìn)行開(kāi)發(fā)時(shí),其web.xml是這樣配置的

<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>

以上這篇詳談Servlet和Filter的區(qū)別以及兩者在Struts2和Springmvc中的應(yīng)用就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論