Servlet的生命周期和自动加载servlet

一、请求响应过程图

二、生命周期各个阶段

1、创建和初始化阶段


当客户端向Servlet容器发出HTTP请求要求访问Servlet时,Servlet容器首先会解析请求,检查内存中是否已经有了该Servlet对象(有可能随着应用的启动而创建),如果有直接使用该Servlet对象,如果没有就创建Servlet实例对象,然后通过调用init()方法实现Servlet的初始化工作。需要注意的是,在Servlet的整个生命周期内,它的init()方法只被调用一次。

2、运行阶段


这是Servlet生命周期中最重要的阶段,在这个阶段,Servlet容器会为这个请求创建代表HTTP请求的ServletRequest对象和代表HTTP响应的ServletResponse对象,然后将它们作为参数传递给Servlet的service()方法。service()方法从ServletRequest对象中获得客户请求信息并处理该请求,通过ServletResponse对象生成响应结果。在Servlet的整个生命周期内,对于Servlet的每一次访问请求,Servlet容器都会调用一次Servlet的service()方法,并且创建新的ServletRequest和ServletResponse对象,也就是说,service()方法在Servlet的整个生命周期中会被调用多次。

3、销毁阶段


当服务器关闭或web应用被移除出容器时,Servlet随着web应用的销毁而销毁。在销毁Servlet之前,Servlet容器会调用Servlet的destroy()方法,以便让Servlet对象释放它所占用的资源。在Servlet的整个生命周期中,destroy()方法也只被调用一次。需要注意的是,Servlet对象一旦创建就会驻留在内存中等待客户端的访问,直到服务器关闭,或web应用被移除出容器时Servlet对象才会销毁。

三、演示Servlet生命周期方法的执行

1、拷贝上面的Servlet,改为HelloWorldServlet,增加生命周期方法

package cn.itcast.firstapp.servlet;
 	import javax.servlet.*;
 	public class HelloWorldServlet extends GenericServlet {
 		public void init(ServletConfig config) throws ServletException {
			System.out.println("init methed is called");
		}
 	public void service(ServletRequest request, ServletResponse response) throws ServletException {
 			System.out.println("Hello World");
 		}
 		public void destroy() {
 			System.out.println("destroy method is called");
 		}

 	}

2、编译HelloWorldServlet.java

3、拷贝HelloWorldServlet.class到tomcat,位置同上

4、在web.xml配置HelloWorldServlet

    <servlet>
        <servlet-name>HelloWorldServlet</servlet-name>
        <servlet-class>cn.itcast.firstapp.servlet.HelloWorldServlet</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>HelloWorldServlet</servlet-name>
        <url-pattern>/HelloWorldServlet</url-pattern>
    </servlet-mapping>

5、重新启动tomcat 然后发送如下请求

http://localhost:8080/chapter03/HelloWorldServlet

刷新浏览器,多次访问

 

打开tomcat的管理应用平台,停止chapter03

四、自动加载servlet

在实际开发时,有时候会希望某些Servlet可以在Tomcat启动时随即启动。例如,当启动一个Web项目时,首先需要对数据库信息进行初始化。这时,只需要使用web.xml文件中<load-on-startup>元素,将初始化数据库的Servlet配置为随着web应用启动而启动的Servlet即可。
<load-on-startup>元素是<servlet>元素的一个子元素,它用于指定Servlet被加载的时机和顺序。在<load-on-startup>元素中,设置的值必须是一个整数。如果这个值是一个负数,或者没有设定这个元素,Servlet容器将在客户端首次请求这个Servlet时加载它;如果这个值是正整数或0,Servlet容器将在Web应用启动时加载并初始化Servlet,并且<load-on-startup>的值越小,它对应的Servlet就越先被加载。

在web.xml中增加<load-on-startup>元素,如下:

<servlet>
        <servlet-name>HelloWorldServlet</servlet-name>
        <servlet-class>cn.itcast.firstapp.servlet.HelloWorldServlet</servlet-class>
        <!--设置servlet在web应用启动时初始化-->
        <load-on-startup>1</load-on-startup>
    </servlet>

 再重新启动tomcat,就能看到初始化方法被调用,如下:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值