# Servlet繼承關係 ###### tags: `Java Web-Servlet` ### Servlet的繼承關係-重點查看的是服務方法 1.繼承關係 javax.servlet.Servlet接口 javax.servlet.GenericServlet抽象類 javax.servlet.http.HttpServlet抽象子類 2.相關方法 javax.servlet.Servlet接口: void init(config)-初始化方法 void service(request,response)-服務方法 void destroy()-銷毀方法 javax.servlet.GenericServlet抽象類: void service(request,response)-仍然是抽象的 javax.servlet.http.HttpServlet抽象子類: void service(request,response)-不是抽象的 1.String method = reg.getMethod():獲取請求的方式 2.各種if判斷,根據請求方式不同,決定去調用不同的do方式: if(method.equals("GET")){ this.doGet(reg,resp); }else if (method.equals("HEAD")) { this.doHead(req, resp); } else if (method.equals("POST")) { this.doPost(req, resp); } else if (method.equals("PUT")) { this.doPut(req, resp); } 3.在HttpServlet這個抽象類中,do方法都差不多: protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String protocol = req.getProtocol(); String msg = lStrings.getString("http.method_get_not_supported"); if (protocol.endsWith("1.1")) { resp.sendError(405, msg); } else { resp.sendError(400, msg); } } 3.小結: 1.繼承關係:HttpServlet->GenericServlet->Servlet 2.Servlet中的核心方法:init()、service()、destroy() 3.服務方法:當有請求過來時,service方法會自動響應(其實是tomcat容器調用的) 在HttpServlet中我們會去分析請求的方式:到底是get、post、head或是delete等等 然後再決定調用的是哪個do開頭的方法 HttpServlet中這些do方法默認都是405的實現風格-要我們子類去實現對應的方法,否則默認會報405錯誤 4.因此,我們在新建Servlet時,我們才會去考慮請求方式,從而決定重寫哪個do方法 ![](https://i.imgur.com/IQEQ6cQ.png)