<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] # 過濾器 ## 為什么要使用過濾器 把請求中需要全局處理的邏輯放在過濾器中執行,控制層專心做與自己本身相關的事情(獲取參數、處理業務邏輯、傳遞數據、頁面跳轉)。 在實際的開發中,我們一般將諸如頁面編碼設置、登陸用戶 Session 判斷等放在過濾器中執行。 ![](https://box.kancloud.cn/e69696f764f5e3b0ea0427da0531f3d5_651x273.png) ## 如何使用過濾器 過濾器是一個實現了 javax.servlet.Filter 的類,在 Web 服務器啟動的時候會被初始化。 - 定義過濾器類 ~~~ package cn.filters; 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; /** * Servlet Filter implementation class EncodingFilter */ public class EncodingFilter implements Filter { private String encoding = "UTF-8"; /** * Default constructor. */ public EncodingFilter() { // TODO Auto-generated constructor stub } /** * @see Filter#destroy() */ public void destroy() { // TODO Auto-generated method stub } /** * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // TODO Auto-generated method stub // place your code here HttpServletRequest req = (HttpServletRequest) request; req.setCharacterEncoding(encoding); // pass the request along the filter chain chain.doFilter(request, response); } /** * @see Filter#init(FilterConfig) */ public void init(FilterConfig fConfig) throws ServletException { String en = fConfig.getInitParameter("Encoding"); if (null != en && !en.equals("")) { encoding = en; } } } ~~~ - 認識 web.xml web.xml 放置在 WEB-INF 目錄下,是 Servlet 容器中一個非常重要的配置文件。 在 web.xml 中主要定義的幾個元素包括:Filter、Servlet(Servlet現在一般使用注解的方式,將請求的地址定義在類注解中),其中,Filter 建議定義在 web.xml 做更加精細的控制。 welcome-file-list 節點是默認歡迎頁面的定義 **在 web.xml 中注冊過濾器** web.xml 實例代碼 ~~~ <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>demo3</display-name> <welcome-file-list> <welcome-file>Login2Servlet</welcome-file> <welcome-file>LoginServlet</welcome-file> </welcome-file-list> <filter> <filter-name>EncodingFilter</filter-name> <filter-class>cn.filters.EncodingFilter</filter-class> <init-param> <param-name>Encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter> <filter-name>SessionFilter</filter-name> <filter-class>cn.filters.SessionFilter</filter-class> <init-param> <param-name>UnCheckUrls</param-name> <param-value>/LoginServlet#/LogoutServlet#/LoginCheckServlet</param-value> </init-param> </filter> <filter-mapping> <filter-name>EncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>SessionFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app> ~~~ > 其中 `filter-mapping` 決定了過濾器執行的順序 ## 定義復雜的過濾器 1. 映射過濾應用程序中所有資源 ~~~ <filter> <filter-name>loggerfilter</filter-name> <filter-class>myfilter.LoggerFilter</filter-class> </filter> <filter-mapping> <filter-name>loggerfilter</filter-name> <url-pattern>/*</url-pattern> //訪問當前主機,當前應用程序根下的所有文件包括多級子目錄下的所有文件,注意這里*前有“/” </filter-mapping> ~~~ 2. 過濾指定的類型文件資源 ~~~ <filter> <filter-name>loggerfilter</filter-name> <filter-class>myfilter.LoggerFilter</filter-class> </filter> <filter-mapping> <filter-name>loggerfilter</filter-name> <url-pattern>*.html</url-pattern> //訪問當前主機,當前應用程序根目錄下的所有html文件,注意:*.html前沒有“/”,否則錯誤 </filter-mapping> ~~~ > 其中*.html要過濾jsp那么就改*.html為*.jsp,但是注意沒有“/”斜杠。如果要同時過濾多種類型資源: **方法1 url-pattern 分開寫** ~~~ <filter> <filter-name>loggerfilter</filter-name> <filter-class>myfilter.LoggerFilter</filter-class> </filter> <filter-mapping> <filter-name>loggerfilter</filter-name> <url-pattern>*.html</url-pattern> </filter-mapping> <filter-mapping> <filter-name>loggerfilter</filter-name> <url-pattern>*.jsp</url-pattern>//訪問當前主機,當前應用程序根目錄以所有及子目錄下的所有jsp文件 </filter-mapping> ~~~ **方法2 將url-pattern合并** ~~~ <filter> <filter-name>loggerfilter</filter-name> <filter-class>myfilter.LoggerFilter</filter-class> </filter> <filter-mapping> <filter-name>loggerfilter</filter-name> <url-pattern>*.html;*.jsp</url-pattern> </filter-mapping>//*.html;*.jsp兩類型之間用分號;間隔 ~~~ 3. 過濾指定的目錄下的所有文件 ~~~ <filter> <filter-name>loggerfilter</filter-name> <filter-class>myfilter.LoggerFilter</filter-class> </filter> <filter-mapping> <filter-name>loggerfilter</filter-name> <url-pattern>/folder_name/*</url-pattern>//訪問當前主機,當前應用程序根目錄下的folder_name子目錄(可是多級子目錄)下所有文件 </filter-mapping> ~~~ 4. 過濾指定的servlet ~~~ <filter> <filter-name>loggerfilter</filter-name> <filter-class>myfilter.LoggerFilter</filter-class> </filter> <filter-mapping> <filter-name>loggerfilter</filter-name> <servlet-name>loggerservlet</servlet-name> </filter-mapping> <servlet> <servlet-name>loggerservlet</servlet-name> <servlet-class>myfilter.LoggerServlet</servlet-class> </servlet> ~~~ 5. 過濾指定文件(即單一文件) ~~~ <filter> <filter-name>loggerfilter</filter-name> <filter-class>myfilter.LoggerFilter</filter-class> </filter> <filter-mapping> <filter-name>loggerfilter</filter-name> <url-pattern>/simplefilter.html</url-pattern> </filter-mapping> ~~~ 6. 過濾指定目錄下的指定類型的所有文件 > 這種情況下在web.xml中無法一次性配置完成,需要結合filter的實現類 > 首先在web.xml中配置過濾指定目錄下的所有文件 ~~~ <filter> <filter-name>loggerfilter</filter-name> <filter-class>myfilter.LoggerFilter</filter-class> </filter> <filter-mapping> <filter-name>loggerfilter</filter-name> <url-pattern>/dir_name/*</url-pattern> </filter-mapping> ~~~ 然后在filter的實現類中的doFilter方法中獲取請求的uri或者url,判斷uri或者url中是否包含指定文件類型的字符串,決定是否過濾。 ~~~ //獲得用戶請求的uri String uri = request.getRequestURI(); if(uri.contains(".jsp")||uri.contains(".html")) System.out.println("開始過濾"+url); ~~~ 7. 過濾指定目錄下指定類型的單一文件 ~~~ <filter> <filter-name>loggerfilter</filter-name> <filter-class>myfilter.LoggerFilter</filter-class> </filter> <filter-mapping> <filter-name>loggerfilter</filter-name> <url-pattern>/dir_name/index.jsp</url-pattern> </filter-mapping> ~~~ > 以上都要注意是否有斜杠“/”
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看