Servlet中filter和监听器的区别(Java EE)

Servlet中有Filters和Listenersfunction。 我想知道filter和侦听器之间的确切区别。

Servletfilter用于监视从客户端到servlet的请求和响应,或者修改请求和响应,或者审计和logging。

Servlet Listener用于监听Web容器中的事件,例如创build会话时,或者在会话中放置属性,或者如果在另一个容器中钝化并激活,则可以订阅这些事件,以便在web.xmlconfiguration监听web.xml ,例如HttpSessionListener

filter用于前后处理请求。 看看你的tomcat / jboss /其他容器javadoc中的javax.servlet.Filter

监听器就像触发器,可以附加到你的应用服务器中的事件(让我们在这里使用术语容器)。 使用监听器,您可以跟踪应用程序级别,会话级别,生命周期更改,属性更改等。所实现的接口是javax.servlet.Listener接口。

根据@fnt的回答,让我试着澄清一些。 监听器的目标是生命周期的变化,而不必有一个客户端请求进来。所以对于一个客户端请求,可能会有更多的生命周期事件发生在请求处理之前。 例如:您想要logging超时的所有会话。 请注意,SesionTimeout是一个生命周期事件,可以在没有用户执行任何操作的情况下发生。 对于这样的场景,听众将是适当的。

关于请求到达时logging的问题。 没有将新请求直接映射到等效侦听器(读取生命周期事件)事件。 因此,如果你想logging每一个传入的请求,我认为filter是正确的使用。

来自Oracle的这个材料应该能够澄清更多的filter和监听器

HTH

filter就像一个水filter,其中传入(请求)和传出(响应)值将被过滤。

听众就像听(触发) – 只要需要,我会被执行。

一个重要的区别经常被忽视:当听众被触发了一个实际的物理请求,filter使用servlet容器分派。 对于一个监听器调用,可能会有多个filter/ servlet调用。

监听器与过滤器

映射filter调度程序types 。 链接有点过时 – 它不包括Servlet 3.0 Async调度器types。 你也可以用@WebFilter注解来指定调度器types:

 import javax.servlet.DispatcherType; import javax.servlet.annotation.WebFilter; @WebFilter(servletNames = { "My Servlet" }, dispatcherTypes = { DispatcherType.REQUEST, DispatcherType.FORWARD }) 

来自Java EE 6的文本

过滤

filter是一个对象,它转换请求和响应(标题以及内容)。

听众

您可以通过定义在生命周期事件发生时调用其方法的侦听器对象来监视和响应servlet生命周期中的事件。

虽然可以修改侦听器中的当前事件对象,但不能停止侦听器中当前事件处理器的执行。 您也无法从侦听器中清除事件队列。 除了强加的能力差异之外,它们也用于不同的目的。 听众倾向于关注事件处理程序和模型之间的交互,而filter倾向于关注事件处理程序和控制器之间的交互。

来源: 网页

用这两个词的英文含义,你可以轻易得出一个粗略的概念。 Filer在那里过滤从Servlet进出的内容/资源。 另一方面,Listener在那里,当web应用程序发生某些事情时(听),做一些相关的事情。

filter:filter简单地过滤来自客户端的响应和请求到servlet。

监听器:就像触发器发生触发时所采取的行动一样。

阅读所有的答案和博客后,这就是我得到的

过滤

filter是一个dynamic拦截请求和响应来转换或使用请求或响应中包含的信息的对象。

filter通常不会自己创build响应,而是提供可以“附加”到任何types的servlet或JSP页面的通用函数。

filter在呈现视图之前但在控制器呈现响应之后运行。

web层中只使用filter,因为它在web.xml中定义。

将您的请求/响应视为黑匣子系统时,filter更合适。 无论servlet是如何实现的,他们都会工作。

filter用于执行过滤任务,例如loginauthentication,审计来自网页的传入请求,转换,logging,压缩,encryption和解密,inputvalidation等。

Servletfilter仅用于Web层,不能在Web上下文之外使用。

有关filterhttp://array151.blogspot.in/2016/12/servlet-filter.html的更多详细信息

倾听者

Servlet Listener用于监听Web容器中的事件,例如创build会话或在会话中放置属性,或者在另一个容器中钝化并激活时,订阅这些事件可以在web.xml中configuration监听器,例如,HttpSessionListener。

听众可以触发实际的物理请求,这些请求可以附加到应用程序服务器中的事件中。通过侦听器,您可以跟踪应用程序级别,会话级别,生命周期更改,属性更改等。

通过定义在生命周期事件发生时调用其方法的侦听器对象,您可以监视和响应servlet生命周期中的事件。

欲了解更多详情: http : //array151.blogspot.in/2016/12/servlet-listener.html

简而言之,

filter是针对Servlet的,拦截请求和响应。

监听器用于Web应用程序,在上下文级别,会话级别等事件中执行重要任务