Servlet的init注意點

itpabcrj發表於2010-06-05

在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)這個方法。 )

init(servletconfig config)
this.config = config
init();
重寫必須得 super.init(config)
不然不能使用 this.getServletConfig
當然也就不能用 getInitParameter();
我們只需要重寫 init();

如:

public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
super.init(config);
String num=config.getInitParameter("num");
System.out.println("初始化數為:"+num);
}

()

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24042997/viewspace-1034198/,如需轉載,請註明出處,否則將追究法律責任。

相關文章