GenericServlet
1、GenericServlet概述
        GenericServlet是Servlet接口的实现类,我们可以通过继承GenericServlet来编写自己的Servlet。
    下面是GenericServlet类的源代码:
    GenericServlet.java
    public abstract class GenericServlet implements Servlet, ServletConfig, Serializable {

        private static final long serialVersionUID = 1L;
        private transient ServletConfig config;
        public GenericServlet() {}

        @Override
        public void init(ServletConfig config) throws ServletException {
            this.config = config;
            this.init();
        }
        [这个方法是GenericServlet自己的方法,而不是从Servlet继承下来的。]
        public void init() throws ServletException {}
                
        @Override
        public abstract void service(ServletRequest req, ServletResponse res) 
                throws ServletException, IOException;
        @Override
        public ServletConfig getServletConfig() {
            return config;
        }
        @Override
        public String getServletInfo() {
            return "";
        }
        @Override
        public void destroy() {}

                
        @Override
        public String getInitParameter(String name) {
            return getServletConfig().getInitParameter(name);
        }
        @Override
        public Enumeration<String> getInitParameterNames() {
            return getServletConfig().getInitParameterNames();
        }
        @Override
        public ServletContext getServletContext() {
            return getServletConfig().getServletContext();
        }
        @Override
        public String getServletName() {
            return config.getServletName();
        }

        public void log(String msg) {
            getServletContext().log(getServletName() + ": " + msg);
        }
        public void log(String message, Throwable t) {
            getServletContext().log(getServletName() + ": " + message, t);
        }

    }

2、GenericServlet的init()方法
        在GenericServlet中,定义了一个ServletConfig config实例变量,并在init(ServletConfig)方法中
    把参数ServletConfig赋给了实例变量。然后在该类的很多方法中使用了实例变量config。如果子类覆盖了
    GenericServlet的init(StringConfig)方法,那么this.config=config这一条语句就会被覆盖了,也就是说
    GenericServlet的实例变量config的值为null,那么所有依赖config的方法都不能使用了。如果真的希望完成
    一些初始化操作,那么去覆盖GenericServlet提供的init()无参方法,它是没有参数的init()方法,
    它会在init(ServletConfig)方法中被调用。

3、实现了ServletConfig接口
  GenericServlet还实现了ServletConfig接口,所以可以直接调用getInitParameter()、getServletContext()
    等ServletConfig的方法。
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐