Filter+Listener的简单使用

来源:互联网 发布:js怎样隐藏鼠标指针 编辑:程序博客网 时间:2024/05/17 20:27

Filter+Listener

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


Web三大组件

1.  Servlet2.  Filter3.  Listener

Filter 过滤器

过滤请求使用步骤: Filter的使用方式与Servlet基本相同1.  编写一个类 实现Filter2.  在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>
原创粉丝点击