国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網(wǎng)站 > WEB開發(fā) > 正文

學(xué)習(xí)筆記——JavaWeb過濾器

2024-04-27 15:17:14
字體:
供稿:網(wǎng)友

學(xué)習(xí)筆記——javaWeb過濾器

1.什么是過濾器

過濾器是一個(gè)服務(wù)器端組件,它可以截取用戶端的請求與相應(yīng)信息,并對這些信息過濾。

簡單說,就是可以實(shí)現(xiàn)web容器對某資源的訪問前截獲進(jìn)行相關(guān)的處理,還可以在某資源向web容器返回響應(yīng)前進(jìn)行截獲進(jìn)行處理。

2.過濾器的工作原理和生命周期

2.1工作原理

根據(jù)過濾器在Web.xml中的設(shè)置,特定的網(wǎng)址會(huì)經(jīng)過特定的過濾器。隨后通過過濾器的處理,再將處理過的用戶請求發(fā)送至web資源,資源響應(yīng)之后再發(fā)送到過濾器,過濾器再處理之后,才發(fā)送給用戶。

2.2 生命周期

過濾器在Tomcat服務(wù)器啟動(dòng)時(shí)加載,通過Web.xml中的設(shè)置實(shí)例化,之后通過Filter.init()方法初始化。在觸發(fā)過濾要求時(shí),調(diào)用Filter.doFilter()執(zhí)行過濾處理。最后在Tomcat服務(wù)器關(guān)閉時(shí),調(diào)用Filter.destroy()銷毀過濾器。

2.3 過濾器鏈

當(dāng)一個(gè)請求符合多個(gè)過濾器的要求是,就會(huì)形成過濾器鏈。服務(wù)器會(huì)按在web.xml中過濾器定義的順序將過濾器組裝成一條鏈,用戶請求通過這條鏈訪問web資源。
具體處理過程:
多個(gè)過濾器的情況下,會(huì)先執(zhí)行第一個(gè)過濾器chain.doFilter()前的代碼,然后doFilter()到達(dá)第二個(gè)過濾器。第二個(gè)過濾器也會(huì)先執(zhí)行chain.doFilter()前的代碼,然后doFilter()到達(dá)Servlet.service()方法。之后在返回過濾器2doFilter()之后的代碼,在返回過濾器1doFilter()之后的代碼,最后才返回用戶。

3.如何編寫一個(gè)簡單過濾器

3.1過濾器的三個(gè)主要方法

編寫過濾器之前,先熟悉一下過濾器的三個(gè)主要方法:

3.2 繼承 javax.servlet.Filter

開始編寫第一步:繼承
public class MyFirstFilter implements javax.servlet.Filter

3.3 重寫doFilter

第二步:重寫
public void doFilter(javax.servlet.ServletRequest req, javax.servlet.ServletResponse resp, javax.servlet.FilterChain chain) throws javax.servlet.ServletException, IOException {        //你的代碼        chain.doFilter(req, resp);    }

3.4 注冊Filter

第三步:注冊

4.過濾器的分類

過濾器根據(jù)其處理的請求類別,分為5類。Servlet2.5中定義了request,F(xiàn)orward,Include,Error四類,而Servlet3.0中定義了第5類:Async。下圖中的RequestDispatcher的forward方法等于<jsp:forward>方法,同理,include等于<jsp:include>方法。第5類,Async用于通過過濾器訪問的Servlet有大量耗時(shí)操作時(shí),可直接回到過濾器chain.doFilter()之后的代碼運(yùn)行,讓Servlet異步運(yùn)行計(jì)算操作。

5.過濾器的應(yīng)用

1.登錄驗(yàn)證1.1將過濾器的url地址設(shè)為“/*”
  <filter-mapping>    <filter-name>MyFirstFilter</filter-name>    <url-pattern>/*</url-pattern>    <dispatcher>REQUEST</dispatcher>  </filter-mapping>1.2查看session中是否有登錄名
public void doFilter(javax.servlet.ServletRequest req, javax.servlet.ServletResponse resp, javax.servlet.FilterChain chain) throws javax.servlet.ServletException, IOException {        HttpServletRequest request = (HttpServletRequest) req;        HttpServletResponse response = (HttpServletResponse) resp;               HttpSession session = request.getSession();        String username = (String) session.getAttribute("username");        if ("".equals(username) || username == null) {            response.sendRedirect("login.jsp");        }        chain.doFilter(req, resp);    }2.編碼 轉(zhuǎn)換在過濾其中添加以下語句:
   request.setCharacterEncoding("UTF-8");

6.過濾器的其他問題

1.過濾器能否改變用戶請求的資源,即改變用戶請求的路徑?答:可以的。過濾器可通過,request.sendRedirect()方法或response.getDispatcher().forWord()方法改變用戶請求的路徑。2.過濾器能否直接誒返回?cái)?shù)據(jù)?答:不能。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 渭南市| 东安县| 连云港市| 老河口市| 阿尔山市| 平塘县| 东港市| 平乡县| 洞口县| 吕梁市| 广水市| 麻江县| 朝阳区| 木兰县| 巴彦淖尔市| 太仆寺旗| 平定县| 东宁县| 虹口区| 邯郸市| 乌苏市| 甘谷县| 德阳市| 高州市| 石泉县| 福州市| 伊通| 岳西县| 砚山县| 广宗县| 怀仁县| 淄博市| 岑巩县| 远安县| 内江市| 潜山县| 沅江市| 黄大仙区| 平远县| 乐昌市| 年辖:市辖区|