1,GenericServlet概述
GenericServlet是Servlet接口的實現類,我們可以通過繼承GenericServlet來編寫自己的Servlet。
下面是GenericServlet類的源代碼:GenericServlet.java
public abstract class GenericServlet implements Servlet, ServletConfig,
java.io.Serializable {
private static final long serialVersionUID = 1L;
private transient ServletConfig config;
public GenericServlet() {}
@Override
public void destroy() {}
@Override
public String getInitParameter(String name) {
return getServletConfig().getInitParameter(name);
}
@Override
public Enumeration<String> getInitParameterNames() {
return getServletConfig().getInitParameterNames();
}
@Override
public ServletConfig getServletConfig() {
return config;
}
@Override
public ServletContext getServletContext() {
return getServletConfig().getServletContext();
}
@Override
public String getServletInfo() {
return "";
}
@Override
/*
實現了Servlet的init(ServletConfig)方法,把參數config賦給了
本類的成員config,然後再調用本類自己的無參的init()方法。
*/
public void init (ServletConfig config) throws ServletException {
this.config = config;
this.init();
}
/*
這個方法是GenericServlet自己的方法,而不是從Servlet繼承下來的。當我們
自定義Servlet時,如果想完成初始化作用就不要再重複init(ServletConfig)方
法了,而是應該去重寫init()方法。因爲在GenericServlet中的init(ServletConfig)
方法中保存了ServletConfig對象,如果覆蓋了保存ServletConfig的代碼,那麼就不
能再使用ServletConfig了。
*/
public void init () throws ServletException {}
public void log(String msg) {
getServletContext().log(getServletName() + ": " + msg);
}
public void log(String message, Throwable t) {
getServletContext().log(getServletName() + ": " + message, t);
}
@Override
public abstract void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException;
@Override
public String getServletName() {
return config.getServletName();
}
}
2 GenericServlet的init()方法
在GenericServlet中,定義了一個ServletConfig config實例變量,並在init(ServletConfig)方法中把參數ServletConfig賦給了實例變量。然後在該類的很多方法中使用了實例變量config。 如果子類覆蓋了GenericServlet的init(StringConfig)方法this.config=config這一條語句就 會被覆蓋了,也就是說GenericServlet的實例變量config的值爲null,那麼所有依賴config的方法都不能使 用了。如果真的希望完成一些初始化操作,那麼去覆蓋GenericServlet提供的init()方法,它是沒有參數 的init()方法,它會init(ServletConfig)方法中被調用。
3 實現了ServletConfig接口
GenericServlet還實現了ServletConfig接口,所以可以直接調用getInitParameter()、getServletContext()等ServletConfig的方法。