Servlet实例对象的生命周期

Servlet实例对象的生命周期

Servlet遵循严格的生命周期,在每个Servlet实例的生命中有三种类型的事件,这三种事件分别对应于由Servlet引擎所唤醒的三个方法:

  • init()。当Servlet第一次被装载时,Servlet引擎调用这个Servlet的init()方法,只调用一次。如果某个Sevlet需要特殊的初始化需要。那么Servlet编写人员可以重写该方法来执行初始化任务。这是一个可选的方法。如果某个Servlet不需要初始化,那么默认情况下将调用它父类的init方法。系统保证,在init方法成功完成以前,是不会调用Servlet去处理任何请求的
  • service()。这是Servlet最重要的方法,是真正处理请求的地方。对于每个请求,Servlet引擎将调用Servlet的service方法,并把Servlet请求对象和Servlet响应对象最为参数传递给它
  • 常驻内存
  • destroy()。这是相对于init的可选方法,当Servlet即将被卸载时由Servlet引擎来调用,这个方法用来清除并释放在init方法中所分配的资源。

###Servlet技术的要点:

  • 当前应用中的所有Servlet接口实现类的实例对象,只能由服务器负责创建,开发人不能不能手动创建

  • 默认情况下以单实例多线程的方式对外提供服务

  • Servlet实例一旦创建则常驻内存,只有当服务器资源不足而导致当前Servlet对象被调度或者服务器关闭时才会被销毁

  • 默认情况下,服务器接收到对于当前Servlet接口实现类的第一次请求时自动创建这个Servlet接口实现类的实例对象

    • 可以手动配置要求服务器在启动时自动创建某个Servlet接口实现类对象

##核心对象

API和SPI 分散关注

ServletConfig对象

对应的是Servlet的配置参数信息,由服务器提供对应的具体实现。具体实现是在服务器调用init方法时传入到Servlet实例中

public void init(ServletConfig config) throws ServletException;

config对象由服务器提供实现,并在服务器调用该方法时传入Servlet实例

public interface ServletConfig {
   
    public ServletContext getServletContext(); //用于获取Servlet上下文对象
    public String getInitParameter(String name);  //用于获取当前Servlet对象的配置参数
    public Enumeration<String> getInitParameterNames();//用于获取当前Servlet对象的所有配置参数的迭代器
}
Servlet的配置 web.xml
<servlet>
        <servlet-name>showServlet</servlet-name>
        <servlet-class>com.yan.action.ShowServlet</servlet-class>
    <!-- 初始化参数 -->
        <init-param>
            <param-name>name</param-name>
            <param-value>yanjun</param-value>
        </init-param>
        <init-param>
            <param-name>age</param-name>
            <param-value>123</param-value>
        </init-param>
</servlet>

在servlet中获取初始化参数

init方法定义

init(ServletConfig)是Servlet接口中定义的方法,需要自行编程处理config对象,因为Servlet接口中还有一个方法时和config对象相关的public ServletConfig getServletConfig();

public class MyServlet implements Servlet{
   
	private ServletConfig config;
	public void init(ServletConfig config){
   
		this.config=config;
	}
	public ServletConfig getServletConfig(){
   
		return config;
	}
	......
}

实际上HttpServlet已经提供了以上的实现

public abstract class HttpServlet extends GenericServlet {
   
	private transient ServletConfig config;  //父类提供
	
	public void init(ServletConfig config) throws ServletException {
   
		this.config = config;
		this.init();   //提供一个扩展点
    }
    public void init() throws ServletException {
   

    }

自定义Servlet接收初始化配置参数

    @Override
    public void init() throws ServletException {
   
        //对应web.xml中init-param标签中定义的参数
        String ss = this
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值