Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29954363
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: Java

2010-03-29 23:40:31

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

                                
                                    age
                                    25
                                

                        

   在程序中可以用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()方法,就可以不写super。Servlet,你真是绕死人不偿命!
阅读(791) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~