可以很清楚的看到, 在tomcat的实现中, service方法只起到了类似调度的功能
所以我们平时只重写doGet或doPost方法后, 会自动按请求类型匹配执行
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String method = req.getMethod(); if (method.equals(METHOD_GET)) { ... doGet(req, resp); ... } else if (method.equals(METHOD_HEAD)) { long lastModified = getLastModified(req); maybeSetLastModified(resp, lastModified); doHead(req, resp); } else if (method.equals(METHOD_POST)) { doPost(req, resp); } else if (method.equals(METHOD_PUT)) { doPut(req, resp); } else if (method.equals(METHOD_DELETE)) { doDelete(req, resp); } else if (method.equals(METHOD_OPTIONS)) { doOptions(req,resp); } else if (method.equals(METHOD_TRACE)) { doTrace(req,resp); } else { ... } }
可见tomcat实现的service方法只是起到了调度请求的作用
如果我们重写了service方法, 父类HttpServlet中的service方法就会失效
所以收到的任何请求都会由我们自己覆写的service方法来处理
如果我们的servlet中只有service方法, 是没有问题的
但值得注意的是, 如果你同时重写了service和doGet, doPost方法
一定要在执行完自己代码后调用父类service方法, super.service;
否自你的doGet和doPost是不会被执行的
doPost方法里面调用doGet方法做下面解释:---------------------|
doget和dopost方法的意思,为什么在servlet中dopost中调用doget方法 原创 2017年08月06日 20:17:39 doget调用dopost或者dopost调用doget一般是在教科书或者不需要区分get还是post方法调用的场合下使用。 没有默认调用哪个的说法,http访问请求的两种方式get和post,你使用那种方式请求,servlet就会用对应的方法来处理你的请求。 你用get方式请求,那么servlet就会执行doget方法,反之,你用post方式请求,servlet就会执行都post方法。