GenericServlet实现了三个接口,分别为: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还有运用了装饰模式,
装饰模式定义:动态结给一欲一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。
还有待研究。。。。。
浙公网安备 33010602011771号