Servlet的init方法
2014-08-15 10:09
399 查看
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)。
一.先说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)。
相关文章推荐
- dwr运行时出现Servlet.init() for servlet dwr-invoker threw exception的解决方法
- Servlet中的两个init()方法
- Servlet的init()方法和service()方法的区别是什么
- Servlet中的两个init()方法
- java.Servlet.GenericServlet中为什么有两个init方法
- Servlet中的两个init()方法
- Servlet的init方法
- ServletRequest中的getAttribute()和getParameter()以及ServletConfig中的getInitParameter()方法的区别
- 性能提升---在servlet的init()方法中缓存数据
- Servlet的init方法
- servlet之路(大学)---ServletConfig和ServletContext及init(…)方法
- servlet中的init() 方法
- Servlet的init()方法如何才会在服务器启动时执行
- servlet init 方法
- getServletContext和getServletConfig都有getInitParameter的方法 区别
- java.Servlet.GenericServlet中有两个init方法
- 关于javax.servlet.Servlet接口的init方法和destroy方法
- Servlet详解之两个init方法的作用
- Servlet的init方法
- 关于servlet的init方法说明