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

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                [TOC] # Filter的API詳解 創建一個類implements Filter ## Filter生命周期及其與生命周期 Filter接口有三個方法,并且這個三個都是與Filter的生命相關的方法 * init(Filterconfig):代表filter對象初始化方法 filter對象創建時執行 * doFilter(ServletRequest,ServletResponse,FilterChain):代表filter執行過濾的核心方法,如果某資源在已經被配置到這個filter進行過濾的話,那么每次訪問這個資源都會執行doFilter方法 * destory():代表是filter銷毀方法 當filter對象銷毀時執行該方法 Filter對象的生命周期: * Filter何時創建:服務器啟動時就創建該filter對象 * Filter何時銷毀:服務器關閉時filter銷毀 ## Filter的API詳解 ### init(FilterConfig) 其中參數config代表 該Filter對象的配置信息的對象,內部封裝是該filter的配置信息 ~~~ @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("FirstFilter中的init---"); String filterName = filterConfig.getFilterName(); System.out.println(filterName); ServletContext servletContext = filterConfig.getServletContext(); String initParameter = filterConfig.getInitParameter("charset"); System.out.println(initParameter); } ~~~ #### 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上下文對象的引用 ### destory()方法 filter對象銷毀時執行 ### doFilter方法 `doFilter(ServletRequest,ServletResponse,FilterChain)` 其中的參數: ServletRequest/ServletResponse:每次在執行doFilter方法時 web容器負責創建一個request和一個response對象作為doFilter的參數傳遞進來。該request個該response就是在訪問目標資源的service方法時的request和response。 **FilterChain:過濾器鏈對象,通過該對象的doFilter方法可以放行該請求** ~~~ @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { //過濾請求方法 System.out.println("請求到達FirstFilter---"); //如果滿足條件就放行(不放行請求就被攔截了) filterChain.doFilter(servletRequest, servletResponse); System.out.println("請求回到FirstFilter---"); } ~~~ 里面的ServletRequest可以強轉為HttpServletRequest # Filter的配置 注解方式 ~~~ @WebFilter("/*") ~~~ 在web.xml中配置的過濾器的先后順序是依`<filter-mapping>`的順序而定,形成一個鏈條 ~~~ <filter> <filter-name>firstFilter</filter-name> <filter-class>com.jdxia.Filter.FirstFilter</filter-class> <init-param> <param-name>charset</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>firstFilter</filter-name> <!-- 這邊的url-pattern寫成servlet-name也可以 --> <!-- url可以寫成/* --> <url-pattern>/MyServlet</url-pattern> </filter-mapping> <filter> <filter-name>secondFilter</filter-name> <filter-class>com.jdxia.Filter.SecondFilter</filter-class> </filter> <filter-mapping> <filter-name>secondFilter</filter-name> <url-pattern>/MyServlet</url-pattern> <dispatcher>REQUEST</dispatcher> </filter-mapping> ~~~ url-pattern配置時 1. 完全匹配 /sertvle1 2. 目錄匹配 `/aaa/bbb/* `----最多的 `/user/*`:訪問前臺的資源進入此過濾器 `/admin/*`:訪問后臺的資源時執行此過濾器 3. 擴展名匹配` *.abc *.jsp` 注意:url-pattern可以使用servlet-name替代,也可以混用 `/*.jsp`是錯誤的 **注意:一個`<filter>`可以對應多個`<filter-mapping>`** # dispatcher:訪問的方式 ~~~ @WebFilter(value = "/*", dispatcherTypes = DispatcherType.REQUEST) public class FilterDemo1 implements Filter { ~~~ 可以設置多個`<dispatcher>`子元素用來指定 Filter 對資源的多種調用方式進行攔截 * REQUEST:默認值,代表直接訪問某個資源時執行filter * FORWARD:轉發時才執行filter,是通過 RequestDispatcher 的 forward() 方法訪問時 * INCLUDE: 包含資源時執行filter,通過 RequestDispatcher 的 include() 方法訪問時 * ERROR:發生錯誤時 進行跳轉才執行filter,通過聲明式異常處理機制調用時 # Filter的作用 1. 公共代碼的提取 2. 可以對request和response中的方法進行增強(裝飾者模式/動態代理) 3. 進行權限控制 # 生命周期 對象從創建到銷毀過程 filter對象只會創建一次,init方法也只會執行一次 * 構造器: 服務器啟動立即調用構造器創建Filter對象 * init(): Filter對象創建成功立即調用(完成初始化操作) * doFilter(): 每次請求過濾資源時都會調用 * destroy(): 關閉服務器時調用銷毀filter對象 # 過濾器鏈 1. 注解配置: 按照類名的字符串比較規則比較,值小的先執行 2. web.xml配置: `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>

                              哎呀哎呀视频在线观看