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)方法即可,這就不用自己去
強轉請求和響應對象了。其實子類也不用去覆蓋service(HttpServletRequest,HttpServletResponse)方
法,因爲HttpServlet還要做另一步簡化操作,下面會介紹。
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);
}
}
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()...");
}
}