1 继承关系
javax.servlet.Servlet接口
javax.servlet.GenericServlet抽象类
javax.servlet.http.HttpServlet抽象子类
2 相关方法
-
javax.servlet.Servlet接口:
- void init(config) - 初始化方法
- void service(request,response) - 服务方法
- void destory() - 销毁方法
-
javax.servlet.GenericServlet抽象类:
- void service(request,response) - 仍然是抽象的
-
javax.servlet.http.HttpServlet 抽象子类:
-
void service(request,response) - 不是抽象的
-
String method = req.getMethod(); 获取请求的方式
-
各种if判断,根据请求方式不同,决定去调用不同的do方法
if (method.equals("GET")) { this.doGet(req,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); } 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); }
-
在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 小结
// 200 : 正常响应
// 404 : 找不到资源
// 405 : 请求方式不支持
- 继承关系: HttpServlet -> GenericServlet -> Servlet
- Servlet中的核心方法: init() , service() , destroy()
- 服务方法: 当有请求过来时,service方法会自动响应(其实是tomcat容器调用的)
- 在HttpServlet中我们会去分析请求的方式:到底是get、post、head还是delete等等
- 然后再决定调用的是哪个do开头的方法
- 那么在HttpServlet中这些do方法默认都是405的实现风格-要我们子类去实现对应的方法,否则默认会报405错误
- 因此,我们在新建Servlet时,我们才会去考虑请求方法,从而决定重写哪个do方法