Servlet中的HttpServlet
生活随笔
收集整理的這篇文章主要介紹了
Servlet中的HttpServlet
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
大多數Web應用都是通過HTTP和客戶端進行交互
因此,在Servlet接口中,提供了一個抽象類javax.servlet.http.HttpServlet,它是GenericServlet的子類,專門用于創建應用于HTTP的Servlet
查看HttpServlet類的源代碼
首先,從Tomcat的lib文件中,找到Servlet的jar包——servlet-api.jar
查看jar包,使用壓縮軟件打開jar包,找到HttpServlet.class類文件
查看class文件,直接使用idea打開
代碼如下
public abstract class HttpServlet extends GenericServlet {public HttpServlet() {}protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {…… }protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {……}protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String method = req.getMethod();long lastModified;if (method.equals("GET")) {lastModified = this.getLastModified(req);if (lastModified == -1L) {this.doGet(req, resp);} else {long ifModifiedSince;try {ifModifiedSince = req.getDateHeader("If-Modified-Since");} catch (IllegalArgumentException var9) {ifModifiedSince = -1L;}if (ifModifiedSince < lastModified / 1000L * 1000L) {this.maybeSetLastModified(resp, lastModified);this.doGet(req, resp);} else {resp.setStatus(304);}}} else if (method.equals("HEAD")) {lastModified = this.getLastModified(req);this.maybeSetLastModified(resp, lastModified);this.doHead(req, resp);} else if (method.equals("POST")) {this.doPost(req, resp);} else if (method.equals("PUT")) {this.doPut(req, resp);} else if (method.equals("DELETE")) {this.doDelete(req, resp);} else if (method.equals("OPTIONS")) {this.doOptions(req, resp);} else if (method.equals("TRACE")) {this.doTrace(req, resp);} else {String errMsg = lStrings.getString("http.method_not_implemented");Object[] errArgs = new Object[]{method};errMsg = MessageFormat.format(errMsg, errArgs);resp.sendError(501, errMsg);}}public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {HttpServletRequest request;HttpServletResponse response;try {request = (HttpServletRequest)req;response = (HttpServletResponse)res;} catch (ClassCastException var6) {throw new ServletException("non-HTTP request or response");}this.service(request, response);}代碼說明
可以發現,HttpServlet主要有兩大功能
一、根據用語請求方式的不同,定義相應的doXXX()方法,處理用戶請求,比如
與GET請求方式對應的doGet()方法
與POST請求方式對應的doPost()方法
二、通過service()方法,將HTTP請求和響應分別轉為HttpServletRequest和HttpServletResponse類型的對象
注意
由于,HttpServlet類在重寫的service()方法中,為每一個HTTP請求方式,都定義了對應的doXXX()方法,因此,當定義的類繼承HttpServlet之后,只需要根據請求方式,重寫對應的doXXX()方法,即可,而不需要重寫service()方法
總結
以上是生活随笔為你收集整理的Servlet中的HttpServlet的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Servlet程序自动加载
- 下一篇: HttpServlet的doGet()和