servlet 生命周期和过滤器生命周期之间的区别
Posted
技术标签:
【中文标题】servlet 生命周期和过滤器生命周期之间的区别【英文标题】:difference between servlet lifecycle and filter lifecycle 【发布时间】:2011-04-16 17:06:14 【问题描述】:servlet 和过滤器的生命周期有什么区别吗?
【问题讨论】:
【参考方案1】:不,一个 servlet 和一个过滤器:
在上下文启动时实例化(一次)init(..)
方法被调用
他们处理每个请求 - 首先它通过所有过滤器,然后到达 servlet
当上下文被破坏时(即当你的容器停止,或者你的应用程序从管理控制台取消部署时),destroy(..)
方法被调用
【讨论】:
您的回答很好,但我认为它们的实例化时间有些不同。请检查我的答案:D。无论如何+1为您的答案:D【参考方案2】:到目前为止,我还想知道这些差异。我创建了一个 Web 项目来观察它们的生命周期。可以在
http://dntuan-java-workspace.googlecode.com/svn/trunk/simple-web
一旦它部署在 tomcat 上,您可以从控制台观察日志以查看过滤器是否在 在上下文启动之前初始化。而 servlet 仅在 发出请求 时初始化(例如 http://localhost:8080/simple-web/servlet/life.jsp
)
更多信息来自JSR-000315 JavaTM Servlet 3.0:
2.3.1 加载和实例化
servlet 容器负责加载和实例化 小服务程序。容器的加载和实例化可以发生 启动,或者延迟到容器确定 servlet 是 需要为请求提供服务。
6.2.1 过滤器生命周期
在部署 Web 应用程序之后,在请求导致之前 容器要访问 Web 资源,容器必须找到 必须按所述应用于 Web 资源的过滤器列表 以下。容器必须确保它已经实例化了一个过滤器 列表中每个过滤器的适当类,并将其称为 init(FilterConfig config)方法。
【讨论】:
以上是关于servlet 生命周期和过滤器生命周期之间的区别的主要内容,如果未能解决你的问题,请参考以下文章