JavaWeb之Java過濾器

來源:互聯網
上載者:User

標籤:java   過濾器   


1.          有時我們需要在程式中每一個頁面做相同的操作,比如說登入驗證,請求參數的編碼問題等,這時我們就需要寫一個過濾器做這些重複的動作。過濾器就相當於你想去某個地方時,肯定會從我(過濾器)這經過,並且得檢查你身上有沒有不該有點的東西,並且由我來決定你是否可以過去(可以過去就是過濾器中的代碼,即chain.doFilter(request,response))。總之,像個門前的保安啊。


2.          過濾器應用分兩步:

a)      書寫過濾器

b)     在web.xml中配置過濾器

3.      書寫過濾器手寫必須實現javax.servlet.Filter介面,初始化和銷毀對象的方法可以是空的方法體,而doFilter方法就是過濾要執行的內容。

4.      一個HelloWord執行個體

publicclass HelloFilterimplements Filter{

    // 【啟動執行,在建立執行個體後】 執行一次

    @Override

    publicvoid init(FilterConfig filterConfig)throws ServletException {}

    // 每次訪問時候執行,執行n次

    @Override

    publicvoid doFilter(ServletRequest request, ServletResponseresponse,

            FilterChain chain) throws IOException, ServletException {  

        System.out.println("3.過濾器業務處理操作(通用操作處理開始)");

        // 允許存取 (去到servlet)即可以去執行被請求的資源了

        chain.doFilter(request, response);

        System.out.println("5.執行結束");

    }

    @Override

    publicvoid destroy() {}

}

5.      過濾器執行的流程

伺服器啟動:

   1.調用過濾器構造方法, 建立過濾器執行個體

   2.調用init方法, 執行初始化方法

使用者訪問:

   3. 執行過濾器過濾方法:doFilter(request,response,chain);

   4. 處理過濾器業務

   5. 處理完後,允許存取(chain.doFilter)

      接下來進入下一個過濾器,如果沒有下一個過濾器,就直接執行請求資源(servlet或jsp)

   6. servlet處理業務

   7.控制權又回到過濾器(最後是由過濾器響應回瀏覽器的)!

伺服器停止:

   執行所有過濾器的destroy方法。


6.      配置過濾器

   <!-- 第一個過濾器配置 -->

    <filter>

        <filter-name>hellofilter</filter-name>

        <filter-class>cn.itcast.a_hello.HelloFilter</filter-class>

    </filter>

    <!--攔截哪些請求 (現在指定了攔截所有的請求:html/jsp/servlet)-->

    <filter-mapping>

        <filter-name>hellofilter</filter-name>

        <url-pattern>/*</url-pattern>

    </filter-mapping>

7.      詳細講解過濾器配置過程

對於過濾器的配置,首先應該說明的是過濾器就是一個特殊的servlet,filter的配置比較簡單模仿即可。

Filter-maping的配置主要是如何配置過濾到指定的資源

url-pattern的配置

a)      url-pattern中“/”代表當前工程路徑

b)     “/*”說明要過濾當前web工程下的所有(目錄)資源(包括css,js,圖片等,可能會造成頁面顯示樣式出錯)。

c)      指定工程目錄,比如說只想過濾一些我想過濾的頁面,可以直接寫訪問頁面的路徑。例:/manage/home/main.jsp

d)     也可以過濾所有的jsp頁面。例:*.jsp

e)      當然當servlet-maping的url-pattern若都有.action或者.do(其他尾碼類似)也可以對servlet全部過濾。例:*.actioin或者*.do(這在過濾編碼時很常用)

說明:url-pattern並不只是單單指瀏覽器中的網域名稱地址(location)

而是指瀏覽器發出的所有請求的url。如(這是Firefox瀏覽器的firebug工具,可以嘗試):

Servlet-name配置

f)       若果要指定需要過濾的servlet,則可以在fiter-maping中配置servlet-name。此處的servlet-name應該跟servlet中的servlet-name的配置要一致

 <filter-mapping>

    <filter-name>UTF8EncodingFilter</filter-name>

    <!-- 被過濾的目錄或者servlet-->

    <url-pattern>/manage/*</url-pattern>

    <servlet-name>LoginServlet</servlet-name>

    <servlet-name>CourseServlet</servlet-name>

    <servlet-name>StudentServlet</servlet-name>

    <servlet-name>SeleCourseServlet</servlet-name>

    <servlet-name>StuScoreServlet</servlet-name>

  </filter-mapping>

圖中的url-pattern就是要過濾web工程目錄下的manage目錄下的所有檔案。

Dispatcher配置

g)      當程式執行到指定的請求方式時,會被過濾。

 <dispatcher>REQUEST</dispatcher> 

 (預設,寫了跟沒寫一樣效果)直接存取時候會被攔截

 

<dispatcher>FORWARD</dispatcher>   只會攔截轉寄的請求

即,執行req.getRequestDispatcher(“index.jsp).forward(req,resp)會被攔截

 

<dispatcher>INCLUDE</dispatcher>  

執行request.getRequestDispatcher("/index.jsp").include(request, response);

的時候,會被攔截

               

<dispatcher>ERROR</dispatcher>  

當遇到聲明式異常的時候執行過濾攔截,然後再跳轉到指定錯誤頁面          

            附:聲明式異常:

                <error-page>

                    <error-code>404</error-code>

                    <location>/xxjsp</location>

                </error-page>

                或者

                <error-page>

                    <exception-type>NullPo...</exception-type>

                    <location>/xx.jsp</location>

                </error-page>

 

JavaWeb之Java過濾器

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.