Filter+Listener的简单使用

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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值