在javaweb開發(fā)中,Servlet和Filter是很重要的兩個概念,我們平時進行javaweb開發(fā)的時候,會經(jīng)常和Servlet和Filter打交道,但我們真的了解Servlet和Filter嗎?
成都創(chuàng)新互聯(lián)專注于企業(yè)全網(wǎng)營銷推廣、網(wǎng)站重做改版、林甸網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、成都h5網(wǎng)站建設(shè)、商城網(wǎng)站開發(fā)、集團公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為林甸等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
一、基本概念
Servlet:
Servlet 是在WEB服務(wù)器上運行的程序。這個詞是在 Java applet的環(huán)境中創(chuàng)造的,Java applet 是一種當(dāng)作單獨文件跟網(wǎng)頁一起發(fā)送的小程序,它通常用于在客戶端運行,結(jié)果得到為用戶進行運算或者根據(jù)用戶互作用定位圖形等服務(wù)。
服務(wù)器上需要一些程序,常常是根據(jù)用戶輸入訪問數(shù)據(jù)庫的程序。這些通常是使用公共網(wǎng)關(guān)接口(Common Gateway Interface,CGI)應(yīng)用程序完成的。然而,在服務(wù)器上運行 Java,這種程序可使用 Java 編程語言實現(xiàn)。在通信量大的服務(wù)器上,JavaServlet 的優(yōu)點在于它們的執(zhí)行速度更快于 CGI 程序。各個用戶請求被激活成單個程序中的一個線程,而無需創(chuàng)建單獨的進程,這意味著服務(wù)器端處理請求的系統(tǒng)開銷將明顯降低。
Servlet創(chuàng)建并返回一個包含基于客戶請求性質(zhì)的動態(tài)內(nèi)容的完整的html頁面;
創(chuàng)建可嵌入到現(xiàn)有的html頁面中的一部分html頁面(html片段);
讀取客戶端發(fā)來的隱藏數(shù)據(jù);
讀取客戶端發(fā)來的顯示數(shù)據(jù);
與其他服務(wù)器資源(包括數(shù)據(jù)庫和java的應(yīng)用程序)進行通信;
通過狀態(tài)代碼和響應(yīng)頭向客戶端發(fā)送隱藏數(shù)據(jù)。
Filter:
filter是一個可以復(fù)用的代碼片段,可以用來轉(zhuǎn)換HTTP請求、響應(yīng)和頭信息。Filter不像Servlet,它不能產(chǎn)生一個請求或者響應(yīng),它只是修改對某一資源的請求,或者修改從某一的響應(yīng)。
二、生命周期:
1、servlet:servlet的生命周期始于它被裝入web服務(wù)器的內(nèi)存時,并在web服務(wù)器終止或重新裝入servlet時結(jié)束。servlet一旦被裝入web服務(wù)器,一般不會從web服務(wù)器內(nèi)存中刪除,直至web服務(wù)器關(guān)閉或重新結(jié)束。
(1)、裝入:啟動服務(wù)器時加載Servlet的實例;
(2)、初始化:web服務(wù)器啟動時或web服務(wù)器接收到請求時,或者兩者之間的某個時刻啟動。初始化工作有init()方法負責(zé)執(zhí)行完成;
(3)、調(diào)用:從第一次到以后的多次訪問,都是只調(diào)用doGet()或doPost()方法;
(4)、銷毀:停止服務(wù)器時調(diào)用destroy()方法,銷毀實例。
2、filter:(一定要實現(xiàn)javax.servlet包的Filter接口的三個方法init()、doFilter()、destroy(),空實現(xiàn)也行)
(1)、啟動服務(wù)器時加載過濾器的實例,并調(diào)用init()方法來初始化實例;
(2)、每一次請求時都只調(diào)用方法doFilter()進行處理;
(3)、停止服務(wù)器時調(diào)用destroy()方法,銷毀實例。
三、職責(zé)
1、servlet:
創(chuàng)建并返回一個包含基于客戶請求性質(zhì)的動態(tài)內(nèi)容的完整的html頁面;
創(chuàng)建可嵌入到現(xiàn)有的html頁面中的一部分html頁面(html片段);
讀取客戶端發(fā)來的隱藏數(shù)據(jù);
讀取客戶端發(fā)來的顯示數(shù)據(jù);
與其他服務(wù)器資源(包括數(shù)據(jù)庫和java的應(yīng)用程序)進行通信;
通過狀態(tài)代碼和響應(yīng)頭向客戶端發(fā)送隱藏數(shù)據(jù)。
2、filter:
filter能夠在一個請求到達servlet之前預(yù)處理用戶請求,也可以在離開servlet時處理http響應(yīng):
在執(zhí)行servlet之前,首先執(zhí)行filter程序,并為之做一些預(yù)處理工作;
根據(jù)程序需要修改請求和響應(yīng);
在servlet被調(diào)用之后截獲servlet的執(zhí)行
四、區(qū)別:
1,servlet 流程是短的,url傳來之后,就對其進行處理,之后返回或轉(zhuǎn)向到某一自己指定的頁面。它主要用來在 業(yè)務(wù)處理之前進行控制.
2,filter 流程是線性的, url傳來之后,檢查之后,可保持原來的流程繼續(xù)向下執(zhí)行,被下一個filter, servlet接收等,而servlet 處理之后,不會繼續(xù)向下傳遞。filter功能可用來保持流程繼續(xù)按照原來的方式進行下去,或者主導(dǎo)流程,而servlet的功能主要用來主導(dǎo)流程。
filter可用來進行字符編碼的過濾,檢測用戶是否登陸的過濾,禁止頁面緩存等
五、執(zhí)行流程圖:
1、servlet:
2、filter:
javaweb開發(fā)我們常用到的后臺框架有Struts2和Springmvc。其中Struts2的入口filter,而Springmvc的入口是servlet;
我們在使用Struts2進行開發(fā)時,web.xml中的核心控制器是這樣配置的
<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter>
而使用Springmvc進行開發(fā)時,其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)用就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持創(chuàng)新互聯(lián)。
網(wǎng)頁名稱:詳談Servlet和Filter的區(qū)別以及兩者在Struts2和Springmvc中的應(yīng)用
轉(zhuǎn)載注明:http://aaarwkj.com/article2/jeeiic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、網(wǎng)站收錄、外貿(mào)建站、服務(wù)器托管、企業(yè)建站、網(wǎng)站營銷
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)