Servlet(JavaEE)中过滤器和监听器的区别
Servlet中有过滤器和侦听器功能。我想知道过滤器和监听器之间的确切区别。你可以很容易地大致了解这两个词的英语意思Servlet(JavaEE)中过滤器和监听器的区别,java,servlets,servlet-filters,servlet-listeners,Java,Servlets,Servlet Filters,Servlet Listeners,Servlet中有过滤器和侦听器功能。我想知道过滤器和监听器之间的确切区别。你可以很容易地大致了解这两个词的英语意思 Filter用于过滤来自Servlet的内容/资源。另一方面,监听器在那里,当web应用程序发生问题时,它可以做一些相关的事情(监听)。过滤器用于预处理和后处理请求。查看您的应用程序中的javax.servlet.Filter tomcat/jboss/other容器javadoc 其中,as侦听器类似于可以附加到中的事件的触发器 你的应用服务器(让我们在这里使用术语容器)。使用
Filter用于过滤来自Servlet的内容/资源。另一方面,监听器在那里,当web应用程序发生问题时,它可以做一些相关的事情(监听)。过滤器用于预处理和后处理请求。查看您的应用程序中的
javax.servlet.Filter
tomcat/jboss/other容器javadoc
其中,as侦听器类似于可以附加到中的事件的触发器
你的应用服务器(让我们在这里使用术语容器)。使用侦听器,您可以跟踪应用程序级别、会话级别、生命周期更改、属性更改等。实现的接口是javax.servlet.Listener
interface
根据@fnt在下面的回答,让我尝试进一步澄清。
监听器是生命周期更改的目标,无需客户端请求。因此,对于一个客户端请求,在处理该请求之前可能会发生更多的生命周期事件。
例子:
您想记录超时的所有会话。请注意,SesionTimeout是一个生命周期事件,它可以在用户不做任何事情的情况下发生。对于这种情况,侦听器是合适的
对于请求到达时的日志记录问题。没有新请求到等效侦听器(读取生命周期事件)事件的直接映射。因此,对于每个传入的请求,如果你想记录一些东西,我认为过滤器是正确的选择
这篇来自Oracle的材料应该能够澄清更多
2021年3月17日更新
评论中有一些反复。试图澄清。
根据定义,过滤器将始终被调用。因此,如果我需要始终记录请求,将其保存在过滤器中将确保我获得日志记录。如果我把它放在监听器中,我必须确保日志代码块在所有可能的监听器中执行。这两种方法都将为您提供所需的日志记录,使用过滤器将更有效
HTH虽然您可以在侦听器中修改当前事件对象,但是 无法停止侦听器中当前事件处理程序的执行。 您也无法从侦听器中清除事件队列。此外 能力上的强加差异,也是为了 不同的目的。听众倾向于关注听众之间的互动 事件处理程序和模型,而过滤器往往侧重于 事件处理程序和控制器之间的交互
来源:Servlet过滤器用于监视从客户端到Servlet的请求和响应,或者修改请求和响应,或者审核和记录 Servlet Listener用于侦听web容器中的事件,例如,当您创建会话时,或者在会话中放置属性时,或者如果您在另一个容器中被动和激活,则要订阅这些事件,您可以在
web.xml
中配置Listener,例如HttpSessionListener
文本
过滤器
筛选器是一个对象,用于转换请求和响应(头和内容)
听众
您可以通过定义侦听器对象来监视servlet生命周期中的事件,并对其作出反应。当生命周期事件发生时,将调用侦听器对象的方法。过滤器类似于水过滤器,将过滤传入(请求)和传出(响应)值
监听器就像监听(触发器)-只要需要,我就会执行。过滤器:过滤器只是过滤来自客户机到servlet的响应和请求 监听器:就像一个触发器,当任何触发器发生时,它都会采取行动 简而言之 过滤器用于Servlet,拦截请求和响应
侦听器用于Web应用程序,在上下文级别、会话级别等执行有关事件的重要任务。一个重要的区别经常被忽略:当侦听器为实际的物理请求触发时,过滤器使用servlet容器分派。对于一个侦听器调用,可能有多个过滤器/servlet调用 。该链接有点过时-它不包括Servlet3.0
Async
dispatcher类型。
还可以使用@WebFilter
注释指定调度程序类型:
import javax.servlet.DispatcherType;
import javax.servlet.annotation.WebFilter;
@WebFilter(servletNames = { "My Servlet" },
dispatcherTypes = { DispatcherType.REQUEST, DispatcherType.FORWARD })
在阅读了所有的答案和博客之后,这就是我得到的 过滤器 筛选器是一个动态截获请求和请求的对象 转换或使用中包含的信息的响应 请求或响应 过滤器通常不会自己创建响应,而是创建响应 提供通用功能,可“连接”到任何类型的 servlet或JSP页面 过滤器在渲染视图之前但在渲染控制器之后运行 答复 过滤器仅在web层中使用,因为它是在web.xml中定义的 当您将请求/响应视为 黑箱系统。不管servlet是如何工作的,它们都会工作 执行 筛选器用于执行诸如登录之类的筛选任务 验证、审核来自网页的传入请求, 转换、记录、压缩、加密和解密、输入 验证等 Servlet过滤器仅用于web层,您不能使用它 在web上下文之外 有关过滤器的详细信息,请参见 听众 Servlet侦听器用于侦听web容器中的事件, 例如,在创建会话或在会话中放置属性时 或者如果你在另一个co中钝化和激活