博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转]servlet中的service, doGet, doPost方法的区别和联系
阅读量:6945 次
发布时间:2019-06-27

本文共 1594 字,大约阅读时间需要 5 分钟。

原文地址:http://m.blog.csdn.net/blog/ghyg525/22928567

大家都知道在javax.servlet.Servlet接口中只有init, service, destroy方法

但是我们在继承HttpServlet的时候为何一般重写doGet和doPost方法呢

下面我们看一下Servlet源代码:

注意: JDK只是定义了servlet接口,而实现servlet接口的比如tomcat, jboss等服务器

 

下面我们找到tomcat源代码, 可以到官网下载, 目前最新版本是7.0.53

找到javax.servlet.http.HttpServlet类, 下面是service方法部分源代码:

 

可以很清楚的看到, 在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是不会被执行的

转载于:https://www.cnblogs.com/yf2196717/p/10493383.html

你可能感兴趣的文章
带线的无限级下拉树列表-完整示例篇
查看>>
Clipboard with Custom Clipboard Formats - Delphi
查看>>
[Step By Step]SAP HANA PAL 异态检测算法Anomaly Detection实现例程ANOMALYDETECTION
查看>>
linux上配置boost手记
查看>>
IIS状态监测(如果状态错误则重启IIS)
查看>>
PostgreSQL中,database,schema,table之间关系
查看>>
12个球一个天平,现知道只有一个和其它的重量不同,问怎样称才能用三次就找到那个球(13个呢?)...
查看>>
HDU 2364 (记忆化BFS搜索)
查看>>
两个实用的方法从Base64字符串生成RSAPublicKey及RSAPrivatekey
查看>>
常用验证数字的正则表达式
查看>>
kafka入门:简介、使用场景、设计原理、主要配置及集群搭建(转)[收藏]
查看>>
java读取excel文件数据
查看>>
Java的RMI远程方法调用实现和应用
查看>>
Linux 上使用 Gmail SMTP 服务器发送邮件通知
查看>>
Dell vsotro 14 3000系列从win10重装win7
查看>>
说说$POST 、$HTTP_RAW_POST_DATA、php://input三者之间的区别
查看>>
(一) Qt Model/View 的简单说明
查看>>
制作自己的MVC框架(三)——应用
查看>>
青云指南
查看>>
thinkphp 3.2 多表查询 group
查看>>