Servlet生命周期中的service方法分析
问题
ServletLifeCycle中的service方法内,有super.service(request, response); 会执行this.doGet(HttpServletRequest request, HttpServletResponse response);
没有super.service(request, response);,则不执行this.doGet(...). 是怎么实现的?
举一反三:
一个子类,覆写的方法内,如果调用了父类的该方法,会执行子类内的另一个方法;
覆写的方法内,如果没有调用父类的该方法,就不会执行子类内的另一个方法;
分析 ----->符号是关键注释
1 public class ServletLifeCycle extends HttpServlet { 2 private static final long serialVersionUID = 1L; 3 4 @Override 5 public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { 6 // TODO Auto-generated method stub 7 //this.doGet((HttpServletRequest)request, (HttpServletResponse)response); 8 super.service(request, response);//------------------->执行父类的service(ServletRequest request, ServletResponse response)方法 9 10 System.out.println("处理客户端请求"); 11 } 12 13 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 14 // TODO Auto-generated method stub 15 System.out.println("处理过程"); 16 response.getWriter().append("Served at: ").append(request.getContextPath()); 17 } 18 19 } 20 21 22 23 24 public abstract class HttpServlet extends GenericServlet { 25 public void service(ServletRequest req, ServletResponse res) 26 throws ServletException, IOException { 27 28 HttpServletRequest request; 29 HttpServletResponse response; 30 31 try { 32 request = (HttpServletRequest) req; 33 response = (HttpServletResponse) res; 34 } catch (ClassCastException e) { 35 throw new ServletException("non-HTTP request or response"); 36 } 37 service(request, response);//------------------->父类的方法的重载执行父类的service(HttpServletRequest request, HttpServletResponse response)方法 38 //------------------->我的理解是,如果没有重载,会出现死循环. 走到此处又执行子类ServletLifeCycle的service方法,子类又调用父类service方法,循环嵌套. 39 } 40 41 42 protected void service(HttpServletRequest req, HttpServletResponse resp) 43 throws ServletException, IOException { 44 45 String method = req.getMethod(); 46 47 if (method.equals(METHOD_GET)) { 48 long lastModified = getLastModified(req); 49 if (lastModified == -1) { 50 // servlet doesn't support if-modified-since, no reason 51 // to go through further expensive logic 52 doGet(req, resp);//------------------->调用子类ServletLifeCycle的doGet方法 53 } else { 54 long ifModifiedSince; 55 try { 56 ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE); 57 } catch (IllegalArgumentException iae) { 58 // Invalid date header - proceed as if none was set 59 ifModifiedSince = -1; 60 } 61 if (ifModifiedSince < (lastModified / 1000 * 1000)) { 62 // If the servlet mod time is later, call doGet() 63 // Round down to the nearest second for a proper compare 64 // A ifModifiedSince of -1 will always be less 65 maybeSetLastModified(resp, lastModified); 66 doGet(req, resp); 67 } else { 68 resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED); 69 } 70 } 71 72 } else if (method.equals(METHOD_HEAD)) { 73 long lastModified = getLastModified(req); 74 maybeSetLastModified(resp, lastModified); 75 doHead(req, resp); 76 77 } else if (method.equals(METHOD_POST)) { 78 doPost(req, resp); 79 80 } else if (method.equals(METHOD_PUT)) { 81 doPut(req, resp); 82 83 } else if (method.equals(METHOD_DELETE)) { 84 doDelete(req, resp); 85 86 } else if (method.equals(METHOD_OPTIONS)) { 87 doOptions(req,resp); 88 89 } else if (method.equals(METHOD_TRACE)) { 90 doTrace(req,resp); 91 92 } else { 93 // 94 // Note that this means NO servlet supports whatever 95 // method was requested, anywhere on this server. 96 // 97 98 String errMsg = lStrings.getString("http.method_not_implemented"); 99 Object[] errArgs = new Object[1]; 100 errArgs[0] = method; 101 errMsg = MessageFormat.format(errMsg, errArgs); 102 103 resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED, errMsg); 104 } 105 } 106 107 108 protected void doGet(HttpServletRequest req, HttpServletResponse resp) 109 throws ServletException, IOException 110 { 111 String protocol = req.getProtocol(); 112 String msg = lStrings.getString("http.method_get_not_supported"); 113 if (protocol.endsWith("1.1")) { 114 resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, msg); 115 } else { 116 resp.sendError(HttpServletResponse.SC_BAD_REQUEST, msg); 117 } 118 } 119 }
转载于:https://www.cnblogs.com/ICE_Inspire/p/5150170.html
Servlet生命周期中的service方法分析相关推荐
- Vue生命周期中的created和mounted的区别
之前大部分时候都是用angular开发项目,vue写的很少,最近有必要把vue和webpack重新整理一下了.下面我们先看一下Vue生命周期中的created和mounted的区别. 我们先看一张图( ...
- Activity生命周期中onStart()和onResume()的区别
Activity生命周期中onStart()和onResume()的区别 在讲onStart()和onResume()的区别之前,必须清楚Activity的四种状态: 1.Running状态:一个新的 ...
- Vue生命周期中对mounted、beforeUpdate、updated的理解
Vue生命周期中对mounted.beforeUpdate.updated的理解 前言 mounted.beforeUpdate.updated 前言 以下文章纯为个人理解,如有错误,请求评论区指正呀 ...
- Vue生命周期中mounted、created、methods、computed、watched等的区别
1.Vue生命周期中mounted和created的区别 https://blog.csdn.net/xdnloveme/article/details/78035065. 2.[Vue] 生命周期, ...
- [javaweb] servlet介绍与servlet的继承关系 和 service 方法 (一)
Servlet servlet是Server Applet的简称,servlet是运行在服务器上的一个小程序,用来处理服务器请求的.一般的网页程序,是通过浏览器访问来实现的,在这个过程中,浏览器发送访 ...
- servlet生命周期/init/核心service/destory
Servlet的生命周期一般可以用三个方法来表示: init():仅执行一次,负责在装载Servlet时初始化Servlet对象 service() :核心方法,一般HttpServlet中会有get ...
- adf开发_了解ADF生命周期中的ADF绑定
adf开发 在这篇文章中,我将重点介绍ADF绑定层,并探讨当最初从浏览器请求带有一些数据的ADF页面时它如何工作. Oracle ADF提供了自己的JSF生命周期扩展版. 实际上,ADF扩展了标准的J ...
- 了解ADF生命周期中的ADF绑定
在本文中,我将重点介绍ADF绑定层,并探讨当最初从浏览器请求带有某些数据的ADF页面时,它如何工作. Oracle ADF提供了自己的JSF生命周期扩展版. 实际上,ADF扩展了标准JSF生命周期实现 ...
- 【vue其他相关】欢迎讨论!异步请求放在生命周期中的created还是mounted,已填坑
文章目录 前言 两个生命周期 场景1 场景2 场景3 结论 如何处理场景一和场景二的问题 最后 前言 曾经在百度上搜这个问题,看到的答案都是相互复制粘贴的,而且个人觉得并没具体场景举例说明,并没有好的 ...
最新文章
- springboot多数据源动态切换和自定义mybatis分页插件
- 如何使用 API 的方式给 SAP service cloud Registered product 上传图片
- MongoDB 去重(distinct)查询后求总数(count)
- SpringMVC与Struts2区别与比较总结
- Rabbit MQ windows下安装
- java 抽象类对象_Java基础___面向对象__抽象类
- Java™ 教程(常见问题及其解决方案)
- C++基础与深度解析第五章: 语句
- python中copy和deepcopy的区别_python里shadowcopy和deepcopy的区别
- 基于javaWEB技术的SSM音乐网站设计与实现(含论文+程序设计+PPT答辩)
- [模拟]JZOJ 2499 东风谷早苗
- Oracle 工具篇+Oracle Remote Diagnostic Agent(RDA)
- 基于SSM整合阿里直播服务----java代码实现
- 5和6 objbc oracle_《Oracle Database 12c完全参考手册(第7版)(试读版)》
- android 小白点代码,Android实现小圆点显示未读功能
- 区块链10年兴衰录:中国是最好的发展土壤
- 计算机驱动安装的几个方法,不会安装驱动有福了,2个方法教你安装驱动程序,非常实用的知识...
- Unix/Linux下的Curses库开发指南——第三章curses库窗口
- 某预约系统分析 某区公共自行车租车卡在线预约,关于如何提高成功概率
- ListView 联动 SideBar ,根据数据首字母进行排序
热门文章
- Java面试题之有没有有顺序的Map实现类,如果有,他们是怎么实现有序的?
- java resourcebundle_Java - Properties和ResourceBundle类学习
- Win11系统各个版本之间的比较,看完你就懂了!
- 后端:spring提供的钩子,你知道哪些?
- 算法基础:常用的查找算法知识笔记
- 汇总jQuery的61种选择器及示例
- 真正聪明的人,为什么从不去社交?
- 帧同步_微信小游戏接入“熊孩子噩梦”健康系统 帧同步能力上线
- java logging api_Java Logging API - Tutorial
- [python进阶]11接口:从协议到抽象基类