原文地址: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是不会被执行的

最新文章

  1. css面包屑导航编号
  2. Codeforces 722C. Destroying Array
  3. (转载)AppScan使用分享
  4. [LeetCode] Range Sum Query - Immutable & Range Sum Query 2D - Immutable
  5. Add 1G to a LVM on VMware
  6. IE升级代码时邮件内容
  7. 服务器监控之 ping 监控
  8. 逗号" , "表达式
  9. Shell 脚本小试牛刀(番外) -- 捷报
  10. POPTEST培训:web自动化测试之DOM
  11. Jquery的入门学习
  12. Java系列2 --- 你真的知道Java的String对象么?
  13. VS2017 性能优化方法
  14. Cforeach的详细用法--【转】
  15. 简单透彻理解JSONP原理及使用
  16. 这可能是最详细的Python文件操作
  17. TX2-start 6 CPU kernel-开启高功耗模式
  18. [UE4]ChildActor组件
  19. android平台一些常用代码
  20. Android-自定义控件-继承View与ViewGroup的初步理解

热门文章

  1. MMORPG大型游戏设计与开发(客户端架构 part2 of vgui)
  2. NOIP2009pj道路游戏[环形DP 转移优化 二维信息]
  3. AC日记——计算多项式的导函数 openjudge 1.5 38
  4. Java之线程处理之二
  5. Eclipse 代码自动提示的设置
  6. 关于webpack.optimize.CommonsChunkPlugin的使用二
  7. DLL放在指定目录 以及设置dll调用路径
  8. .net混淆、反编译工具调查
  9. BZOJ 1066 【SCOI2007】 蜥蜴
  10. h1/title,b/strong,i/em 的区别