GenericServlet实现了三个接口,分别为:Servlet,ServletConfig,java.io.Serializable,与具体的议无关

 

源码与解析:

public abstract class GenericServlet
implements Servlet, ServletConfig, java.io.Serializable{

private transient ServletConfig config; //当譔对象序列化时,此变量的值不会包括在序列化的表示中.不知为何?

public GenericServlet(){}   //构造函数

public void destroy(){}   //实现Servlet接口的destroy方法

public String getInitParameter(String name) {    //实现了ServletConfig接口的getInitParameter,
return getServletConfig().getInitParameter(name);   返回变更名为name的value
}

public Enumeration getInitParameterNames() {    //实现了ServletConfig接口的getInitParameterNames
return getServletConfig().getInitParameterNames();   //返回一个Eumeration,包括所有的name
}

public ServletConfig getServletConfig() {    //实现Servlet接口的getServletConfig
return config;
}

public ServletContext getServletContext() {   //实现ServletConfig接口的getServletContext方法,
return getServletConfig().getServletContext();    //返一个ServletContext引用
}

public String getServletInfo() {    //实现Servle接口的getServletInfo
return "";     //返回一个字符串,包括Servlet对象的信息
}

public void init(ServletConfig config) throws ServletException {
this.config = config; //使当前Servlet对象与Servlet容器传入的ServletConfig对象关联
this.init();
}

public void init() throws ServletException {}  //子类可以重新实现该方法

public void log(String msg) {   //实现ServletContext接口的log(String msg)方法
getServletContext().log(getServletName() + ": "+ msg);   //把exception's stack trace and an explanatory error写到日志里边
}

public void log(String message, Throwable t) {
getServletContext().log(getServletName() + ": " + message, t);  //写可解释的信息与堆栈轨迹到异常类,然后写入Servlet容器的日志文件
}

public abstract void service(ServletRequest req, ServletResponse res)  //Servlet接口的service方法
throws ServletException, IOException;

public String getServletName() {   //实现ServletConfig接口的getServletName
return config.getServletName();
}

} 

 

 GenericServlet还有运用了装饰模式,

       装饰模式定义:动态结给一欲一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。

还有待研究。。。。。 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2010-05-25 12:35  ALVINZ  阅读(281)  评论(0)    收藏  举报