Servlet 传值调用 覆盖service()方法还是覆盖doGet方法和doPost方法区别

Posted 张凯::get("新技能")

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Servlet 传值调用 覆盖service()方法还是覆盖doGet方法和doPost方法区别相关的知识,希望对你有一定的参考价值。

可以很清楚的看到, 在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方法。 

 

以上是关于Servlet 传值调用 覆盖service()方法还是覆盖doGet方法和doPost方法区别的主要内容,如果未能解决你的问题,请参考以下文章

Servlet方法之service()

javaweb笔记4之httpservlet

《Head First Servlets & JSP》-4-请求和响应

jsp不用表单怎么向servlet传值?

写一个servlet如果不重写service方法那么会调用哪个类的service方法来调用doGet/doPost

spring cloud feign调用service的两种POST传值方式