JavaWeb(过滤器+监听器)

本文详细介绍了Servlet过滤器的实现与应用,包括如何添加验证码功能、编写过滤器、利用容器初始化参数进行配置,以及过滤器在代码可插拔性和维护方面的优势。同时,深入探讨了监听器的概念,讲解了如何监听容器事件,如在线人数统计,并提供了具体的实现步骤。

1.为验证码添加8条干扰线
     for(int i = 0;i<8;i++){
            g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
            g.drawLine(r.nextInt(100), r.nextInt(30), r.nextInt(100), r.nextInt(30));
        }
        
2.为登入验证码添加验证码功能


过滤器:
什么叫过滤器:
过滤器是servlet2.3规范中定义的一种小型的,可插入的web组件,用来拦截servlet容器请求和响应过程,以便查看
,提取或以某种方式操作正在客户机和服务器之间交换的数据
.过滤器通常是封装一些功能的Web组件,这些功能很重要,但对于处理客户端请求或发送响应来说不是决定性的
.典型的应用包括记录请求和响应的数据,管理会话属性等.

如何编写一个过滤器:
1.编写一个java类,实现Filter接口
2.在doFilter方法中实现拦截处理逻辑
3.将过滤器添加到web容器中
4.把过滤器和web应用一起打包部署.

过滤器API中有3个常用的接口,位于javax.servlet包中
.Filter,FilterChain,FilterConfig
编程中,过滤器要实现Filter接口.


练习:
过滤器-------过滤敏感词汇
1.做一个页面评论区,如果评论区出现出现"LJ" 则显示  "评论已经关掉"
否则传递给下一个过滤器或者用于处理下一个处理的servlet

多个过滤器.
.如果有多个过滤器都满足过滤的条件,则容器依据filter-mapping的先后顺序来调用各个过滤器.

练习:过滤器-多个过滤器
在进行过滤器评论时,如果发布内容多余20个字,则不允许发布,并出现相应的提示
增加过滤器,用来检测评论的内容长度

容器初始化参数
.容器启动之后,会创建过滤器的实例
.接下来,容器会调用过滤器的init方法,而容器会实现创建FilterConfig对象,该对象可以访问web.xml文件配置的一些参数
这些在web.xml文件中存储,有FilterConfig对象读取,在执行init方法时能够访问的参数值,叫做初始化参数.
通过这些初始化参数可以方便快捷的配置及修改一些辅助参数.

练习:
使用过滤器初始化参数在web.xml文件中设置敏感词汇及限制的评论长度,需要修改是只需要修改web.xml即可.

过滤器的优点:
实现代码的"可插拔性",即可增加或减少某个功能模块,不会影响程序的正常运行
可以将多个相同处理逻辑的模块集中写在过滤器里面,方便代码的维护.

<!-- 将过滤器添加到web应用中 -->
    <filter>
        <filter-name>CommentFilterMore</filter-name>
        <filter-class>com.sicheng.filter.CommentFilterMore</filter-class>
        <init-param>
            <param-name>sensitiveLength</param-name>
            <param-value>30</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CommentFilterMore</filter-name>
        <url-pattern>/test</url-pattern>
    </filter-mapping>

监听器
----统计在线人数
什么是监听器:
.servlet规范中定义的一种特殊的组件,用来监听servlet容器(控制器)产生的事件并进行相应的处理.

servlet容器产生的两大事件
.生命周期相关事件
.绑定数据相关事件

生命周期相关事件
.容器创建或者销毁request,session,servletContext时产生的事件.

如何监听:
实现对应的接口
.ServletContextListener
-contextDestoryed(ServletContextEvent sce);
-contextInitializd(ServletContextEvent sce);

.HttpSessionListener
-sessionCreate(HttpSessionEven se);
-sessionDestoryed(HttpSessionEven se);

.ServletRequestListener
-requestDestoryed(ServletRequestEvent sre);
-requestInitialized(ServletRequestEvent sre);

绑定数据相关的事件
.调用了request,session,servletContext的setAttribute,removeAttribute方法时产生的事件.
.ServletRequestAttributeListener();
-attributeAdded(ServletRequestAttributeEvent srae);
-attributeRemoveed(ServletRequestAttributeEvent srae);

.HttpSessionAttributeListener();
参考手册
ServletRequestAttributeListener();
参考手册

如何编写监听器:
1.编写一个java类,依据监听的事件类型选择实现相应的监听器接口,如,要监听session对象的创建和销毁,
要实现HttpSessionListener
2.在监听器接口方法中,实现相应的监听处理逻辑
3.在web.xml文件中注册该监听器

在web.xml注册监听器
<listener>
        <listener-class>全路径</listener-class>
</listener>

<!-- 监听器 -->
    <listener>
           <listener-class>com.sicheng.filter.SessionListener</listener-class>
    </listener>

ps:多个相同事件的监听的执行顺序,按web.xml中注册出现的顺序来决定.

练习:实现在线人数的统计.
方案:通过监听session的创建动作,

思考:
关闭浏览器之久session被销毁了吗?能够触发sessionDestroyed方法吗?
小结:禁用缓存和关闭浏览器,并不会触发服务器端删除session.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值