Java过滤器和监听器技术
2021/7/1 17:21:32
本文主要是介绍Java过滤器和监听器技术,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
过滤器和监听器
- 过滤器
- 过滤器接口
- 如何设计过滤器
- 创建一个过滤器
- 过滤器中文乱码解决
- 案例——基于过滤器的用户权限控制
- 案例——禁止未授权的IP访问站点
- 监听器
- 监听器接口
- 监听ServletContext对象
- 监听HttpSession对象
- 监听ServletRequest对象
- 如何设计监听器
- 案例——统计在线用户的人数
过滤器(Filter)和监听器(Listener)是两种特殊的Servlet技术。
过滤器可以对用户的请求信息和响应信息过滤,常被用于权限检查和参数编码统一设置。
监听器用来对Web应用进行监听,增强Web应用的事件处理能力
过滤器
过滤器是在服务器上运行的,位于请求和响应中间起过滤的作用。一个过滤器可以和多个JSP或Servlet绑定。检查信息后过滤器可以选择下一个动作:
- 正常调用请求的资源(Servler或JSP)
- 用修改后的请求信息调用请求资源
- 调用请求的资源,修改响应,再将响应发给客户端
- 禁止调用该资源,将请求重定向其他资源
过滤器接口
过滤器用到javax.servlet包中的一组接口或类,与过滤器设计有关的三个重要接口如下:
功能 | 类或接口 |
---|---|
Filter实现 | javax.servlet.Filter |
Filter配置 | javax.servlet.FilterConfig |
Filter链 | javax.servlet.FilterChain |
接口Filter的主要方法如下:
- init(FilterConfig config):用于初始化过滤器,并获取web.xml配置文件中过滤器初始参数。当服务器启动时会加载过滤器。
- config:
FilterConfig对象的getInitParameter(String name)方法可以获取配置文件中的参数。
- doFilter(ServletRequest request,ServletResponse response,FilterChain chain):当请求地址和过滤地址匹配时,将在此执行过滤操作。
- request:
给过滤器提供了对请求信息的访问 - response:
用于响应请求 - chain:
使用该对象调用Servlet、JSP页面或者下一个过滤器。
- destory():当服务器关闭时在此执行操作。
如何设计过滤器
- 实现javax.servlet.Filter接口
- 重写doFilter()方法
创建一个过滤器
- 在项目src下,新建一个类,并且添加javax.servlet.Filter接口
- 重写init()方法,读取过滤器的初始化函数
- 重写doFilter()方法,过滤行为在此完成
- 调用doFilter()方法中的FilterChain对象,关联下一个过滤器。
- 在web.xml配置文件中将过滤器与Servlet或JSP页面绑定
< url-pattern>设定过滤器的过滤地址,可带通配符/ *
过滤器中文乱码解决
public void doFilter(ServletReqeuest request ,ServletResponse response ,FilterChain filterchain) throws IOException,ServletException{ request.setCharacterEncoding("UTF-8"); }
案例——基于过滤器的用户权限控制
登陆页面:index.jsp
将用户名及其密码存放session:index2.jsp
过滤器LoginFilter.java
配置web.xml,给主页admin.jsp添加过滤器,没有登陆的用户不可访问。给Servlet添加过滤器, < url-pattern>< /url-apptern>改为< servlet-name>< /servlet-name>
案例——禁止未授权的IP访问站点
关键点:
- 获取访问网站的IP地址
String remoteIP = request.getRemoteAddr(); - web.xml配置文件
如下 - localhost,解析的是0.0.0.0.0.0.0.1
创建Filter过滤IP类:FilterIP.java
web.xml配置文件:
当前访问的IP地址是过滤的地址Error.jsp:
监听器
可以通过监听器监听Web应用的上下文信息、Servlet请求信息、Servlet会话信息。**当服务器启动时,监听器自动加载(执行构造函数),特定事件发生时,容器会自动调用相应监听器中对应的时间处理方法。
监听器接口
监听器用到javax.servlet包中的一组监听接口和事件类。监听器划分为以下三种:
- ServletContext事件监听器:用于监听应用程序环境对象。
- HttpSession事件监听器:用于监听用户会话对象。
- ServletRequest事件监听器:用于监听请求对象。
监听对象 | 监听接口 | 监听事件 |
---|---|---|
ServletRequest | ServletRequestListener | ServletRequestEvent |
ServletRequestAttributeListener | ServletRequestAttributeEnvent | |
HttpSession | HttpSessionListener | HttpSessionEvent |
HttpSessionActivationListener | ||
HttpSessionAttributeListener | HttpSessionBindingEvent | |
HttpSessionBindingListener | ||
ServletContext | ServletContextListener | ServletContextEvent |
ServletContextAttributeListener | ServletContextAttributeEvent |
监听ServletContext对象
对ServletContext对象实现监听,可以监听ServletContext对象中属性的变化(增加、删除、修改),也可以监听ServletContext对象本身的变化(创建与销毁)。常用的监听方法如下:
接口名称 | 接口方法 | 触发条件 |
---|---|---|
ServletContextAttribute | attributeAdded(ServletContextAttributeEvent scab) | 增加属性 |
attributeRemoved(ServletContextAttributeEvent scab) | 删除属性 | |
attributeReplaced(ServletContextAttributeEvent scab) | 修改属性 | |
ServletContextListener | contextInitialized(ServletContextAttributeEvent scab | 创建对象 |
contextDestroyed(ServletContextAttributeEvent scab) | 销毁对象 |
监听HttpSession对象
对HttpSession对象实现监听,可以监听HttpSession对象中属性的变化(增加、删除、修改),也可以监听HttpSession对象本身的变化(创建与销毁),还可以监听HttpSession对象是否绑定到监听器对象上。常用的监听方法如下:
接口名称 | 接口方法 | 触发条件 |
---|---|---|
HttpSessionAttributeListener | attributeAdded(HttpSessionBindingEvent hsbe) | 增加属性 |
attributeRemoved(HttpSessionBindingEvent hsbe) | 删除属性 | |
attributeReplaced(HttpSessionBindingEvent hsbe) | 修改属性 | |
HttpSessionListener | sessionCreate(HttpSessionEvent hse | 创建对象 |
sessionDestroyed(HttpSessionEvent hse) | 销毁对象 | |
HttpSessionActivationListener | sessionDidActivate(HttpSessionEvent hse) | 会话刚被激活 |
sessionWillPssivate(HttpSessionEvent hse) | 会话将要被钝化 | |
HttpSessionBindingListener | valueBound(HttpSessionBindingEvent hsbe) | 调用setAttribute()方法 |
valueBound(HttpSessionBindingEvent) | 调用removeAttribute()方法 |
活化(Activate)和钝化(Passivate)是web容器为了更好的利用系统资源。会话对象的钝化是指暂时将会话对象通过序列化的方法存储到硬盘上。活化则是将硬盘上存储的会话对象重新加载到Web容器中。
监听ServletRequest对象
对ServletRequest对象监听,可以监听对象中属性的变化(增加、删除、修改),也可以监听本身的变化(创建与销毁)。常用监听方法如下:
接口名称 | 接口方法 | 触发条件 |
---|---|---|
ServletContextAttribute | attributeAdded(ServletRequestAttributeEvent srae) | 增加属性 |
attributeRemoved(ServletRequestAttributeEvent srae) | 删除属性 | |
attributeReplaced(ServletRequestAttributeEvent srae) | 修改属性 | |
ServletRequestListener | requestInitialized(ServletRequestEvent sre | 创建对象 |
requestDestroyed(ServletRequestEvent sre) | 销毁对象 |
如何设计监听器
-
创建一个类,实现合适的接口
-
重写有关事件的方法
-
配置监听器
监听器的配置信息同样在web.xml文件中配置,不需要配置地址。
案例——统计在线用户的人数
当登陆的用户会将用户添加到HttpSession对象的属性中,触发对象的attributeAdded()方法,当关闭浏览器,或退出登陆,则会触发对象的attributeRemoved()方法。
设计监听类:OnlineListener.java
配置web.xml文件:
统计人数网页:online.jsp
@syl 2021/07/01 16:50 晴 32° 吃饭
这篇关于Java过滤器和监听器技术的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-01后台管理开发学习:新手入门指南
- 2024-11-01后台管理系统开发学习:新手入门教程
- 2024-11-01后台开发学习:从入门到实践的简单教程
- 2024-11-01后台综合解决方案学习:从入门到初级实战教程
- 2024-11-01接口模块封装学习入门教程
- 2024-11-01请求动作封装学习:新手入门教程
- 2024-11-01登录鉴权入门:新手必读指南
- 2024-11-01动态面包屑入门:轻松掌握导航设计技巧
- 2024-11-01动态权限入门:新手必读指南
- 2024-11-01动态主题处理入门:新手必读指南