欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

如何進(jìn)行Servlet過濾器的概念及結(jié)構(gòu)淺析

如何進(jìn)行Servlet過濾器的概念及結(jié)構(gòu)淺析,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

成都創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的化德網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

1.Servlet 過濾器是什么?

Servlet 過濾器是小型的 Web 組件,它們攔截請(qǐng)求和響應(yīng),以便查看、提取或以某種方式操作正在客戶機(jī)和服務(wù)器之間交換的數(shù)據(jù)。過濾器是通常封裝了一些功能的 Web 組件,這些功能雖然很重要,但是對(duì)于處理客戶機(jī)請(qǐng)求或發(fā)送響應(yīng)來說不是決定性的。典型的例子包括記錄關(guān)于請(qǐng)求和響應(yīng)的數(shù)據(jù)、處理安全協(xié)議、管理會(huì)話屬性,等等。過濾器提供一種面向?qū)ο蟮哪K化機(jī)制,用以將公共任務(wù)封裝到可插入的組件中,這些組件通過一個(gè)配置文件來聲明,并動(dòng)態(tài)地處理。

Servlet 過濾器中結(jié)合了許多元素,從而使得過濾器成為獨(dú)特、強(qiáng)大和模塊化的 Web 組件。也就是說,Servlet 過濾器是:

◆聲明式的 :過濾器通過 Web 部署描述符(web.xml)中的 XML 標(biāo)簽來聲明。這樣允許添加和刪除過濾器,而無需改動(dòng)任何應(yīng)用程序代碼或 JSP 頁(yè)面。

◆動(dòng)態(tài)的 :過濾器在運(yùn)行時(shí)由 Servlet 容器調(diào)用來攔截和處理請(qǐng)求和響應(yīng)。

◆靈活的 :過濾器在 Web 處理環(huán)境中的應(yīng)用很廣泛,涵蓋諸如日志記錄和安全等許多最公共的輔助任務(wù)。過濾器還是靈活的,因?yàn)樗鼈兛捎糜趯?duì)來自客戶機(jī)的直接調(diào)用執(zhí)行預(yù)處理和后期處理,以及處理在防火墻之后的 Web 組件之間調(diào)度的請(qǐng)求。***,可以將過濾器鏈接起來以提供必需的功能。

◆模塊化的 :通過把應(yīng)用程序處理邏輯封裝到單個(gè)類文件中,過濾器從而定義了可容易地從請(qǐng)求/響應(yīng)鏈中添加或刪除的模塊化單元。

◆可移植的 :與 Java 平臺(tái)的其他許多方面一樣,Servlet 過濾器是跨平臺(tái)和跨容器可移植的,從而進(jìn)一步支持了 Servler 過濾器的模塊化和可重用本質(zhì)。

◆可重用的 :歸功于過濾器實(shí)現(xiàn)類的模塊化設(shè)計(jì),以及聲明式的過濾器配置方式,過濾器可以容易地跨越不同的項(xiàng)目和應(yīng)用程序使用。

◆透明的 :在請(qǐng)求/響應(yīng)鏈中包括過濾器,這種設(shè)計(jì)是為了補(bǔ)充(而不是以任何方式替代)servlet 或 JSP 頁(yè)面提供的核心處理。因而,過濾器可以根據(jù)需要添加或刪除,而不會(huì)破壞 servlet 或 JSP 頁(yè)面。

2.Servlet 過濾器體系結(jié)構(gòu)

正如其名稱所暗示的, Servlet 過濾器用于攔截傳入的請(qǐng)求和/或傳出的響應(yīng),并監(jiān)視、修改或以某種方式處理正在通過的數(shù)據(jù)流。過濾器是自包含、模塊化的組件,可以將它們添加到請(qǐng)求/響應(yīng)鏈中,或者在無需影響應(yīng)用程序中其他 Web 組件的情況下刪除它們。過濾器僅只是改動(dòng)請(qǐng)求和響應(yīng)的運(yùn)行時(shí)處理,因而不應(yīng)該將它們直接嵌入 Web 應(yīng)用程序框架,除非是通過 Servlet API 中良好定義的標(biāo)準(zhǔn)接口來實(shí)現(xiàn)。

Web 資源可以配置為沒有過濾器與之關(guān)聯(lián)(這是默認(rèn)情況)、與單個(gè)過濾器關(guān)聯(lián)(這是典型情況),甚至是與一個(gè)過濾器鏈相關(guān)聯(lián)。那么過濾器究竟做什么呢? 像 servlet 一樣,它接受請(qǐng)求并響應(yīng)對(duì)象。然后過濾器會(huì)檢查請(qǐng)求對(duì)象,并決定將該請(qǐng)求轉(zhuǎn)發(fā)給鏈中的下一個(gè)組件,或者中止該請(qǐng)求并直接向客戶機(jī)發(fā)回一個(gè)響應(yīng)。如果請(qǐng)求被轉(zhuǎn)發(fā)了,它將被傳遞給鏈中的下一個(gè)資源(另一個(gè)過濾器、servlet 或 JSP 頁(yè)面)。在這個(gè)請(qǐng)求設(shè)法通過過濾器鏈并被服務(wù)器處理之后,一個(gè)響應(yīng)將以相反的順序通過該鏈發(fā)送回去。這樣就給每個(gè)過濾器都提供了根據(jù)需要處理響應(yīng)對(duì)象的機(jī)會(huì)。

當(dāng)過濾器在 Servlet 2.3 規(guī)范中***引入時(shí),它們只能過濾 Web 客戶機(jī)和客戶機(jī)所訪問的指定 Web 資源之間的內(nèi)容。如果該資源然后將請(qǐng)求調(diào)度給其他 Web 資源,那就不能向幕后委托的任何請(qǐng)求應(yīng)用過濾器。2.4 規(guī)范消除了這個(gè)限制。Servlet 過濾器現(xiàn)在可以應(yīng)用于 J2EE Web 環(huán)境中存在請(qǐng)求和響應(yīng)對(duì)象的任何地方。因此,Servlet 過濾器可以應(yīng)用在客戶機(jī)和 servlet 之間、servlet 和 servlet 或 JSP 頁(yè)面之間,以及所包括的每個(gè) JSP 頁(yè)面之間。這才是我所稱的強(qiáng)大能力和靈活性!

3.編寫Servlet過濾器實(shí)現(xiàn)類的程序

過濾器 API 包含 3 個(gè)簡(jiǎn)單的接口,它們整潔地嵌套在 javax.servlet 包中。那 3 個(gè)接口分別是 Filter 、 FilterChain 和 FilterConfig 。從編程的角度看,過濾器類將實(shí)現(xiàn) Filter 接口,然后使用這個(gè)過濾器類中的 FilterChain 和 FilterConfig 接口。該過濾器類的一個(gè)引用將傳遞給 FilterChain 對(duì)象,以允許過濾器把控制權(quán)傳遞給鏈中的下一個(gè)資源。 FilterConfig 對(duì)象將由容器提供給過濾器,以允許訪問該過濾器的初始化數(shù)據(jù)。

為了與我們的三步模式保持一致,過濾器必須運(yùn)用三個(gè)方法,以便完全實(shí)現(xiàn) Filter 接口:

init() :這個(gè)方法在容器實(shí)例化過濾器時(shí)被調(diào)用,它主要設(shè)計(jì)用于使過濾器為處理做準(zhǔn)備。該方法接受一個(gè) FilterConfig 類型的對(duì)象作為輸入。

doFilter() :與 servlet 擁有一個(gè) service() 方法(這個(gè)方法又調(diào)用 doPost() 或者 doGet() )來處理請(qǐng)求一樣,過濾器擁有單個(gè)用于處理請(qǐng)求和響應(yīng)的方法?D?D doFilter() 。這個(gè)方法接受三個(gè)輸入?yún)?shù):一個(gè) ServletRequest 、 response 和一個(gè) FilterChain 對(duì)象。

destroy() :正如您想像的那樣,這個(gè)方法執(zhí)行任何清理操作,這些操作可能需要在自動(dòng)垃圾收集之前進(jìn)行。

SessionFilter.java  package net.pms.web.filter;   import java.io.IOException;   import javax.servlet.Filter;  import javax.servlet.FilterChain;  import javax.servlet.FilterConfig;  import javax.servlet.ServletException;  import javax.servlet.ServletRequest;  import javax.servlet.ServletResponse;  import javax.servlet.http.HttpServletRequest;  import javax.servlet.http.HttpServletResponse;  import javax.servlet.http.HttpServletResponseWrapper;   /**  * @author jfish  * @since 2006.1.12  */  public class SessionFilter implements Filter {        public static boolean isContains(String container, String[] regx) {             boolean result = false;              for (int i = 0; i ﹤ regx.length; i++) {                   if (container.indexOf(regx[i]) != -1) {                         return true;                   }             }             return result;       }        public FilterConfig config;        public void setFilterConfig(FilterConfig config) {             this.config = config;       }        public FilterConfig getFilterConfig() {             return config;       }        public void doFilter(ServletRequest request, ServletResponse response,                   FilterChain chain) throws IOException, ServletException {              HttpServletRequest httpreq = (HttpServletRequest) request;             HttpServletResponse httpres = (HttpServletResponse) response;              HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper(                         (HttpServletResponse) response);             String logonStrings = config.getInitParameter("logonStrings");             String includeStrings = config.getInitParameter("includeStrings");             String redirectPath = httpreq.getContextPath()                         + config.getInitParameter("redirectPath");             String disabletestfilter = config.getInitParameter("disabletestfilter");              if (disabletestfilter.toUpperCase().equals("Y")) {                   chain.doFilter(request, response);                   return;             }             String[] logonList = logonStrings.split(";");             String[] includeList = includeStrings.split(";");             Object user = httpreq.getSession().getAttribute("userinfo");             if (user == null) {                   if (!this.isContains(httpreq.getRequestURI(), includeList)) {                         chain.doFilter(request, response);                         return;                   }                   if (this.isContains(httpreq.getRequestURI(), logonList)) {                         chain.doFilter(request, response);                         return;                   }                   wrapper.sendRedirect(redirectPath);              } else {                   chain.doFilter(request, response);             }       }        public void destroy() {             this.config = null;       }        public void init(FilterConfig filterConfig) throws ServletException {             this.config = filterConfig;       }  }

4.配置Servlet 過濾器

在web.xml中:

  ﹤filter﹥       ﹤filter-name﹥SessionFilter﹤/filter-name﹥       ﹤filter-class﹥net.pms.web.filter.SessionFilter﹤/filter-class﹥       ﹤init-param﹥             ﹤param-name﹥logonStrings﹤/param-name﹥             ﹤param-value﹥login.jsp﹤/param-value﹥       ﹤/init-param﹥       ﹤init-param﹥             ﹤param-name﹥includeStrings﹤/param-name﹥             ﹤param-value﹥.jsp;.html﹤/param-value﹥       ﹤/init-param﹥       ﹤init-param﹥             ﹤param-name﹥r(jià)edirectPath﹤/param-name﹥             ﹤param-value﹥/login.jsp﹤/param-value﹥       ﹤/init-param﹥       ﹤init-param﹥             ﹤param-name﹥disabletestfilter﹤/param-name﹥             ﹤param-value﹥N﹤/param-value﹥       ﹤/init-param﹥  /filter﹥  ﹤filter-mapping﹥       ﹤filter-name﹥SessionFilter﹤/filter-name﹥       ﹤url-pattern﹥/*﹤/url-pattern﹥  /filter-mapping﹥

其中參數(shù)logonStrings,登陸頁(yè)面

includeStrings,過濾頁(yè)面參數(shù)

redirectPath,沒有登陸轉(zhuǎn)向頁(yè)面

disabletestfilter,Servlet過濾器是否有效。

看完上述內(nèi)容,你們掌握如何進(jìn)行Servlet過濾器的概念及結(jié)構(gòu)淺析的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

網(wǎng)站標(biāo)題:如何進(jìn)行Servlet過濾器的概念及結(jié)構(gòu)淺析
標(biāo)題路徑:http://aaarwkj.com/article26/godgcg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營(yíng)銷推廣、營(yíng)銷型網(wǎng)站建設(shè)、App設(shè)計(jì)、電子商務(wù)、云服務(wù)器網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
国产精品久久久久久久亚洲| 精品嫩模福利一区二区蜜臀| 精品人妻少妇av一区二区| 欧美日韩亚洲精品一区二区三区| 中文字幕乱码熟女人妻视频| 国产成av人片乱码色午夜| 午夜性生活视频免费看| av久久精品在线观看| 亚洲国产综合六月深深爱| 免费在线观看福利av| 日韩无遮挡免费在线观看| 欧美成人午夜福利在线视频| 亚洲欧美日韩颜射极品| 日本人免费一区二区电影| 最近av中文字幕电影| 精品女同一区二区三区网站 | 亚洲精品入口一区二区| 久久精品二区亚洲w码| 激情男女一区二区三区| 99亚洲伊人久久精品影院| 亚洲中国av一区二区| 亚洲熟妇av乱码在线观看| 99久久成人精品国产片| 国产日韩欧美一区综合| 韩国av一区二区三区| 欧美亚洲国产另类第一页| 久久国产精品亚洲看片| 国产欧美日本综合一区| 国自产偷精品不卡在线观看| 中文字幕变态另类一区二区| 日进去了啊内射视频| 秋霞日韩欧美一区二区三区| 欧美一区二区三区中文字幕| 精品亚洲美无人区乱码| 久久精品国产91麻豆| 日本久久91跳蛋视频| 亚洲欧洲一区二区免费| 色中文字幕人妻诱惑制服| 日本大型午夜福利视频| 欧美一级特黄大片做受农村 | 国产传媒视频在线观看|