Filter+Listener的简单使用

xiaoxiao2021-02-28  112

Filter+Listener

8-31,星期四 8:52:31


Web三大组件

1. Servlet 2. Filter 3. Listener

Filter 过滤器

过滤请求 使用步骤: Filter的使用方式与Servlet基本相同 1. 编写一个类 实现Filter 2. 在web.xml中 进行配置
代码实现
package cn.xdl.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; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; /** * 过滤器 * * 用来过滤请求 * @author j * */ public class UserFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("过滤器正在初始化"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest request2 = (HttpServletRequest) request; HttpServletResponse response2 = (HttpServletResponse) response; HttpSession session = request2.getSession(); if(session.getAttribute("userName")==null){ System.out.println("过滤器发现了一个不匹配的请求, 已经过滤掉, 且将其重定向到了登录页面"); session.setAttribute("loginFlag", "sada"); response2.sendRedirect("login.jsp"); return; } //放行 System.out.println("过滤器执行了放行操作"); chain.doFilter(request, response); } @Override public void destroy() { System.out.println("过滤器正在准备销毁"); } }
web.xml配置案例
一个过滤器过滤多个页面 <filter> <filter-name>userfilter</filter-name> <filter-class>cn.xdl.filter.UserFilter</filter-class> </filter> <filter-mapping> <filter-name>userfilter</filter-name> <url-pattern>/userInfo.jsp</url-pattern> </filter-mapping> <filter-mapping> <filter-name>userfilter</filter-name> <url-pattern>/manager.jsp</url-pattern> </filter-mapping>
Filter方法
1. 初始化方法 , 当tomcat运行时执行 public void init(FilterConfig filterConfig); 2. 执行过滤的方法 , 包含了请求对象与相应对象, 以及过滤器链的操作对象 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain); 3. 准备销毁时执行的方法, 在tomcat关闭时执行 public void destroy();
在过滤器链中 , 执行的顺序
1. 通过web.xml配置的Filter优先级较高! 2. web.xml配置越靠前 , 优先级越高

Listener监听器

Servlet规范中定义的一种特殊的组件,用来监听Servlet容器产生的事件并进行相应的处理 容器产生的事件分类 - 生命周期相关的事件 - 设置和删除Attribute数据相关的事件
ServletContextListener监听器
在ServletContext创建时和关闭时都会通知ServletContextListener 方法: servletContextInitialized(ServletContextEvent sce) 当ServletContext创建的时候,将会调用这个方法 servletContextDestroyed(ServletContextEvent sce) 当ServletContext销毁的时候(例如关闭应用服务器或者重新加载应用),将会调用这个方法。
ServletContextAttributeListener监听器
当往Servlet Context添加、删除或者替换一个属性的时候,将会通知ServletContextAttributesListener 方法: void attributeAdded(ServletContextAttributeEvent scab) 往ServletContext中加入一个属性的时候触发; void attributeRemoved(ServletContextAttributeEvent scab) 从ServletContext中删除一个属性的时候触发; void attributeReplaced(ServletContextAttributeEvent scab) 改变ServletContext中属性的时候触发。
HttpSessionListener监听器
当一个HttpSession刚被创建或者失效(invalidate)的时候,将会通知HttpSessionListener 方法: void sessionCreated(HttpSessionEvent hse) 当一个HttpSession对象被创建时,将会调用这个方法; void sessionDestroyed(HttpSessionEvent hse) 当一个HttpSession超时或者调用HttpSession的invalidate()方法让它销毁时,将会调用这个方法
HttpSessionAttributesListener监听器
HttpSession中添加、删除或者替换一个属性的时候,将会通知HttpSessionAttributesListener 方法: void attributeAdded(HttpSessionBindingEvent e) 当往会话中加入一个属性的时候,将会调用这个方法; void attributeRemoved(HttpSessionBindingEvent e) 当从会话中删除一个属性的时候,将会调用这个方法; void attributeReplaced(HttpSessionBindingEvent e) 当改变会话中的属性的时候,将会调用这个方法
在web.xml中配置listener组件
<listener> <listener-class> cn.xdl.listener.MyListener </listener-class> </listener>
转载请注明原文地址: https://www.6miu.com/read-54114.html

最新回复(0)