javax.servlet.GenericServlet源码分析

package javax.servlet;

import java.io.IOException;
import java.util.Enumeration;

public abstract class GenericServlet implements Servlet, ServletConfig,
        java.io.Serializable {
    
    //用于序列化
    private static final long serialVersionUID = 1L;
    //transient序列化时忽略这个成员的值.
    private transient ServletConfig config;

    /*
        此构造方法啥也不做,因为Servlet的所有初始化任务都是由init方法完成的。
    */
    public GenericServlet() {
        // NOOP
    }

    /*
        重写java.servlet.Servlet接口中的destroy方法。
    此方法主要是由Servlet容器调用,用于将Servlet从服务中取出,这个Servelet的生命周期终止。
    */
    @Override
    public void destroy() {
        // NOOP by default
    }

    /*
        此方法用于获取ServletConfig对象中的初始化参数,通过参数名称获取参数值
    */
    @Override
    public String getInitParameter(String name) {
        return getServletConfig().getInitParameter(name);
    }

    /*
        此方法用于获取ServletConfig对象中的所有参数的名字以String的形式返回在java.util.Enumeration这个枚举接口中。
        如果Servlet没有初始化参数返回一个空的Enumeration对象(不是null)。
    */
    @Override
    public Enumeration<String> getInitParameterNames() {
        return getServletConfig().getInitParameterNames();
    }

    /*
        重写java.servlet.Servlet接口中的方法。
        此方法主要用于返回ServletConfig对象,这个对象包含Servlet的配置和初始化操作,这里主要是为了给init(ServletConfig config)这个方法使用的。
     */
    @Override
    public ServletConfig getServletConfig() {
        return config;
    }

    /*
        重写java.servlet.ServletConfig接口中的方法
        此方法主要用于获取ServletContext对象
    */
    @Override
    public ServletContext getServletContext() {
        return getServletConfig().getServletContext();
    }

    /*
        重写java.servlet.Servlet接口中的方法。    
        此方法主要用于返回servlet信息的,如作者,版权,版本,默认返回空字符串。
        可以重写此方法,用于返回更有意义的信息。
    */
    @Override
    public String getServletInfo() {
        return "";
    }

    /**
        重写java.servlet.Servlet接口中的方法。
        将Servlet容器给的ServletConfig对象,赋值给成员config
        并调用init()方法初始化servlet。
     */
    @Override
    public void init(ServletConfig config) throws ServletException {
        this.config = config;
        this.init();
    }

    /*
        主要被用于方便重写,不用调用super.init(config)方法,本身没有任何实现
    */
    public void init() throws ServletException {
        // NOOP by default
    }

    /*
        将要输入的信息,输入到servlet的日志文件中,前缀是servlet的名字
     */
    public void log(String msg) {
        getServletContext().log(getServletName() + ": " + msg);
    }

    /*            
        将给定的异常信息和堆栈追踪写入servlet的日志文件中,前缀是servlet的名字
     */
    public void log(String message, Throwable t) {
        getServletContext().log(getServletName() + ": " + message, t);
    }

    /*
        javax.servlet.Servlet接口中的方法.抽象方法
        此方法主要是由Servelt容器调用,用于处理来自于客户端的请求
     */
    @Override
    public abstract void service(ServletRequest req, ServletResponse res)
            throws ServletException, IOException;

    /*
        重写javax.servlet.ServletContext接口中的方法.
    */
    @Override
    public String getServletName() {
        return config.getServletName();
    }
}

猜你喜欢

转载自www.cnblogs.com/linglongfang/p/12575058.html