Java教程

Java过滤器和监听器技术

本文主要是介绍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的主要方法如下:

  1. init(FilterConfig config):用于初始化过滤器,并获取web.xml配置文件中过滤器初始参数。当服务器启动时会加载过滤器。
  • config:
    FilterConfig对象的getInitParameter(String name)方法可以获取配置文件中的参数。
  1. doFilter(ServletRequest request,ServletResponse response,FilterChain chain):当请求地址和过滤地址匹配时,将在此执行过滤操作。
  • request:
    给过滤器提供了对请求信息的访问
  • response:
    用于响应请求
  • chain:
    使用该对象调用Servlet、JSP页面或者下一个过滤器。
  1. destory():当服务器关闭时在此执行操作。

如何设计过滤器

  1. 实现javax.servlet.Filter接口
  2. 重写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访问站点

关键点:

  1. 获取访问网站的IP地址
    String remoteIP = request.getRemoteAddr();
  2. web.xml配置文件
    如下
  3. localhost,解析的是0.0.0.0.0.0.0.1

创建Filter过滤IP类:FilterIP.java
在这里插入图片描述
web.xml配置文件:
在这里插入图片描述

当前访问的IP地址是过滤的地址Error.jsp:
在这里插入图片描述

监听器

可以通过监听器监听Web应用的上下文信息、Servlet请求信息、Servlet会话信息。**当服务器启动时,监听器自动加载(执行构造函数),特定事件发生时,容器会自动调用相应监听器中对应的时间处理方法。

监听器接口

监听器用到javax.servlet包中的一组监听接口和事件类。监听器划分为以下三种:

  1. ServletContext事件监听器:用于监听应用程序环境对象。
  2. HttpSession事件监听器:用于监听用户会话对象。
  3. ServletRequest事件监听器:用于监听请求对象。
监听对象监听接口监听事件
ServletRequestServletRequestListenerServletRequestEvent
ServletRequestAttributeListenerServletRequestAttributeEnvent
HttpSessionHttpSessionListenerHttpSessionEvent
HttpSessionActivationListener
HttpSessionAttributeListenerHttpSessionBindingEvent
HttpSessionBindingListener
ServletContextServletContextListenerServletContextEvent
ServletContextAttributeListenerServletContextAttributeEvent

监听ServletContext对象

对ServletContext对象实现监听,可以监听ServletContext对象中属性的变化(增加、删除、修改),也可以监听ServletContext对象本身的变化(创建与销毁)。常用的监听方法如下:

接口名称接口方法触发条件
ServletContextAttributeattributeAdded(ServletContextAttributeEvent scab)增加属性
attributeRemoved(ServletContextAttributeEvent scab)删除属性
attributeReplaced(ServletContextAttributeEvent scab)修改属性
ServletContextListenercontextInitialized(ServletContextAttributeEvent scab创建对象
contextDestroyed(ServletContextAttributeEvent scab)销毁对象

监听HttpSession对象

对HttpSession对象实现监听,可以监听HttpSession对象中属性的变化(增加、删除、修改),也可以监听HttpSession对象本身的变化(创建与销毁),还可以监听HttpSession对象是否绑定到监听器对象上。常用的监听方法如下:

接口名称接口方法触发条件
HttpSessionAttributeListenerattributeAdded(HttpSessionBindingEvent hsbe)增加属性
attributeRemoved(HttpSessionBindingEvent hsbe)删除属性
attributeReplaced(HttpSessionBindingEvent hsbe)修改属性
HttpSessionListenersessionCreate(HttpSessionEvent hse创建对象
sessionDestroyed(HttpSessionEvent hse)销毁对象
HttpSessionActivationListenersessionDidActivate(HttpSessionEvent hse)会话刚被激活
sessionWillPssivate(HttpSessionEvent hse)会话将要被钝化
HttpSessionBindingListenervalueBound(HttpSessionBindingEvent hsbe)调用setAttribute()方法
valueBound(HttpSessionBindingEvent)调用removeAttribute()方法

活化(Activate)和钝化(Passivate)是web容器为了更好的利用系统资源。会话对象的钝化是指暂时将会话对象通过序列化的方法存储到硬盘上。活化则是将硬盘上存储的会话对象重新加载到Web容器中。

监听ServletRequest对象

对ServletRequest对象监听,可以监听对象中属性的变化(增加、删除、修改),也可以监听本身的变化(创建与销毁)。常用监听方法如下:

接口名称接口方法触发条件
ServletContextAttributeattributeAdded(ServletRequestAttributeEvent srae)增加属性
attributeRemoved(ServletRequestAttributeEvent srae)删除属性
attributeReplaced(ServletRequestAttributeEvent srae)修改属性
ServletRequestListenerrequestInitialized(ServletRequestEvent sre创建对象
requestDestroyed(ServletRequestEvent sre)销毁对象

如何设计监听器

  1. 创建一个类,实现合适的接口
    在这里插入图片描述

  2. 重写有关事件的方法
    在这里插入图片描述

  3. 配置监听器

监听器的配置信息同样在web.xml文件中配置,不需要配置地址。

案例——统计在线用户的人数

当登陆的用户会将用户添加到HttpSession对象的属性中,触发对象的attributeAdded()方法,当关闭浏览器,或退出登陆,则会触发对象的attributeRemoved()方法。
设计监听类:OnlineListener.java
在这里插入图片描述
配置web.xml文件:
在这里插入图片描述

统计人数网页:online.jsp
在这里插入图片描述

@syl 2021/07/01 16:50 晴 32° 吃饭

这篇关于Java过滤器和监听器技术的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!