什么是Servlet生命周期
- [x] Servlet容器是如何创建Servlet对象,如何为Servlet对象分配,准备资源,如何调用对应的方法来处理请求以及如何销毁Servlet对象的整个过程为Servlet的生命周期
生命周期的是个阶段
- [x] 阶段一:实例化
- 实例化阶段是Servlet生命周期的第一步,有Servlet容器调用Servlet的构造器创建一个具体的Servlet对象的过程;这个创建的时间可以是容器收到组件的请求之后进行创建,也可以在容器启动后立即创建;创建代码如下:
1.<servlet>
2. <servlet-name>Servlet</servlet-name>
3. <servlet-class>test/Servlet</servlet-class>
4. <load-on-startup>1</load-on-startup>
5.</servlet>
6.<servlet-mapping>
7. <servlet-name>Servlet</servlet-name>
8. <url-pattern>/*</url-pattern>
9.</servlet-mapping>
配置文件中的load-on-startup用于设置Servlet的创建时间,其中的值大于等于0时,表示容器启动时就会创建实例;当值小于0或者没有指定时,表示Servlet被请求时在创建,正数的值越小,优先级越高,启动时就会越被优先创建
- [x] 阶段二:初始化
- Servlet在被加载实例化之后,必须要初始化它,在初始化阶段,init()方法会被调用,这个方法在javax.servlet.Servlet接口中定义;ServletConfig类型的对象作为参数,ServletConfig对象由Servlet引擎负责创建,读取事先在web.xml文件中通过
配置的name-value值,一般情况下init方法是不需要编写的,因为GenericServlet提供了init方法的实现(注:init方法只被执行一次) - 初始化参数
1.<?xml version="1.0" encoding="UTF-8"?>
2.<web-app version="2.4"
3. xmlns="http://java.sun.com/xml/ns/j2ee"
4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5. xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
6. http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
7. <servlet>
8. <servlet-name>Servlet</servlet-name>
9. <servlet-class>test/Servlet</servlet-class>
10. <init-param>
11. <param-name>str</param-name>
12. <param-value>true</param-valule>
13. </init-param>
14. </servlet>
15. <servlet-mapping>
16. <servlet-name>Servlet</servlet-name>
17. <url-pattern>/*</url-pattern>
18. </servlet-mapping>
19.</web-app>
- 读取配置中的初始化方法
1.package test;
2.
3.import java.io.IOException;
4.
5.import javax.servlet.ServletConfig;
6.import javax.servlet.ServletException;
7.import javax.servlet.http.HttpServlet;
8.import javax.servlet.http.HttpServletRequest;
9.import javax.servlet.http.HttpServletResponse;
10.
11.public class Servlet extends HttpServlet{
12.
13. public void service(HttpServletRequest request,
14. HttpServletResponse response)
15. throws ServletException,IOException{
16. System.out.println("Servlet's service...");
17. ServletConfig config = getServletConfig();
18. String str = config.getInitParameter("str");
19. System.out.println("str:" + str);
20. }
21.}
阶段三:就绪
- [x] Servlet被初始化以后就处于能够响应请求的状态,对Servlet的请求由一个ServletRequest对象来表示,Servlet给出的响应由ServletResponse表示;当客户端有请求时,容器会将请求与响应给Servlet,以参数的形式传给service()方法,Servlet通过调用doGet(),doPost()方法来实现响应,doGet(),doPost()方法是由HttpServlet定义的,在没有编写者写方法时,调用会返回一个error信息,所以在每次定义Servlet时都必须去实现doGet(),doPost()方法。
阶段四:销毁
- Servlet容器在销毁Servlet对象时会调用destroy方法来释放资源,一般情况下Servlet容器停止或者重新启动都会引起销毁Servlet对象的动作;Servlet容器有自己管理Servlet对象的规则,整个生命周期并不需要人为进行干预