GenericServlet的讲解

来源:互联网 发布:影楼网络销售工资待遇 编辑:程序博客网 时间:2024/06/07 03:49
    GenericServlet是Servlet接口的实现类,我们可以通过继承GenericServlet来编写自己的Servlet。下面是GenericServlet类的源代码:
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 "";    }    /*       实现了Servlet的init(ServletConfig)方法,把参数config赋给了本类的成员config,然后再调用本       类自己的无参的init()方法。    */    @Override    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();    }}
1. GenericServlet的init()方法    在GenericServlet中,定义了一个ServletConfig config实例变量,并在init(ServletConfig)方法中把参数ServletConfig赋给了实例变量。然后在该类的很多方法中使用了实例变量config。如果子类覆盖了GenericServlet的init(StringConfig)方法,那么this.config=config这一条语句就会被覆盖了,也就是说GenericServlet的实例变量config的值为null,那么所有依赖config的方法都不能使用了。如果真的希望完成一些初始化操作,那么去覆盖GenericServlet提供的init()方法,它是没有参数的init()方法,它会在init(ServletConfig)方法中被调用。2. 实现了ServletConfig接口  GenericServlet还实现了ServletConfig接口,所以可以直接调用getInitParameter()、getServletContext()等ServletConfig的方法。
1 0
原创粉丝点击