拦截器和过滤器

- Filter过滤器:拦截web访问url地址。 这个比拦截器范围广,过滤器是大集合,拦截器是大集合中的小集合。而且任何url是先经过过滤器后才进入拦截器的。
- Interceptor拦截器:拦截url以action结尾或者没有后缀的,没有后缀拦截器会认为是.action结尾。 如:struts2拦截器、spring拦截器
- Spring AOP拦截器:只能拦截Spring管理Bean的访问(业务层Service),就是说执行某个bean容器中方法时进行拦截,而不是对url

Filter与Interceptor联系与区别
1. 拦截器是基于java的反射机制,使用代理模式,而过滤器是基于函数回调。
2. 拦截器属于Spring容器,过滤器属于servlet容器。
3. 拦截器只能对action起作用,而过滤器可以对几乎所有的请求起作用(可以保护资源)。
4. 拦截器可以访问action上下文,堆栈里面的对象,而过滤器不可以。
5. 执行顺序:过滤前-拦截前-Action处理-拦截后-过滤后。


HandlerInterceptor:最常用的登录拦截、或是权限校验、或是防重复提交。
定义一个Interceptor 非常简单方式也有几种,我这里简单列举两种
        1、类要实现Spring 的HandlerInterceptor 接口
        2、类继承实现了HandlerInterceptor 接口的类,例如:已经提供的实现了HandlerInterceptor 接口的抽象类HandlerInterceptorAdapter
        // 在业务处理器处理请求之前被调用。预处理,可以进行编码、安全控制、权限校验等处理;

    boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception;


        // 在业务处理器处理请求执行完成后,生成视图之前执行。后处理(调用了Service并返回ModelAndView,但未进行页面渲染),有机会修改ModelAndView 
  

 void postHandle(
            HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
            throws Exception;


        // 在DispatcherServlet完全处理完请求后被调用,可用于清理资源等。返回处理(已经渲染了页面);
 

   void afterCompletion(
            HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception;


创建监听器步骤:
1.创建一个类,实现需要监听器的接口
2.重写接口中的方法
3.在web.xml中配置注册该监听器


HttpSessionListener:监听器
        Session创建事件发生在每次一个新的session创建的时候
# public void sessionCreated(HttpSessionEvent se); 
        Session失效事件发生在每次一个Session失效的时候
# public void sessionDestroyed(HttpSessionEvent se);
# 需要在 web.xml 中添加如下配置
 
    demo.listener.SessionCounter  
 

以下两种情况下就会发生sessionDestoryed(会话销毁)事件:

1.执行session.invalidate()方法时。

public void doGet(HttpServletRequest request,HttpServletResponse response) throwsServletException, IOException {
    // 销毁
    session request.getSession().invalidate();
    // 成功 
    response.sendRedirect("index.jsp"); 
}


2.如果用户长时间没有访问服务器,超过了会话最大超时时间,服务器就会自动销毁超时的session。

会话超时时间可以在web.xml中进行设置,为了容易看到超时效果,我们将超时时间设置为最小值。

 1 


时间单位是一分钟,并且只能是整数,如果是零或负数,那么会话就永远不会超时。


应用场景:
当一个浏览器第一次访问网站的时候,J2EE应用服务器会新建一个HttpSession对象 ,并触发 HttpSession创建事件 ,如果注册了HttpSessionListener事件监听器,则会调用HttpSessionListener事件监听器的sessionCreated方法。相反,当这个浏览器访问结束超时的时候,J2EE应用服务器会销毁相应的HttpSession对象,触发 HttpSession销毁事件,同时调用所注册HttpSessionListener事件监听器的sessionDestroyed方法。

创建过滤器步骤:
1.创建一个类实现Filter接口
2.重写接口中方法 doFilter方法是真正过滤的
3.在web.xml文件中配置 

注意:在Filter的doFilter方法内如果没有执行chain.doFilter(request,response)那么资源是不会被访问到的。

你可能感兴趣的:(监听器过滤器创建,web)