HTTPServlet

了解HTTPServlet之前要稍微介绍一下GenericServlet

GenericServlet

1. GenericServlet概述
  • GenericServlet是Servlet接口的实现类,但它是一个抽象类,它唯一的抽象方法就是service()方法。我们可以通过继承GenericServlet来编写自己的Servlet。
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)方法中被调用。

HttpServlet

1. HttpServlet概述
  • HttpServlet类是GenericServlet的子类,它提供了对HTTP请求的特殊支持,所以通常我们都会通过继承HttpServlet来完成自定义的Servlet。
2. HttpServlet覆盖了service()方法
  • HttpServlet类中提供了service(HttpServletRequest,HttpServletResponse)方法
  • 这个方法是HttpServlet自己的方法,不是从Servlet继承来的。
  • 在HttpServlet的service(ServletRequest,ServletResponse)方法中会把ServletRequest和ServletResponse强转成HttpServletRequest和HttpServletResponse,然后调用service(HttpServletRequest,HttpServletResponse)方法
  • 这说明子类可以去覆盖service(HttpServletRequest,HttpServletResponse)方法即可,这就不用自己去强转请求和响应对象了。
HttpServlet.java

在源码中可以看到

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); //调用上面service()方法
}
……
3.doGet()和doPost()
  • 在HttpServlet的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 request, 	HttpServletResponse response)
      	throws ServletException, IOException {
      System.out.println("hello doPost()...");
      }
      }
    

在这里插入图片描述

Logo

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

更多推荐