共计 1764 个字符,预计需要花费 5 分钟才能阅读完成。
一、HttpServlet 概述
HttpServlet 类是 GenericServlet 的子类,它提供了对 HTTP 请求的特殊支持,所以通常我们都会通过继承 HttpServlet 来完成自定义的 Servlet。
二、HttpServlet 覆盖了 service() 方法
HttpServlet 类中提供了 service(HttpServletRequest,HttpServletResponse) 方法,这个方法是 HttpServlet 自己的方法,不是从 Servlet 继承来的。
在 HttpServlet 的 service(ServletRequest,ServletResponse) 方法中会把 ServletRequest 和 ServletResponse 强转成 HttpServletRequest 和 HttpServletResponse,然后调用 service(HttpServletRequest,HttpServletResponse) 方法,这说明子类可以去覆盖 service(HttpServletRequest,HttpServletResponse) 方法即可,这就不用自己去强转请求和响应对象了。
其实子类也不用去覆盖 service(HttpServletRequest,HttpServletResponse) 方法,因为 HttpServlet 还要做另一步简化操作,下面会介绍。
HttpServlet.java
public abstract class HttpServlet extends GenericServlet {protected void service(HttpServletRequest req, | |
HttpServletResponse resp) | |
throws ServletException, IOException {// 根据 request 对象是 GET 请求还是 POST 请求,然后去调用 | |
//doGet 方法或者 doPost 方法 | |
/* | |
if(req.getMethod=="GET"){doGet(req,resp); | |
} | |
else{doPost(req,resp); | |
} | |
*/ | |
} | |
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() 和 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()..."); | |
} | |
} | |
