/**
* <p>标题: GenericServlet</p>
* <p>
* 功能描述:为了简化Servlet的编写,在javax.servlet包中提供了一个抽象的类GenericServlet,
* 它给出了除service()方法外的其他4个方法的简单实现。GenericServlet类定义了一个通用的、不依赖于具体协议的Servlet,
* 它实现了Servlet接口和ServletConfig接口。
* 如果我们要编写一个通用的Servlet,只需要从GenericServlet类继承,并实现其中的抽象方法service()。
* </p>
* <p>创建日期: 2016年1月18日 下午3:19:44</p>
* <p>作者: 年华</p>
* <p>版本: 1.0</p>
*/
public abstract class GenericServlet implements Servlet, ServletConfig, Serializable {
private static final long serialVersionUID = 1L;
private static final String LSTRING_FILE = "javax.servlet.LocalStrings";
private static ResourceBundle lStrings = ResourceBundle.getBundle("javax.servlet.LocalStrings");
private transient ServletConfig config;
public void destroy() {
}
//返回名字为name的初始化参数的值,初始化参数在web.xml配置文件中进行配置。如果参数不存在,这个方法将返回null。背后由ServletConfig得来
public String getInitParameter(String name) {
ServletConfig sc = getServletConfig();
if (sc == null) {
throw new IllegalStateException(lStrings.getString("err.servlet_config_not_initialized"));
}
return sc.getInitParameter(name);
}
//返回Servlet所有初始化参数的名字的枚举集合。如果Servlet没有初始化参数,这个方法将返回一个空的枚举集合。背后由ServletConfig得来
public Enumeration<String> getInitParameterNames() {
ServletConfig sc = getServletConfig();
if (sc == null) {
throw new IllegalStateException(lStrings.getString("err.servlet_config_not_initialized"));
}
return sc.getInitParameterNames();
}
public ServletConfig getServletConfig() {
return this.config;
}
//返回Servlet上下文对象的引用,背后由ServletConfig得来。
public ServletContext getServletContext() {
ServletConfig sc = getServletConfig();
if (sc == null) {
throw new IllegalStateException(lStrings.getString("err.servlet_config_not_initialized"));
}
return sc.getServletContext();
}
public String getServletInfo() {
return "";
}
//此方法是Servlet接口中init()方法的实现。在这个方法中,首先将ServletConfig对象保存在一个transient实例变量中,然后调用第二个不带参数的init()方法。
public void init(ServletConfig config) throws ServletException {
this.config = config;
init();
}
//通常我们在编写继承自GenericServlet的Servlet类时,只需要重写不带参数的init()方法就可以了。如果覆盖了第一个init()方法,那么应该在子类的该方法中,包含一句super.init(config)代码的调用。
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);
}
public abstract void service(ServletRequest paramServletRequest, ServletResponse paramServletResponse) throws ServletException, IOException;
public String getServletName() {
ServletConfig sc = getServletConfig();
if (sc == null) {
throw new IllegalStateException(lStrings.getString("err.servlet_config_not_initialized"));
}
return sc.getServletName();
}
}