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

Bes*_*ces 7 jsf servlets servlet-filters servlet-listeners

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

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

Bal*_*usC 11

一个Filter在HTTP请求拦截匹配的URL模式,并允许您对其进行修改.另见它的javadoc:

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

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

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

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

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

一个ServletContextListener对Web应用程序的启动和关闭,并截取允许你在启动和/或关机执行一些代码.另见它的javadoc:

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

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

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

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

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