Servlet中具有过滤器和侦听器功能。我想知道Filter和Listener之间的确切区别。
Answers:
Servlet筛选器用于监视客户端到Servlet的请求和响应,或修改请求和响应,或审计和记录。
Servlet Listener用于侦听Web容器中的事件,例如,当您创建会话或在会话中放置属性,或者在其他容器中进行钝化和激活时,可以在中配置侦听器以订阅这些事件web.xml
,例如例子HttpSessionListener
。
ServletRequestListener
侦听ServletRequestEvent
每个传入请求触发的事件。如果我想将每个请求的用户代理登录到我的Web应用程序,我应该使用此侦听器还是过滤器?
No WebApplicationContext found: no ContextLoaderListener registered?
如果我未在Spring应用程序中定义侦听器,则会给我错误。
过滤器用于处理前和处理后的请求。查看javax.servlet.Filter
您的tomcat / jboss /其他容器中的javadoc。
侦听器就像触发器,可以附加到您的应用服务器中的事件(在这里使用术语容器)。使用侦听器,您可以跟踪应用程序级别,会话级别,生命周期更改,属性更改等。已实现的接口是javax.servlet.Listener
接口。
根据下面@fnt的响应,让我尝试澄清更多内容。侦听器的目标是生命周期更改,而不必传入客户端请求。因此,对于一个客户端请求,在处理请求之前,可能还会发生更多的生命周期事件。示例:您要记录该超时的所有会话。请注意,SesionTimeout是生命周期事件,无需用户执行任何操作即可发生。对于这种情况,侦听器将是适当的。
关于请求到达时的日志记录问题。没有将新请求直接映射到等效的侦听器(读取生命周期事件)事件。因此,对于每个传入的请求,如果您想记录一些内容,我认为Filter是正确的选择。
Oracle的材料应该能够阐明更多的 过滤器和侦听器
高温超导
ServletRequestListener
还是过滤?
过滤器就像水过滤器一样,将过滤传入(请求)和传出(响应)值。
侦听器就像侦听(触发)一样-只要需要,我都会被执行。
一个重要的差异通常被忽略:在为实际的物理请求触发侦听器的同时,过滤器与servlet容器分派一起工作。对于一个侦听器调用,可能有多个过滤器/ servlet调用。
映射过滤器调度程序类型。链接有些陈旧-它不包括Servlet 3.0Async
调度程序类型。也可以使用@WebFilter
批注指定调度程序类型:
import javax.servlet.DispatcherType;
import javax.servlet.annotation.WebFilter;
@WebFilter(servletNames = { "My Servlet" },
dispatcherTypes = { DispatcherType.REQUEST, DispatcherType.FORWARD })
过滤
过滤器是转换请求和响应(标头以及内容)的对象。
听众
您可以通过定义侦听器对象来监视和响应Servlet生命周期中的事件,这些侦听器对象在发生生命周期事件时将调用其方法。
阅读所有答案和博客后,这就是我得到的
过滤
过滤器是一个对象,它动态地拦截请求和响应以转换或使用请求或响应中包含的信息。
过滤器通常不会自己创建响应,而是提供可以“附加”到任何类型的servlet或JSP页面的通用功能。
过滤器在呈现视图之前但在控制器呈现响应之后运行。
仅在web.xml中定义的Web层中使用过滤器。
当将您的请求/响应视为黑盒系统时,过滤器更适合。无论servlet如何实现,它们都将起作用。
筛选器用于执行筛选任务,例如登录身份验证,审核来自网页的传入请求,转换,日志记录,压缩,加密和解密,输入验证等。
Servlet过滤器仅在Web层中使用,您不能在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/
虽然可以在侦听器中修改当前事件对象,但不能停止在侦听器中执行当前事件处理程序。您也无法从侦听器中清除事件队列。除了功能上的差异外,它们还旨在用于不同的目的。侦听器倾向于关注事件处理程序与模型之间的交互,而过滤器倾向于关注事件处理程序与控制器之间的交互。
资料来源:网页
您可以很容易地对这两者的英文含义有所了解。
过滤器用于过滤从Servlet传入/传出的内容/资源。另一方面,侦听器在那里,可以在Web应用程序发生某些事情(侦听)时执行一些相关的操作。