+Filter加Listener

Filter:過濾器

        1. 概念:
                * 生活中的過濾器:淨水器,空氣淨化器,土匪、
                * web中的過濾器:當訪問服務器的資源時,過濾器能夠將請求攔截下來,完成一些特殊的功能。
                * 過濾器的做用:
                        * 通常用於完成通用的操做。如:登陸驗證、統一編碼處理、敏感字符過濾...web

        2. 快速入門:
                1. 步驟:
                        1. 定義一個類,實現接口Filter
                        2. 複寫方法
                        3. 配置攔截路徑
                                1. web.xml
                                2. 註解
                2. 代碼:
                        @WebFilter("/*")//訪問全部資源以前,都會執行該過濾器
                        public class FilterDemo1 implements Filter {
                            @Override
                            public void init(FilterConfig filterConfig) throws ServletException {
                       
                            }
                       
                            @Override
                            public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
                                System.out.println("filterDemo1被執行了....");
                       
                       
                                //放行
                                filterChain.doFilter(servletRequest,servletResponse);
                       
                            }
                       
                            @Override
                            public void destroy() {
                       
                            }
                        }設計模式

        3. 過濾器細節:
                1. web.xml配置       
                        <filter>
                        <filter-name>demo1</filter-name>
                        <filter-class>cn.itcast.web.filter.FilterDemo1</filter-class>
                    </filter>
                    <filter-mapping>
                        <filter-name>demo1</filter-name>
                                <!-- 攔截路徑 -->
                        <url-pattern>/*</url-pattern>
                    </filter-mapping>
                2. 過濾器執行流程
                        1. 執行過濾器
                        2. 執行放行後的資源
                        3. 回來執行過濾器放行代碼下邊的代碼
                3. 過濾器生命週期方法
                        1. init:在服務器啓動後,會建立Filter對象,而後調用init方法。只執行一次。用於加載資源
                        2. doFilter:每一次請求被攔截資源時,會執行。執行屢次
                        3. destroy:在服務器關閉後,Filter對象被銷燬。若是服務器是正常關閉,則會執行destroy方法。只執行一次。用於釋放資源
                4. 過濾器配置詳解
                        * 攔截路徑配置:
                                1. 具體資源路徑: /index.jsp   只有訪問index.jsp資源時,過濾器纔會被執行
                                2. 攔截目錄: /user/*        訪問/user下的全部資源時,過濾器都會被執行
                                3. 後綴名攔截: *.jsp                訪問全部後綴名爲jsp資源時,過濾器都會被執行
                                4. 攔截全部資源:/*                訪問全部資源時,過濾器都會被執行
                        * 攔截方式配置:資源被訪問的方式
                                * 註解配置:
                                        * 設置dispatcherTypes屬性
                                                1. REQUEST:默認值。瀏覽器直接請求資源
                                                2. FORWARD:轉發訪問資源
                                                3. INCLUDE:包含訪問資源
                                                4. ERROR:錯誤跳轉資源
                                                5. ASYNC:異步訪問資源
                                * web.xml配置
                                        * 設置<dispatcher></dispatcher>標籤便可
                               
                5. 過濾器鏈(配置多個過濾器)
                        * 執行順序:若是有兩個過濾器:過濾器1和過濾器2
                                1. 過濾器1
                                2. 過濾器2
                                3. 資源執行
                                4. 過濾器2
                                5. 過濾器1瀏覽器

                        * 過濾器前後順序問題:
                                1. 註解配置:按照類名的字符串比較規則比較,值小的先執行
                                        * 如: AFilter 和 BFilter,AFilter就先執行了。
                                2. web.xml配置: <filter-mapping>誰定義在上邊,誰先執行
        4. 案例:
                1. 案例1_登陸驗證
                        * 需求:
                                1. 訪問day17_case案例的資源。驗證其是否登陸
                                2. 若是登陸了,則直接放行。
                                3. 若是沒有登陸,則跳轉到登陸頁面,提示"您還沒有登陸,請先登陸"。
               
       服務器

                2. 案例2_敏感詞彙過濾
                        * 需求:
                                1. 對day17_case案例錄入的數據進行敏感詞彙過濾
                                2. 敏感詞彙參考《敏感詞彙.txt》
                                3. 若是是敏感詞彙,替換爲 *app

                        * 分析:
                                1. 對request對象進行加強。加強獲取參數相關方法
                                2. 放行。傳遞代理對象異步

                        * 加強對象的功能:
                                * 設計模式:一些通用的解決固定問題的方式
                                1. 裝飾模式
                                2. 代理模式
                                        * 概念:
                                                1. 真實對象:被代理的對象
                                                2. 代理對象:
                                                3. 代理模式:代理對象代理真實對象,達到加強真實對象功能的目的
                                         * 實現方式:
                                                 1. 靜態代理:有一個類文件描述代理模式
                                                 2. 動態代理:在內存中造成代理類
                                                        * 實現步驟:
                                                                1. 代理對象和真實對象實現相同的接口
                                                                2. 代理對象 = Proxy.newProxyInstance();
                                                                3. 使用代理對象調用方法。
                                                                4. 加強方法jsp

                                                        * 加強方式:
                                                                1. 加強參數列表
                                                                2. 加強返回值類型
                                                                3. 加強方法體執行邏輯       ide

Listener:監聽器

        * 概念:web的三大組件之一。
                * 事件監聽機制
                        * 事件        :一件事情
                        * 事件源 :事件發生的地方
                        * 監聽器 :一個對象
                        * 註冊監聽:將事件、事件源、監聽器綁定在一塊兒。 當事件源上發生某個事件後,執行監聽器代碼編碼

        * ServletContextListener:監聽ServletContext對象的建立和銷燬
                * 方法:
                        * void contextDestroyed(ServletContextEvent sce) :ServletContext對象被銷燬以前會調用該方法
                        * void contextInitialized(ServletContextEvent sce) :ServletContext對象建立後會調用該方法
                * 步驟:
                        1. 定義一個類,實現ServletContextListener接口
                        2. 複寫方法
                        3. 配置
                                1. web.xml
                                                <listener>
                                              <listener-class>cn.itcast.web.listener.ContextLoaderListener</listener-class>
                                                   </listener>url

                                                * 指定初始化參數<context-param>                                2. 註解:                                        * @WebListener

相關文章
相關標籤/搜索