Servlet过滤器和Servlet上下文监听器有什么区别?

8

使用Servlet Filter和使用Servlet Context Listener之间有哪些区别?

什么情况下会使用其中一个而不是另一个?

1个回答

11
一个过滤器拦截与其URL模式匹配的HTTP请求并允许您修改它们。请参阅其javadoc

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

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

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

已确认此设计的示例包括:

  • 认证过滤器
  • 日志和审计过滤器
  • 图像转换过滤器
  • 数据压缩过滤器
  • 加密过滤器
  • 令牌化过滤器
  • 触发资源访问事件的过滤器
  • XSL / T过滤器
  • Mime类型链过滤器
一个ServletContextListener拦截Web应用程序的启动和关闭,并允许您在启动和/或关闭时执行一些代码。请参阅其javadoc

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

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

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

何时使用其中一个应该很明显。如果要拦截特定URL模式的HTTP请求,则使用Filter,因为要检查/修改HTTP请求/响应。如果要拦截Web应用程序的启动和/或关闭,则使用ServletContextListener
请知道如何找到javadoc并如何解释它们。它们包含所有这种琐碎问题的答案。

你提供的信息比Java文档中能找到的更有用。非常感谢。 - BestPractices

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接