JSP过滤器监听器

lyjsession 贡献于2014-03-27

作者 微软中国  创建于2011-06-30 03:19:00   修改者微软中国  修改于2011-07-18 09:15:00字数4896

文档摘要:过滤器1.过滤器在Web开发中的一些主要应用①.对用户请求进行统一认证;②.用户的访问进行记录和审核;③.对用户发送的数据进行过滤和替换;④.转换图像格式;⑤.对响应内容进行压缩,减少传输量;⑥.对请求和响应进行加解密处理。
关键词:

过滤器 1. 过滤器在Web开发中的一些主要应用 ①. 对用户请求进行统一认证; ②. 用户的访问进行记录和审核; ③. 对用户发送的数据进行过滤和替换; ④.转换图像格式; ⑤. 对响应内容进行压缩,减少传输量; ⑥.对请求和响应进行加解密处理。    2. 过滤器生命周期的各个阶段 ①.实例化        Servlet容器创建Filter实例对象。 ②.初始化        调用init()方法,完成对象的初始化功能,只执行一次。 ③.过滤          调用doFilter()方法,该方法中定义过滤规则。 ④.销毁          调用destroy()方法销毁Filter对象,释放过滤器使用的资源。   3. 有关过滤器的API Filter 过滤器必须是一个实现Filter接口的类的对象,它根据用户的请求和资源的响应进行过滤。 Filter 接口包含以下方法: public void init(FilterConfig fg) //被容器调用,初始化过滤器 public void doFilter(ServletRequestw req,ServletResponse res, FilterChain chain) // 每当有请求或响应时被容器调用,进行过滤 public void destroy() //被容器调用,销毁过滤器   FilterChain FilterChain接口用于调用过滤器链中的一系列过滤器,通过该接口把被过滤的任务在Filter间传递,它的主要方法: public void doFilter(ServletRequest req, ServletResponse res) //调用下一个过滤器,若无下一过滤器,则将请求或响应传递到目标   FilterConfig FilterConfig对象由容器提供给过滤器,以允许访问该过滤器的初始化数据(web.xml中配置) FilterConfigv 接口包含以下方法: String getFilterName():得到filter的名称。 String getInitParameter(String name): 返回在部署描述中指定名称的初始化参数的值。如果不存在返回null。 Enumeration getInitParameterNames():返回过滤器的所有初始化参数的名字的枚举集合。 public ServletContext getServletContext():返回Servlet上下文对象的引用。   4. 实现过滤器的步骤 ①.创建一个实现javax.servlet.Filter接口的类 ②.实现init()方法,读取过滤器的初始化参数 ③.实现doFilter()方法,完成对请求或过滤的响应 ④.调用FilterChain接口对象的doFilter()方法,向后续的过滤器传递请求或响应 ⑤.在web.xml中配置Filter,对需要过滤的资源进行配置 5. 实例 /** * 用于设置 HTTP 请求字符编码的过滤器,通过过滤器参数encoding指明使用何种字符编码,用于处理Html Form请求参数的中文问题 */ package filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class EncodingFilter implements Filter { protected FilterConfig filterConfig = null; protected String encoding = ""; public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { if(encoding != null) servletRequest.setCharacterEncoding(encoding); filterChain.doFilter(servletRequest, servletResponse); } public void destroy() { filterConfig = null; encoding = null; } public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig; this.encoding = filterConfig.getInitParameter("encoding"); } } 监听器 1. 监听器概述 ①.Listener是Servlet的监听器 ②.可以监听客户端的请求、服务端的操作等。 ③.通过监听器,可以自动激发一些操作,如监听在线用户数量,当增加一个HttpSession时,给在线人数加1。 ④.编写监听器需要实现相应的接口 ⑤.编写完成后在web.xml文件中配置一下,就可以起作用了 2. 常用的监听接口 应用事件模型提供了当ServletContext,HttpSession,ServletRequest状态改变时的通知功能。可以编写事件监听类来响应这些状态的改变,并且可以配置和部署应用事件和监听类到Web应用。 对于ServletContext事件,当Web应用部署、卸载和对context增加属性时,事件监听类可以得到通知。下表列出了ServletContext的事件类型,对应特定事件的监听类必须实现的接口和当事件发生时调用的方法。 事件类型 接口 方法 Servlet context被创建 javax.servlet.ServletContextListener contextInitialized() Servlet context被注销 javax.servlet.ServletContextListener contextDestroyed() 增加属性 javax.servlet. ServletContextAttributeListener attributeAdded() 删除属性 javax.servlet. ServletContextAttributeListener attributeRemoved() 属性被替换 javax.servlet. ServletContextAttributeListener attributeReplaced() 对于HttpSession事件,当session激活、删除或者session属性的增加、删除和替换时,事件监听类得到通知。下表列出了HttpSession的事件类型,对应特定事件的监听类必须实现的接口和当事件发生时调用的方法。 事件类型 接口 方法 session激活 javax.servlet.http. HttpSessionListener sessionCreated() session删除 javax.servlet.http. HttpSessionListener sessionDestroyed() 增加属性 javax.servlet.http. HttpSessionAttributeListener attributeAdded() 删除属性 javax.servlet.http. HttpSessionAttributeListener attributeRemoved() 属性被替换 javax.servlet.http. HttpSessionAttributeListener attributeReplaced() 对于ServletRequest事件,当request初始化、销毁或者request属性的增加、删除和替换时,事件监听类得到通知。下表列出了ServletRequest的事件类型,对应特定事件的监听类必须实现的接口和当事件发生时调用的方法。 事件类型 接口 方法 Request初始化 javax.servlet.ServletRequestListener requestInitialized() request销毁 javax.servlet.ServletRequestListener requestDestroyed() 增加属性 javax.servlet.ServletRequestAttributeListener attributeAdded() 删除属性 javax.servlet.ServletRequestAttributeListener attributeRemoved() 属性被替换 javax.servlet.ServletRequestAttributeListener attributeReplaced() 3. 配置事件监听类的步骤 ①. 打开Web应用的部署描述文件web.xml ②.增加事件声明标记。事件声明定义的事件监听类在事件发生时被调用。标记必须在标记和标记之间 可以为每种事件定义多个事件监听类,Apusic应用服务器按照它们在部署描述文件声明的顺序调用。例如:            com.puckasoft.video.servlet.TestSessionListener 4. 编写监听事件类的步骤 ①.创建新的类并实现事件对应的接口 ②.定义不接受参数、访问属性为public的构造函数 ③.实现接口的方法 ④.编译并拷贝到对应Web应用的WEB-INF/classes目录下,或者打包成jar文件拷贝到WEB-INF/lib目录下 其他:属性监听器中可以通过event.getName(),得到所创建属性的名称,event.getValue()属性得到所创建属性的值。 有关Session 1. Session过期时间设置方式 1. 在页面或者公共页面加入java代码: HttpSession session=request.getSession(); Session.setMaxInactiveInterval(900); 注:参数900单位是秒,即活动15分钟后session失效。Session设置的时间是根据服务器来计算的 2. 比较通用的设置session失效时间的方法,就是在项目中的web.xml中设置: 15 注:这里的15表示15分钟后session失效。 3. 直接在应用服务器中设置,如果是tomcat,可以再tomcat目录下conf/web.xml中找到元素,tomcat默认设置时30分钟,只要修改这个值就可以了。 注:如果上述三个地方都设置了,有个优先级的问题。从高到低:3<>2---<>1--- 2. Session监听器 在一般系统中,可能在session失效后做一些操作,如控制用户数、控制一个用户多次登录等,这里就需要用到监听器,即当session因为各种原因失效后,监听器就可以监听到,然后执行监听器中定义好的程序。 监听器类为:javax.servlet.http.HttpSessionListener(interface)类,有seesionCreated和sessionDestroyed两个方法: sessionCreated(HttpSessionEvent event) 指在session创建时执行的方法; sessionDestroyed(HttpSessionEvent event) 指在session失效时执行的方法。

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 5 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档