Servlet中有过滤器和听众功能。我想知道过滤器和侦听器之间的确切差异。

有帮助吗?

解决方案

Servlet过滤器用于监视客户对Servlet的请求和响应,或修改请求和响应,或审核和日志。

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

其他提示

过滤器用于预科和后过程请求。看着那(这 javax.servlet.Filter 在您的tomcat/jboss/其他容器Javadoc中。

作为听众就像触发器一样,可以将其附加到应用程序服务器中的事件(让我们在此处使用术语容器)。对于听众,您可以跟踪应用程序级,会话级,生命周期更改,属性更改等。实现的接口是 javax.servlet.Listener 界面。

根据下面的@FNT的回答,让我尝试澄清更多。听众是针对生命周期更改的目标,而无需让客户的请求进来。因此,对于一个客户请求,可能会有更多的生命周期事件发生在请求之前。示例:您想记录该超时的所有会话。请注意,SesionTimeout是一个生命周期事件,可以在无需用户做任何事情的情况下发生。对于这种情况,听众是合适的。

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

来自Oracle的此材料应该能够澄清更多过滤器和听众

Hth

筛选 就像输出过滤器一样,将要过滤传入(请求)和外传(响应)值。

听众 就像听(触发) - 每当需要时,我将被执行。

一个重要的区别通常被忽略:虽然听众被触发了实际的物理请求,但过滤器可与Servlet容器调度一起使用。对于一个侦听器调用,可能有多个过滤器/servlet调用。

Listeners vs Filters

映射过滤器调度程序类型. 。链接有点过时 - 它不包括Servlet 3.0 Async 调度器类型。一个人还可以用 @WebFilter 注解:

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

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

来自 Java EE 6

筛选

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

听众

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

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

筛选

过滤器是一个动态拦截请求和响应以转换或使用请求或响应中包含的信息的对象。

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

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

仅在Web.xml中定义的Web层中使用过滤器。

当将您的请求/响应视为黑匣子系统时,过滤器更适合。无论如何实施servlet,它们都将工作。

过滤器用于执行过滤任务,例如登录身份验证,从网页审核传入请求,转换,记录,压缩,加密和解密,输入验证等。

仅在Web层中使用Servlet过滤器,您不能在Web上下文之外使用它。

有关过滤器的更多详细信息 http://array151.com/blog/servlet-filter/

听众

servlet侦听器用于在Web容器中收听事件,例如当您创建会话或将属性放在会话中或在另一个容器中进行钝化并激活时,订阅这些事件,您可以在Web.xml中配置侦听器,例如,httpsessionlistener。

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

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

有关更多详细信息: http://array151.com/blog/servlet-listener/

这是区别 http://array151.com/blog/difference-betweew-servlet-filter-and-servlet-listener/

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

资源 : 网络

您可以轻松地对这两者的英语含义有一个粗略的想法。有过滤器在那里过滤从servlet到/外出的内容/资源。另一方面,在Web应用程序发生某些事情时,听众在那里做一些相关的事情(侦听)。

过滤器:过滤器只是简单地过滤响应,并从客户端到servlet的请求。

听众:就像发生任何触发器时一样,采取了动作。

简而言之,

过滤器是用于servlet的,拦截了请求和响应。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top