Servlet作为JavaEE必须掌握的内容,Struts2通过使用Filter的功能实现了一个MVC的框架。因此掌握这Servlet以及Filter的生命周期显得非常重要。
1. Servlet的生命周期
虽然通过使用IDE工具快速创建了Servlet,但是很多人没有弄明白这个东西到底是怎么什么时候实例化或者销毁的,丢开一阵子后很快就忘记服务器在后台到底做了什么。因此了解Servlet的生命周期非常必要。
Servlet是JavaEE标准下的一个接口,该接口抽象出了以下几个方法:
| 返回值 | 方法名称 | 作用 |
void |
init(ServletConfig config) |
初始化Servlet类实例 |
ServletConfig |
getServletConfig() |
获取含有初始化参数的Servlet配置文件 |
void |
service(ServletRequest req, ServletResponse res) |
调用Servlet的实例方法 |
void |
getServletInfo() |
获取Servlet的信息,包含版本、作者、版权等 |
void |
destroy() |
销毁Servlet类型内容 |
HttpServlet类基本实现了大部分Servlet接口的内容,目前使用IDE创建一个Servlet基本都是集成HttpServlet进行实现的。
回到Servlet生命周期。当用户发出了一个请求,tomcat这类服务器中间件是如何实例化用户编写的Servlet呢?这要从配置文件说起。
① 当用户在浏览器内输入请求,服务器中间件会根据web.xml去查找需要实例化的Servlet。如下:
1 <servlet> 2 <!-- ②根据servletName找到对应的Servlet,这个名称必须和mapping里面的名称一样 --> 3 <servlet-name>RequestServlet</servlet-name> 4 <!-- ③找到代码中需要实例化的具体对象位置,实例化对象 --> 5 <servlet-class>com.scl.controler.RequestServlet</servlet-class> 6 </servlet> 7 8 <servlet-mapping> 9 <servlet-name>RequestServlet</servlet-name> 10 <!--①中间件匹配url内的链接 --> 11 <url-pattern>/requestmap</url-pattern> 12 </servlet-mapping>