Servlet过滤器和Servlet上下文侦听器之间有什么区别?

时间:2012-03-21 20:52:40

标签: jsf servlets servlet-filters servlet-listeners

使用Servlet过滤器与Servlet上下文侦听器有什么区别?

你什么时候使用其中一个?

1 个答案:

答案 0 :(得分:10)

A Filter拦截与其URL模式匹配的HTTP请求,并允许您修改它们。另请参见其javadoc

  

过滤器是对资源请求(servlet或静态内容)或资源响应(或两者)执行过滤任务的对象。

     

过滤器在doFilter方法中执行过滤。每个Filter都可以访问FilterConfig对象,从中可以获取其初始化参数,以及对ServletContext的引用,例如,它可以加载过滤任务所需的资源

     

过滤器在Web应用程序的部署描述符中配置。

     

已为此设计确定的示例包括:

     
      
  • 身份验证过滤器
  •   
  • 记录和审核过滤器
  •   
  • 图片转换过滤器
  •   
  • 数据压缩过滤器
  •   
  • 加密过滤器
  •   
  • 令牌过滤器
  •   
  • 触发资源访问事件的过滤器
  •   
  • XSL / T过滤器
  •   
  • Mime型链滤器
  •   

A ServletContextListener拦截webapp的启动和关闭,允许您在启动和/或关闭时执行一些代码。另请参见其javadoc

  

用于接收有关ServletContext生命周期更改的通知事件的接口。

     

为了接收这些通知事件,实现类必须在Web应用程序的部署描述符中声明,使用WebListener注释,或者通过addListener上定义的ServletContext方法之一注册。 {1}}。

     

此接口的实现在其contextInitialized(javax.servlet.ServletContextEvent)方法中按其声明的顺序调用,并在其contextDestroyed(javax.servlet.ServletContextEvent)方法中以相反的顺序调用。

何时使用这一个或另一个现在应该是显而易见的。如果要拦截处理特定URL模式的HTTP请求,请使用Filter,因为您要检查/修改HTTP请求/响应。如果要拦截webapp的启动和/或关闭,请使用ServletContextListener

请知道在何处找到javadoc以及如何解释它们。它们包含了对这类琐碎问题的所有答案。