public class Test extends HttpServlet 

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

.................. 

super.init(config);  //问题是这个  
this.config = config;//既然 后面已经设置了 this.config 可以不用写super.init(config) 了吗  this 指的是Test 如果是已经赋值了 为什么还要 继承父类的 init(config) 方法  
写  super.init(config);  是有什么作用 
如果在 Test{ 
…… 
//没有 super.init(config);  可以用下面的吗 
  config。getServletConfig() //还是其他用法 
…… 
} 写  super.init(config);  是有什么作用  谢谢
public class Test extends HttpServlet 

ServletConfig config; 
public void init(ServletConfig config) throws ServletException { //super.init(config);  不写这个 
this.config = config; 
init();//写这个。可以吗 还要写上面的那个吗?  config 已经赋值了 难道还要赋值其他的吗? 

.................. 

 
 

解决方案 »

  1.   

    见 Web 开发 版相同问题我的答复,呵呵
      

  2.   

    在你的Servlet中调用父类的init()方法是为了让系统做它的初始化过程.
      

  3.   

    Test 里面的 this.config=config 只是自身的 赋值吗?而父类的config 没有赋值?
    调用
    super。init(config) 是给父类的config 赋值吗?
      

  4.   

    子类Test定义的方法init()是自己专有的方法,并不是重写父类的方法.super.init(config)调用父类的init()方法,与子类的init()方法是不一样的.
      

  5.   

    答:显然楼主的做法不是很规范.在设计Servlet时,规范的做法是:
    1)重写 
    public void init() throws ServletException 方法,不建议重写:public void init(ServletConfig config) 方法.
    2)要获取ServletConfig对象,随时使用:public ServletConfig getServletConfig()方法.
    3)原因:
    <A> 对于容器而言:只认识或调用public void init(ServletConfig config) 方法(这是Servlet接口中定义的方法)
    ,不认识或调用public void init() 方法(Servlet接口中没有定义这个方法)
    <B>因此:理论上程序员应该重写public void init(ServletConfig config) 方法.但由于重写该方法时,必须记住首先要调用:super.init(config); 但程序员经常会忘记这一点,为此,在GenericServlet类的设计中,专门加上了一个:public void init() 方法,程序员只要自己任意重写这个方法主可以了(即:完全不必再忘记什么:super.init(....);了 )
    <C>那么:这两人方法之间是什么关系?见代码我加的注解你就明白了
    关系如下:(代码说话) public void init(ServletConfig config) throws ServletException {
    //这个方法你就不用再操心了,由容器自己自动去调用它.这样:程序员就不用再去重写这个方法了,只管重写init() 
    this.config = config;
    init();//自动调用init() 
        }
     public void init() throws ServletException {
    /* 你自己任意重写的代码 */
        }