认识Servlet(三)HttpServlet

一、HttpServlet概述

HttpServlet类是GenericServlet的子类,它提供了对HTTP请求的特殊支持,所以通常我们都会通过继承HttpServlet来完成自定义的Servlet.

二、HttpServlet覆盖了service()方法

HttpServlet类中提供了service(HttpServletRequest,HttpServletResponse)方法,这个方法是HttpServlet自己的方法,不是从Servlet继承来的。在HttpServletd的serivce(ServletRequest,ServletResponse)方法中会把ServletRequest和ServletResponse强转成HttpServletRequest和HttpServletResponse,然后调用service(HttpServletRequest,HttpServletResponse)方法,这说明子类可以去覆盖service(HttpServletRequest,HttpServletResponse)方法,因为HttpServlet还要做另一步简化操作。

public abstract class HttpServlet extends GenericServlet {
    protected void service(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
        ……
}
    @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); 
}
}

三、doGet()和doPpst()

在HtttpServlet的service(HttpServletRequest,HttpServletResponse)方法会去判断当前请求是GET还是POST,如果是GET请求,那么会去调用本类的doGET()方法,如果POST请求会去调用doPost()方法,这个说明我们在子类中去覆盖doGet()或doPost方法即可。

public class AServlet extends HttpServlet{
        public  void doGet(HttpServletRequest request,HttpServletResponse response)
        throws ServletException IOException{
        System.out.println("hello doGet()...");
        }
}
public class BServlet extends HttpServlet{
public void doPost(HttpServletRequest requet,HttpServletResponse response)
   throws ServletException,IOException{
        System.out.println("hello doPost()...");
    }
}

猜你喜欢

转载自blog.csdn.net/qq_36213352/article/details/80789114