Servlet运行原理
当Tomcat服务器接收到一个HTTP请求时,Tomcar服务器会根据请求的内容,创建Servlet实例步骤如下:
1.用户在浏览地址栏中输入URL。
2.Tomcat服务器根据请求获取URL中需要的资源(/first)。
3.Tomcar服务器根据获取的"/first"与web.xml文件中的<servlet-mapping>元素下的<url-pattern> 元素的内容相匹配。
4.Tomcat服务器取出与<utl-pattern>同级的<servlet-name>元素中的内容值"firstServlet"
5.根据取出的"firstServlet"值与<servlet>元素下的<servlet-name>内容相匹配。
6.匹配完成后,Tomcat服务器实例化改Servlet。
Servlet生命周期
Servlet生命周期是由Servlet的容器来控制的,Servlet生命周期分为4个阶段:加载并实例化、初始化、请求处理和销毁。
可以通过javax.servlet.Servlet接口中的init()、service()和destroy()这些API来表示,所有Servlet必须直接或间接的实现GenericServlet或HttpServlet抽象类。
1.加载并实例化
Servlet容器负责加载和实例化Servlet。当Servlet容器启动时,或者在容器监测到需要这个Servlet来响应第一个请求时,创建Servlet实例。当Servlet容器启动后,Servlet通过类加载Servlet类,加载完成后再创建一个Servlet对象来实例化。
2.初始化
在Servlet实例化之后,容器将调用init()方法,并传递实现ServletConfig接口的对象。在init()方法中,Servlet可以部署描述符中读取配置参数,或者执行任何其他一次性活动。在Servlet的整个生命周期内,init()方法只被调用一次。Servlet仅在第一次被访问时进入初始化阶段,也可以在web.xml文件对该Servlet配置。
3.请求处理
当Servlet初始化后,容器就可以准备处理客户端了。当容器收到对Servlet的请求,就调动Servlet的servlet()方法,并把请求和响应对象作为参数传递。当进行的请求到来时,多个service()方法能够同时运行在独立的线程中。service()方法检查HTTP请求类型(GET、POST、PUT以及DELETE等),并在适当的时侯调用doGet()、doPost()、doPut()以及doDelete()等方法。
4.销毁
一旦Servlet容器检测到一个Servlet要被写在,这可能是因为要回收资源或者因为它正在被关闭,容器会在所有Servlet的service()线程之后,调用Servlet的destroy()方法。然后,Servlet就可以进行无用存储单元收集清理。这样Servlet对象就销毁了。这4个阶段共同决定了Servlet的生命周期。
init() --> service() --> doGet()|doPost()|doDelete()|doPut() --> destroy()