Servlet的init方法

这几天粗粗的看了下spring mvc的源码 这里把对Servlet的一点知识mark下 以后方便寻找

init方法是在Servlet实例化之后执行的,并且只执行一次。
.先说init(ServletConfig)中参数ServletConfig,代表的是配置信息。即在web.xml中配置的信息,比如:

    <servlet>
        <servlet-name>RDSDispatchServlet</servlet-name>
<display-name>RDSDispatchServlet</display-name>
        <servlet-class>flex.rds.server.servlet.FrontEndServlet</servlet-class>
<init-param>
<param-name>useAppserverSecurity</param-name>
<param-value>true</param-value>
</init-param>        
        <load-on-startup>10</load-on-startup>
    </servlet>
   在程序中可以用this.getServletConfig()方法得到ServletConfig的实例,然后用ServletConfig的相应方法 可以得到ServletConfig的名字(getServletName)和配置参数的名字(getInitParameter("name"))或者 名字枚举(getInitParameterNames()),并且通过参数名字得到相应的参数值。具体方法参见API。

二.再说说init方法,从源码中我们不难发现:Servlet接口里面只有init(ServletConfig),这是供tomcat调用的。GenericServlet类里面有成员变量ServletConfig,init(ServletConfig)方法和init()方法:

                        private transient ServletConfig config;

                        public void init(ServletConfig config) throws ServletException{
                            this.config=config;
                            this.init();
                        }

                        public void init() throws ServletException{

                        }

现在一切都很明了了,当容器(tomcat)帮忙调用init(ServletConfig config)并且给传过来一个参数config,这个方法把参数对象的引用指向类的成员变量this.config,并且调用类的 this.init()方法。如果我们在写Servlet类时只要重写init(ServletConfig config)就可以了,但是init()不就成了多余的了吗?实际上init()方法是为了防止程序员在写Servlet类重写 init(ServletConfig config)时忘记写super.init(ServletConfig config),这样就容易造成出现空指针异常。而这就要求我们最好不要重写init(ServletConfig config)。


下面转一篇文章:

转自:http://blog.csdn.net/jay198746/article/details/4539432

Servlet专题中的视频07



在Servlet的GenericServleta类中有两个init()方法,两个方法在使用的时候要注意:


    如果我们直接通过实现Servlet接口来编写一个Servlet类,就需要实现 Servlet接口中定义的5种方法,为了简化Servlet的编写,在javax.servlet包中,给我们提供了一个抽象的类 GenericServlet,它提供了除service()方法外的其他4种方法的简单实现。GenericServlet类定义了一个通用的、不依赖于具体协议的Servlet,它实现了Servlet接口和ServletConfig接口。

如果我们要编写一个通用的Servlet,只需要从GenericServlet类继承,并实现其中的抽象方法service()。

GenericServlet类中,提供了两种重载的init()方法 (Tomcat中的源代码 ):


·public void init(ServletConfig config)throws ServletException{

this.config = config;

this.init(); 
}

·public void init()throws ServletException{


}

第一种init()方法是Servlet接口中init()方法的实现。这种方法中,首先将ServletConfig对象保存在一个transient实例变量中,然后调用第二种不带参数的init()方法。


通常我们在编写集成自GenericServlet的Servlet类时,只需重写 第一种不带参数的init() 方法就可以了。如果覆盖了第二种init()方法,那么应该在子类的该方法中,包含一句super.init(config) 代码调用。(
 super.init(config)即 GenericServlet .init(config) ,即 this.config = config和 this.init()两句代码,如果没有这两句代码,由于Servlet中有这么一句代码:this.getServletConfig().getServletName(),getServletConfig()中的代码是return config , 要是程序员改写含参数的init方法时,要是忘了super.init(config) ,那么 config为空 ,则 getServletName()为空 ,就会出现空指针异常 ,所以为了防止这个错误,程序员们一般改写init()这个方法,注:Tomcat调用的是 init(ServletConfig config)这个方法。 )

 

尚学堂PPT总结要点:

init

幻灯片 18

³init(servletconfig config)
²this.config = config
²init();
²重写必须得 super.init(config)
±不然不能使用 this.getServletConfig
±当然也就不能用 getInitParameter();
³我们只需要重写 init();

 



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/icecoldheart/archive/2008/10/08/3032245.aspx

Servlet专题中的视频07



在Servlet的GenericServleta类中有两个init()方法,两个方法在使用的时候要注意:


    如果我们直接通过实现Servlet接口来编写一个Servlet类,就需要实现 Servlet接口中定义的5种方法,为了简化Servlet的编写,在javax.servlet包中,给我们提供了一个抽象的类 GenericServlet,它提供了除service()方法外的其他4种方法的简单实现。GenericServlet类定义了一个通用的、不依赖于具体协议的Servlet,它实现了Servlet接口和ServletConfig接口。

如果我们要编写一个通用的Servlet,只需要从GenericServlet类继承,并实现其中的抽象方法service()。

GenericServlet类中,提供了两种重载的init()方法 (Tomcat中的源代码 ):


·public void init(ServletConfig config)throws ServletException{

this.config = config;

this.init(); 
}

·public void init()throws ServletException{


}

第一种init()方法是Servlet接口中init()方法的实现。这种方法中,首先将ServletConfig对象保存在一个transient实例变量中,然后调用第二种不带参数的init()方法。


通常我们在编写集成自GenericServlet的Servlet类时,只需重写 第一种不带参数的init() 方法就可以了。如果覆盖了第二种init()方法,那么应该在子类的该方法中,包含一句super.init(config) 代码调用。(
 super.init(config)即 GenericServlet .init(config) ,即 this.config = config和 this.init()两句代码,如果没有这两句代码,由于Servlet中有这么一句代码:this.getServletConfig().getServletName(),getServletConfig()中的代码是return config , 要是程序员改写含参数的init方法时,要是忘了super.init(config) ,那么 config为空 ,则 getServletName()为空 ,就会出现空指针异常 ,所以为了防止这个错误,程序员们一般改写init()这个方法,注:Tomcat调用的是 init(ServletConfig config)这个方法。 )

 

尚学堂PPT总结要点:

init

幻灯片 18

³init(servletconfig config)
²this.config = config
²init();
²重写必须得 super.init(config)
±不然不能使用 this.getServletConfig
±当然也就不能用 getInitParameter();
³我们只需要重写 init();

 



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/icecoldheart/archive/2008/10/08/3032245.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值