servlet生命周期和filter生命周期之间的差异

servlet和filter生命周期之间有什么区别吗?

不,servlet和filter:

  • 在上下文开始时被实例化(一次)
  • 调用init(..)方法
  • 他们处理每个请求 – 首先它通过所有filter,然后到达servlet
  • 当上下文被销毁时(即当您的容器停止,或者您的应用程序从管理器控制台取消部署时),将调用destroy(..)方法

到目前为止,我也想知道这些差异。 我创建了一个Web项目来观察它们的生命周期。 它可以检查

 http://dntuan-java-workspace.googlecode.com/svn/trunk/simple-web 

在tomcat上部署之后,您可以从控制台观察日志,以查看在上下文启动之前初始化filter。 而servlet仅在发出请求时被初始化(例如http://localhost:8080/simple-web/servlet/life.jsp


来自JSR-000315 JavaTM Servlet 3.0的 更多信息

2.3.1加载和实例化

servlet容器负责加载和实例化servlet。 加载和实例化可以在容器启动时发生,也可以延迟,直到容器确定需要servlet来处理请求。

6.2.1filter生命周期

部署Web应用程序之后,在请求导致容器访问Web资源之前,容器必须找到必须应用于Web资源的筛选器列表,如下所述。 容器必须确保它已为列表中的每个filter实例化了相应类的filter,并调用其init(FilterConfig config)方法。