servlet_2

 在servlet_1中讲到过,Servlet的框架是由两个Java包组成:

– javax.servlet包:定义了所有的Servlet类都必须实现或扩展的通用接口和类。

– javax.servlet.http包:定义了采用HTTP协议通信的HttpServlet类。

 

Servlet的生命周期

·Servlet的框架的核心是javax.servlet.Servlet接口,所有的Servlet都必须实现这一接口。在Servlet接口中定义了五个方法,其中有三个方法代表了Servlet的生命周期:

– init方法:负责初始化Servlet对象;

– service方法:负责响应客户的请求;

– destroy方法:当Servlet对象退出生命周期时,负责释放占用的资源。

 

·Servlet 的生命周期可以分为三个阶段:(其后为对应阶段Servlet容器调用的方法)

– 初始化阶段,init()

– 响应客户请求阶段 ,service()

– 终止阶段,destroy()

 

 初始化阶段

·在下列时刻Servlet容器装载Servlet:

– 在Servlet容器启动后,客户首次向 Servlet 发出请求

– Servlet的类文件被更新后,重新装载Servlet

– Servlet容器启动时自动装载某些Servlet

 

·Servlet被装载后,Servlet容器创建一个 Servlet 实例并且调用 Servlet 的init()方法进行初始化。在Servlet的整个生命周期中,init方法只会被调用一次。

 

 

验证初始化:

(1)在Servlet容器启动后,客户首次向 Servlet 发出请求。

创建一个测试用servlet:

public class initServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.print("doGet invoked");
	}
	
	@Override
	public void init() throws ServletException {
		System.out.print("init invoked");
	}
}

 

 开启服务器(本次测试使用tomcat服务器),打开浏览器,第一次访问该initServlet,得到结果:

从结果可以看到,init方法只在Servlet转载的时候调用过一次,在服务器重启或者更新之前都不会执行第二次。Servlet的类文件被更新后,重新装载Servlet的初始化情况与此类似。以上实验涉及道德两种情况均是需要服务器接收到客户端的请求,才对Servlet进行加载的。

 

(2)Servlet容器启动时自动装载某些Servlet

在上面实验的基础之上,修改web项目的web.xml文件。找到配置initServlet的标签处,并添<load-on-startup>元素。

 

<servlet>
    <servlet-name>initServlet</servlet-name>
    <servlet-     class>com.gmail.sillyli123456789.servlet.initServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<load-on-startup>元素表示在服务器启动的时候,自动加载指定的Servlet。其中的数字代表,当有多个Servlet需要被自动的加载时的先后顺序。

 

在服务器启动的过程中,可以看到:

 

打开浏览器,访问该initServlet,得到结果:

同时再一次证明了在Servlet的整个生命周期中,init方法只会被调用一次。
 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值