GenericServlet & HttpServlet

GenericServlet

1). GenericServlet是一个Servlet.是Servlet接口和ServletConfig接口的实现类,但是一个抽象类,其中的service()方法为抽象方法。
2). 如果新建的Servlet程序直接继承GenericServlet会是开发更简洁。
3). 在GenericServlet中声明了一个ServletConfig类型的成员变量,在init(ServletConfig)方法中对其进行了初始化。
4). 利用servletConfig成员变量的方法,实现了ServletConfig接口的方法。
5). 还定义了一个init()方法,在init(ServletConfig)方法中对其进行调用,子类可以直接覆盖init()方法,在其中实现Servlet的初始化,不建议直接覆盖init(ServletConfig),因为如果忘记编写super.init(ServletConfig),而还使用了ServletConfig接口的方法,则会出现空指针异常。
6). 新建的init(){}并非Servlet的生命周期方法,而init(ServletConfig)是生命周期方法。

HttpServlet

1). 是一个Servlet,继承自GenericServlet,针对HTTP协议所定制。
2). 在service()方法中直接把ServletRequest和ServletResponse转为HttpServletRequest和HttpServletResponse,并调用了重载的service(HttpServletRequest, HttpServletResponse)
在service(HttpServletRequest, HttpServletResponse)获取了请求方式:request.getMethod()根据请求方式有创建了doXxx()方法(xxx 为具体的请求方式)

    @Override
    public void service(ServletRequest req, ServletResponse res)
        throws ServletException, IOException {

        HttpServletRequest  request;
        HttpServletResponse response;

        try {
            request = (HttpServletRequest) req;
            response = (HttpServletResponse) res;
        } catch (ClassCastException e) {
            throw new ServletException("non-HTTP request or response");
        }
        service(request, response);
    }
}

   public void service(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
        String method = request.getMethod();
        if("GET".equalsIgnoreCase(method)){
            doGet(request,response);
        }
        if("POST".equalsIgnoreCase(method)){
            doPost(request, response);
        }
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException{
        
    }
    public void doGet(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException{
        
    }

3).实际开发中,直接继承HttpServlet,并根据请求方式覆写doXxx()方法接口。
4). 好处:直接有针对性的覆盖doXxx()方法。直接使用HttpServletRequest和HttpServletResponse,不在需要进行强转

你可能感兴趣的:(GenericServlet & HttpServlet)