Servlet的生命周期

Servlet的生命周期可被定义为从创建直到毁灭的整个过程。因为Servlet是运行在Servlet容器中的,其生命周期由Servlet容器管理,Servlet的生命周期通过javax.servlet.Servlet接口中的init()、service()和destroy()方法来表示。方法如下:

  • 构造方法: 创建servlet对象的时候调用。
  • init ():Servlet 通过调用 init () 方法进行初始化。
  • service():Servlet 调用 service() 方法来处理客户端的请求。
  • destroy() :Servlet 通过调用 destroy() 方法终止(结束)。
现在我正式讲一下Servlet的生命周期
  1. 加载和实例化
      默认情况下Servlet的加载是Servlet容器负责加载和实例化Servlet的,当Servlet容器启动时,或者在容器检测到需要这个Servlet来响应第一个请求时,创建Servlet实例。当Servlet容器启动后,它必须要知道所需的Servlet类在什么位置,Servlet容器可以从本地文件系统、远程文件系统或者其他的网络服务中通过类加载器加载Servlet类,成功加载后,容器创建Servlet的实例。因为容器是通过Java的反射API来创建Servlet实例,调用的是Servlet的默认构造方法(即不带参数的构造方法),所以我们在编写Servlet类的时候,不应该提供带参数的构造方法。但是使用默认的加载方式会出现一个问题,如果servlet的构造方法或init方法中执行了比较多的逻辑代码,那么将会导致用户第一次访问sevrlet的时候比较慢。解决办法将Servlet创建对象的时机提到加载Web项目的时候。方法如下代码:
	<servlet>
	    <servlet-name>Test01</servlet-name>
	    <servlet-class>test.Test01</servlet-class>
	    <load-on-startup>1</load-on-startup>	 <!-- 数字必须是大于0的整数,数值越大创建的优先级越低 -->
	</servlet>
  1. 初始化Servlet
      在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象。初始化的目的是为了让Servlet对象在处理客户端请求前完成一些初始化的工作,如建立数据库的连接,获取配置信息等。对于每一个Servlet实例,init()方法只被调用一次。在初始化期间,Servlet实例可以使用容器为它准备的ServletConfig对象从Web应用程序的配置信息(在web.xml中配置)中获取初始化的参数信息。在初始化期间,如果发生错误,Servlet实例可以抛出ServletException异常或者UnavailableException异常来通知容器。
  • 配置Servlet的初始化参数?
 	<!-- 设置参数 -->
	<init-param>
      <param-name>猴子</param-name>
      <param-value>500岁</param-value>
    </init-param>
    <init-param>
      <param-name>八戒</param-name>
      <param-value>800岁</param-value>
    </init-param>
    <init-param>
      <param-name>和尚</param-name>
      <param-value>1200岁</param-value>
    </init-param>
  • 获取Servlet的初始化参数?
	String name = getInitParameter("猴子");		//通过param-name值获取param-value
	System.out.println(name);					//在控制台输出得到的value
	Enumeration<String> ems = getInitParameterNames();		//获取所有的参数名
	while(ems.hasMoreElements()){
		String str = ems.nextElement();
		System.out.println(str+"========醒目作用==============");
		System.out.println(getInitParameter(str)+"==========醒目作用===============");
	}

在Servlet的生命周期中,init()方法只执行一次。证明servlet对象在tomcat是单实例的。
3.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值