Servlet详解之两个init方法的作用

在Servlet中 javax.servlet.GenericServlet类 继承自java.lang.Object 实现了Serializable,,servlet ,ServletConfig 三个接口 被继承对象javax.servlet.http.HttpServlet

(这是我们常用的一个类)

 

但仔细看GenericServlet的API,会发现有两个init方法 void init()  void init(ServletConfig config)  而在Servlet接口中只有一个void init(ServletConfig config) 方法 

在此做一下解释:

 

先看一下官方说明: void init()  A convenience method which can be overridden so that there's no need to call super.init(config). 
void init(ServletConfig config)  Called by the servlet container to indicate to a servlet that the servlet is being placed into service. 

 

看一下这两个函数的源码:GenericServlet.class

 

[java] view plain copy print?
  1. <span style="font-size: 18px;">  
  2. </span>  
[java] view plain copy print?
  1. <span style="font-size: 18px;">public void init(ServletConfig config) throws ServletException {  
  2.     this.config = config;  
  3.     this.init();  
  4.     }</span>  
public void init(ServletConfig config) throws ServletException {this.config = config;this.init();}

 

 

 

[java] view plain copy print?
  1. <span style="font-size: 18px;">  
  2. </span>  
[java] view plain copy print?
  1. <span style="font-size: 18px;">public void init() throws ServletException {  
  2.   
  3.     }</span>  
public void init() throws ServletException {}

 

 

可以看到有参的init方法又调用了无参的init方法,这是什么原因呢。 补充一句,Tomcat默认调用的是有参的。
如果你曾复写过init()方法,你应该能看出些端详 如果我们在想调用init方法时执行一些操作,那怎么办呢,只要我们复写无参的init方法,tomcat在调用完有参的init方法时调用无参的init方法,这样两个操作都执行了。而且我们也不用写super.init();试想一下,如果没有无参的init方法,那我们复写有参的init方法时忘记了些super.init(config)方法,那么config就不能初始化了,而这样设计即使我们不调用super的方法,也不会出问题。何乐而不为呢!

转载于:https://www.cnblogs.com/firstdream/p/7907508.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/251465.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue --- 使用vue在html上显示当前时间

希望如下效果(时间按秒钟更新) 导入Vue依赖的CDN <script src"https://unpkg.com/vue/dist/vue.min.js"> </script>创建视图 <div id"app">{{date}}</div>Model <script>var app new Vue({el: "app",data: …

namespace 或The content of element type mapper must match EMPTY

必须为元素类型 "mapper" 声明属性 "namespace" 或The content of element type "mapper" must match "EMPTY" <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org/…

EAS WebService部署

1、创建 facade ,设置好接口及参数、返回信息; 2、代码&#xff1a;元数据打包部署到服务器; 3、然后修改配置文件&#xff1a; 将本地开发环境生成的.wsdd文件拷贝到eas\server\deploy\eas.ear的web.war下的WEB-INF目录下&#xff0c;再将.wsdd文件中的<service></se…

vue --- 购物车页面

下面我看开始自己写一个购物车的页面. 我们希望得到如下的效果: 说明: 购买数量最小为0购买数量变化时,对应的总价随之变化点击移除操作对应的商品会移除掉,总价随之改变每个商品作为一个list表的一个对象每个对象,包含id、name、price、count等属性 index.html (整体代码最…

Javascript阻止表单提交

Javascript阻止表单提交 Html 1.<form name"loginForm" action"login.aspx" method"post"> 2. <button type"submit" value"Submit" id"submit">Submit</button> 3.</form> Js …

XML CDATA的作用

操作XML文件时&#xff0c;如果允许用户输入内容&#xff0c;例如∶"< "、">"、"/"、""等&#xff0c;当生成XML时&#xff0c;会破坏了XML结构&#xff0c;使数据中断。 这就要用XML CDATA 在XML文档中的所有文本都会被解析器解…

vue --- 从模块从父元素获取数据

vue的精彩之处在于其组件的可复用性.下面谈谈组件(component)如何从父元素获取数据 模块引用 首先说说,如何引用模块 <div id"app"><my-component ></my-component> </div> <script src“unpkg.com/vue/dist/vue.min.js”> </…

前端知识总结(一)

1、用原生JS实现forEach if(!Array.prototype.forEach) {Array.prototype.forEach function(fn, context) {var context arguments[1];if(typeof fn ! "function") {throw new TypeError(fn "is not a function");}for(var i 0; i < this.length; …

广播风暴

能够抑制网络风暴的是&#xff1f;A中断器 B集线器 C网桥 D路由器 答案D解析&#xff1a;&#xff08;1&#xff09;广播风暴&#xff1f;一个数据帧或包被传输到本地网段上的每个节点就是广播&#xff1b;由于网络拓扑的设计和连接问题&#xff0c;或其他原因导致广播在网段内…

java getClass()

Java反射学习 所谓反射&#xff0c;可以理解为在运行时期获取对象类型信息的操作。传统的编程方法要求程序员在编译阶段决定使用的类型&#xff0c;但是在反射的帮助下&#xff0c;编程人员可以动态获取这些信息&#xff0c;从而编写更加具有可移植性的代码。严格地说&#xff…

vue --- 模块从子组件获取数据

先看个一般的例子: // 我们需要将信息从子组件传递给父组件,(有可能不止一条信息,因此)肯定需要一个标识,这个标识放在$emit里面(js),在dom中通过来关联父元素。如下:<div id "app"><transfer connect"sayConnect" build"sayBuild"&g…

mySql配置在nodejs中使用

mySql安装完成后&#xff0c;配置链接nodejs项目中的数据库。 1、测试是否安装成功。 2、use nodejs使用nodejs 3、设置数据源 5、exit 转载于:https://www.cnblogs.com/zhxzh/p/9244996.html

转,jquery中attr和prop的区别

https://www.cnblogs.com/Showshare/p/different-between-attr-and-prop.html 像checkbox&#xff0c;radio和select这样的元素&#xff0c;选中属性对应“checked”和“selected”&#xff0c;这些也属于固有属性&#xff0c;因此需要使用prop方法去操作才能获得正确的结果。 …

前端知识总结(二)

33、闭包 闭包的概念 上一节代码中的f2函数&#xff0c;就是闭包。 各种专业文献上的"闭包"&#xff08;closure&#xff09;定义非常抽象&#xff0c;很难看懂。我的理解是&#xff0c;闭包就是能够读取其他函数内部变量的函数。 由于在Javascript语言中&#x…

javascript --- 实现Ajax的代码

直接上代码,(前几天项目出差部署去叻) const ajax function (options {}) {option.type (options.type || GET).toUpperCase();let data [];for(let i in options.data) {data.push(encodeURIComponent(i) encodeURIComponent (options.data[i]));}data data.join(&am…

[Spark]-RDD详解之变量操作

RDD的操作 1.1 概述 RDD整体包含两大类操作 transformation 从现有中创建一个新的数据集 action 在对数据集做一定程度的计算后将结果返回 对于所有的transformation,都是Lazy的,也就是说它不会立即执行,只是单纯的记住怎么样从原来的数据集进行转换的逻辑而已,它仅在某一个计算…

前端知识总结(三)

51、启动GNU加速 硬件加速的工作原理 浏览器接收到一个页面之后&#xff0c;将html解析成DOM树&#xff0c;浏览器解析渲染「html」的过程 按着一定的规则执行&#xff0c;DOM树和CSS树结合后构成浏览器形成页面的 渲染树 ; 渲染树中包含大量的渲染元素&#xff0c;每一个元素…

为阿里云服务器ECS实例安装Nodejs

为阿里云服务器ECS实例安装Nodejs部署Node.js项目&#xff08;CentOS&#xff09;准备工作操作步骤步骤1&#xff1a;部署Node.js环境&#xff08;使用二进制文件安装&#xff09;步骤2&#xff1a;部署测试项目部署Node.js项目&#xff08;CentOS&#xff09; 本文档介绍如何…

JavaScrpt --- es5实现ES6的Number扩展(部分)

ES6对数值对象Number进行了扩展, // ES实现Number.isFinite() (function (global) {var global_isFinite global.isFinite;Object.defineProperty(Number, isFinite, {value: function isFinite(value) {return typeof value number && global_isFinite(value);},co…

webstorm激活+汉化教程

1.安装教程激活 输入的激活网址&#xff1a; http://idea.imsxm.com/ 2.汉化教程 软件适用于&#xff1a;webstorm2017.2以及以上&#xff0c;如有需要可直接加本人QQ 1940694428。 转载于:https://www.cnblogs.com/cisum/p/7919712.html