<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>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## Filter 過濾器 過濾作用,對從客戶端向服務器端發送的請求進行過濾,也可以對服務器端返回的響應進行處理。它使用戶可以改變一個request和修改一個 response.。Filter 不是一個servlet,它不能產生一個response,但是它能夠在一個request到達servlet之前預處理request,也可以在 response離開servlet時處理response。換句話說,filter其實是客戶端與servlet中間的一個傳遞者,并且它可以對要傳遞 的東西進行修改。 **注意:**過濾器是用來攔截請求和響應的,不能產生響應,而servlet是用來處理請求并產生響應的。 ## Filter 原理 - 當客戶端發生請求后,在HttpServletRequest 到達Servlet 之前,過濾器攔截客戶的HttpServletRequest。 - 根據需要檢查HttpServletRequest ,也可以修改HttpServletRequest 頭和數據。 - 在過濾器中調用doFilter方法,對請求放行。請求到達Servlet后,對請求進行處理并產生HttpServletResponse發送給客戶端。 - 在HttpServletResponse 到達客戶端之前,過濾器攔截HttpServletResponse 。 - 根據需要檢查HttpServletResponse ,可以修改HttpServletResponse 頭和數據。 - 最后,HttpServletResponse到達客戶端。 ## Filter 的生命周期 **Filter接口中有三個重要的方法** - **init()方法:**初始化參數,在創建Filter時自動調用。當我們需要設置初始化參數的時候,可以寫到該方法中。 - **doFilter()方法:**攔截到要執行的請求時,doFilter就會執行。這里面寫我們對請求和響應的預處理。 - **destroy()方法:**在銷毀Filter時自動調用。 **Filter的生命周期**    Filter的創建和銷毀由web服務器控制。 - 服務器啟動的時候,web服務器創建Filter的實例對象,并調用其init方法,完成對象的初始化功能。filter對象只會創建一次,init方法也只會執行一次。 - 攔截到請求時,執行doFilter方法。可以執行多次。 - 服務器關閉時,web服務器銷毀Filter的實例對象。 ## Filter FilterConfig   用戶在配置filter時,可以使用<init-param>為filter配置一些初始化參數,當web容器實例化Filter對象,調用其 init方法時,會把封裝了filter初始化參數的filterConfig對象傳遞進來。因此開發人員在編寫filter時,通過 filterConfig對象的方法,就可獲得: - **String getFilterName():**得到filter的名稱。 - **String getInitParameter(String name):** 返回在部署描述中指定名稱的初始化參數的值。如果不存在返回null。 - **Enumeration getInitParameterNames():**返回過濾器的所有初始化參數的名字的枚舉集合。 - **public ServletContext getServletContext():**返回Servlet上下文對象的引用。 ## Filter 實現 **java 代碼** ```java 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; public class FilterDemo1 implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { // TODO Auto-generated method stub System.out.println("FilterDemo1的init方法被調用"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // TODO Auto-generated method stub System.out.println("我是FilterDemo1,客戶端向Servlet發送的請求被我攔截到了"); chain.doFilter(request, response); System.out.println("我是FilterDemo1,Servlet向客戶端發送的響應被我攔截到了"); } @Override public void destroy() { System.out.println("FilterDemo1的destroy方法被調用"); } } ``` **web.xml** ```xml <filter> <filter-name>filterDemo1</filter-name> <filter-class>com.filter.FilterDemo1</filter-class> </filter> <filter-mapping> <filter-name>filterDemo1</filter-name> <url-pattern>/*</url-pattern> <!-- /*是對所有的文件進行攔截 --> </filter-mapping> ``` ## Filter 過濾鏈 **編寫FilterDemo1類** ```java package com.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; public class FilterDemo1 implements Filter{ @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("我是FilterDemo1,客戶端向Servlet發送的請求被我攔截到了"); //對請求放行,進入下一個過濾器FilterDemo2 chain.doFilter(request, response); System.out.println("我是FilterDemo1,Servlet向客戶端發送的響應被我攔截到了"); } @Override public void destroy() { } } ``` **編寫FilterDemo2類** ```java package com.oracle.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; public class FilterDemo2 implements Filter{ @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("我是FilterDemo2,客戶端向Servlet發送的請求被我攔截到了"); //對請求放行,進入Servlet chain.doFilter(request, response); System.out.println("我是FilterDemo2,Servlet向客戶端發送的響應被我攔截到了"); } @Override public void destroy() { } } ``` **web.xml** ```xml <filter> <filter-name>filterDemo1</filter-name> <filter-class>com.filter.FilterDemo1</filter-class> </filter> <filter> <filter-name>filterDemo2</filter-name> <filter-class>com.filter.FilterDemo2</filter-class> </filter> <filter-mapping> <filter-name>filterDemo1</filter-name> <url-pattern>/*</url-pattern> <!-- /*是對所有的文件進行攔截 --> </filter-mapping> <filter-mapping> <filter-name>filterDemo2</filter-name> <url-pattern>/*</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>

                              哎呀哎呀视频在线观看