`
drilling_liny
  • 浏览: 2860 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

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方法只会被调用一次。
 

 

 

 

 

 

 

 

  • 大小: 90.1 KB
  • 大小: 9.9 KB
  • 大小: 4.8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics