Javaweb知识 day19 Filter&Listener

今日内容

    1. Filter:过滤器

    2. Listener:监听器

一、Filter:过滤器

1.1概念:

        * 生活中的过滤器:净水器,空气净化器,土匪、

        * web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。

        * 过滤器的作用:

            * 一般用于完成通用的操作。如:登录验证、统一编码处理、敏感字符过滤...

1.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() {


                }

            }

1.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. 如果是敏感词汇,替换为 ***

            * 分析:

                1. 对request对象进行增强。增强获取参数相关方法

                2. 放行。传递代理对象

            * 增强对象的功能:

                * 设计模式:一些通用的解决固定问题的方式

                1. 装饰模式

                2. 代理模式

                    * 概念:

                        1. 真实对象:被代理的对象

                        2. 代理对象:

                        3. 代理模式:代理对象代理真实对象,达到增强真实对象功能的目的

                     * 实现方式:

                         1. 静态代理:有一个类文件描述代理模式

                         2. 动态代理:在内存中形成代理类

                            * 实现步骤:

                                1. 代理对象和真实对象实现相同的接口

                                2. 代理对象 = Proxy.newProxyInstance();

                                3. 使用代理对象调用方法。

                                4. 增强方法

                            * 增强方式:

                                1. 增强参数列表

                                2. 增强返回值类型

                                3. 增强方法体执行逻辑    

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

                        * 指定初始化参数<context-param>

                2. 注解:

                    * @WebListener

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,193评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,306评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,130评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,110评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,118评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,085评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,007评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,844评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,283评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,508评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,395评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,985评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,630评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,797评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,653评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,553评论 2 352

推荐阅读更多精彩内容