Servlet中的Filter和Listener之间的区别(Java EE)

时间:2011-01-18 05:59:16

标签: java servlets servlet-filters servlet-listeners

Servlet中有过滤器和监听器功能。我想知道Filter和Listener之间的确切区别。

10 个答案:

答案 0 :(得分:74)

Servlet过滤器用于监视从客户端到servlet的请求和响应,或用于修改请求和响应,或用于审计和记录。

Servlet侦听器用于侦听Web容器中的事件,例如创建会话或在会话中放置属性,或者在另一个容器中钝化和激活时,要订阅这些事件,您可以配置侦听器在web.xml中,例如HttpSessionListener

答案 1 :(得分:33)

过滤器用于进程前和进程后请求。看看你的javax.servlet.Filter tomcat / jboss /其他容器javadoc。

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

根据@fnt下面的回复,让我试着澄清一些。 监听器的目标是生命周期更改,而无需请求客户端请求。因此,对于一个客户端请求,可能会在处理请求之前发生更多生命周期事件。 例: 您想要记录超时的所有会话。请注意,SesionTimeout是一个生命周期事件,无需用户执行任何操作即可发生。对于这种情况,听众将是合适的。

关于请求到达时的记录问题。没有将新请求直接映射到等效侦听器(读取生命周期事件)事件。因此,对于每个传入的请求,如果您想记录某些内容,我认为过滤是正确的。

来自Oracle的这些材料应该能够澄清更多内容 Filters and Listeners

HTH

答案 2 :(得分:21)

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

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

答案 3 :(得分:20)

经常忽略一个重要的区别:当侦听器被触发实际的物理请求时,过滤器可以使用servlet容器调度。对于一个侦听器调用,可能有多个过滤器/ servlet调用。

Listeners vs Filters

Mapping filters dispatcher types。该链接有点过时 - 它不包括Servlet 3.0 Async调度程序类型。 还可以使用@WebFilter注释指定调度程序类型:

import javax.servlet.DispatcherType;
import javax.servlet.annotation.WebFilter;

@WebFilter(servletNames = { "My Servlet" },
    dispatcherTypes = { DispatcherType.REQUEST, DispatcherType.FORWARD })

答案 4 :(得分:10)

来自Java EE 6

的文字

过滤

Filter是一个转换请求和响应的对象(标题和内容)。

<强>监听

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

答案 5 :(得分:6)

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

  

过滤

     

过滤器是动态拦截请求和的对象   转换或使用包含在中的信息的回应   请求或回复。

     

过滤器通常不会自己创建响应,而是创建响应   提供可以“附加”到任何类型的通用功能   servlet或JSP页面。

     

过滤器在渲染视图之前运行,但在控制器渲染之后运行   响应。

     

仅在web.xml中定义过滤器,因为它在web.xml中定义。

     

过滤器更适合将您的请求/响应视为一个   黑匣子系统。无论servlet是什么,它们都可以工作   实现。

     

过滤器用于执行过滤等任务   身份验证,审核来自网页的传入请求,   转换,日志记录,压缩,加密和解密,输入   验证等。

     

Servlet过滤器仅用于Web层,您无法使用它   在网络环境之外。

有关过滤器http://array151.com/blog/servlet-filter/

的详细信息
  

<强>监听

     

Servlet Listener用于侦听Web容器中的事件,   例如,当您在会话中创建会话或放置属性时   或者如果您在另一个容器中进行钝化和激活,则订阅   这些事件可以在web.xml中配置监听器,例如,   HttpSessionListener。

     

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

     

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

更多详情:http://array151.com/blog/servlet-listener/

这是差异http://array151.com/blog/difference-between-servlet-filter-and-servlet-listener/

答案 6 :(得分:4)

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

来源:web

答案 7 :(得分:2)

您可以轻松地了解这两者的英文含义。过滤器用于过滤从Servlet进出的内容/资源。另一方面,当Web应用程序发生某些事情(监听)时,Listener会在那里做一些相关的事情。

答案 8 :(得分:2)

过滤器:过滤器只是过滤响应和请求从客户端到servlet。

监听器:当触发器发生任何触发器时,它就像一个触发器。

答案 9 :(得分:1)

简而言之,

过滤器用于Servlet,拦截请求和响应。

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