Servlet 中有过滤器和监听器功能。我想知道 Filter 和 Listener 之间的确切区别。
原文由 kandarp 发布,翻译遵循 CC BY-SA 4.0 许可协议
Servlet 中有过滤器和监听器功能。我想知道 Filter 和 Listener 之间的确切区别。
原文由 kandarp 发布,翻译遵循 CC BY-SA 4.0 许可协议
过滤器用于预处理和后处理请求。查看您的 tomcat/jboss/其他容器 javadoc 中的 javax.servlet.Filter
。
侦听器就像可以附加到应用程序服务器中的事件的触发器(我们在这里使用术语容器)。使用侦听器,您可以跟踪应用程序级别、会话级别、生命周期更改、属性更改等。实现的接口是 javax.servlet.Listener
接口。
根据下面@fnt 的回复,让我试着澄清一些。侦听器针对生命周期更改,而无需收到客户端请求。因此对于一个客户端请求,在处理请求之前可能会发生更多的生命周期事件。示例:您想记录所有超时的会话。请注意,SesionTimeout 是一个生命周期事件,无需用户执行任何操作即可发生。对于这种情况,侦听器将是合适的。
关于请求到达时记录的问题。没有新请求到等效侦听器(读取生命周期事件)事件的直接映射。因此,对于每个传入的请求,如果你想记录一些东西,我认为 Filter 是正确的选择。
这个来自 Oracle 的资料应该能够阐明更多的 Filters 和 Listeners
2021 年 3 月 17 日更新 评论中出现了一些反复。试图澄清。根据定义,过滤器将始终被调用。因此,如果我需要始终记录请求,将其保留在过滤器中将确保我获得日志记录。如果我把它放在监听器中,我必须确保日志代码块在所有可能的监听器中执行。这两种方法都会为您提供所需的日志记录,使用过滤器会更有效率。
HTH
原文由 Ayusman 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
Servlet Filter用于监听客户端对servlet的请求和响应,或修改请求和响应,或审计和记录日志。
Servlet Listener 用于监听 Web 容器中的事件,例如当您创建会话或在会话中放置属性时,或者如果您在另一个容器中钝化和激活,要订阅这些事件,您可以配置监听器
web.xml
,例如HttpSessionListener
。