Java Web技术(init()与init(ServletConfig)的区别)
2013-04-18 10:58
363 查看
init方法是在Servlet实例化之后执行的,并且只执行一次。
先说init(ServletConfig)中参数ServletConfig,代表的是配置信息。即在web.xml中配置的信息。
在程序中可以用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()方法。实际上init()方法是为了防止程序员在写Servlet类重写 init(ServletConfig
config)时忘记写super.init(ServletConfig config),这样就容易造成出现空指针异常。而这就要求我们最好不要重写init(ServletConfig config),而要重写init()方法,就可以不写super。
总结:在init(ServletConfig)方法调用后,容器将调用无参数的init()方法,之后Servlet就被初始化了。重复初始化一个对象是没有意义的,因此在Servlet生命周期中init()方法仅被调用一次。
先说init(ServletConfig)中参数ServletConfig,代表的是配置信息。即在web.xml中配置的信息。
在程序中可以用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()方法。实际上init()方法是为了防止程序员在写Servlet类重写 init(ServletConfig
config)时忘记写super.init(ServletConfig config),这样就容易造成出现空指针异常。而这就要求我们最好不要重写init(ServletConfig config),而要重写init()方法,就可以不写super。
总结:在init(ServletConfig)方法调用后,容器将调用无参数的init()方法,之后Servlet就被初始化了。重复初始化一个对象是没有意义的,因此在Servlet生命周期中init()方法仅被调用一次。
相关文章推荐
- JavaWeb---通过ServletConfig获取Servlet的初始化参数
- Spring框架中context-param与servlet中init-param的contextConfigLocation的区别
- java_web学习第二天(ServletConfig和ServletContext对象的作用和使用)
- SpringMVC_v02中的总结(web项目、java项目中引入Config.properties,加载hibernate映射文件的配置的区别)
- JavaWeb 之 servletConfig,servletContext
- Java Web开发中的Servlet、jsp区别联系
- Servlet---JavaWeb技术的核心基础,JavaWeb框架的基石(一)
- ServletRequest中的getAttribute()和getParameter()以及ServletConfig中的getInitParameter()方法的区别
- Java Web-w2:JSP和SERVLET区别
- 深入分析JavaWeb Item6 — servletConfig 与servletContext详
- JavaWeb 之 servletConfig,servletContext
- javaweb基础学习(一)<ServletConfig与ServletContext对象详解>
- Spring框架中context-param与servlet中init-param的contextConfigLocation的区别
- JAVA_WEB项目(结合Servlet+jsp+ckEditor编辑器+jquery easyui技术)实现新闻发布管理系统第二篇:登陆和注销功能实现
- JAVA_WEB项目(结合Servlet+jsp+ckEditor编辑器+jquery easyui技术)实现新闻发布管理系统第三篇:新闻发布,新闻修改,新闻删除功能的实现
- getServletContext和getServletConfig都有getInitParameter的方法 区别
- (转)JavaWeb学习之Servlet(四)----ServletConfig获取配置信息、ServletContext的应用
- JAVA_WEB项目(结合Servlet+jsp+ckEditor编辑器+jquery easyui技术)实现新闻发布管理系统第四篇:前台首页,新闻分类(体育新闻,科技新闻等),新闻列表分页的实现
- servlet中配置文件web.xml中的参数context-param和init-param区别
- 【《深入解析Java Web技术内幕》学习思维导图】第9章 Servlet工作原理解析