当前位置: 首页 > news >正文

Servlet重写init(ServletConfig config)还是init()

原文地址:Servlet重写init(ServletConfig config)还是init()

写一个Servlet时,有时需要我们重写该Servlet的初始化方法,然后,究竟是重写init(ServletConfig config),还是重写init(),这是个问题。要明了这一点,首先要知道Servlet的几个类和接口的联系:

ServletConfig接口:其中有getServletName();getServletContext();getInitParameter(String name);getInitParameterNames()四个方法。
Servlet接口:其中有init(ServletConfig config)方法
|--->GenericServlet抽象类:其中有private transient ServletConfig config;属性
|--->HttpServlet类


     通过查看源码,发现HttpServlet中没有init方法.而在GenericServlet抽象类中则实现了Servlet#init(ServletConfig config)方法,不仅如此,还更添加了一个新的不带参数的init()方法。而且在带参数中的init方法中调用了不带参数的init方法。

 

    应该知道,在Servlet初始化的时候,会自动调用init(ServletConfig config),Container会自动收集一些该Servlet的配置信息,生成一个ServletConfig的实例,通过调用该实例的四个getXXX方法(即ServletConfig接口中的四个方法),我们可以得到该Servlet的这些配置信息。

 

    而该实例我们如何获取呢?是通过Servlet#getServletConfig()得到的,该方法同样在GenericServlet中实现,具体如下:

 

1 public void init(ServletConfig config) throws ServletException {
2 this.config = config;
3 this.init();
4 }
5 public ServletConfig getServletConfig() {
6 return config;
7 }

   

   我认为init()的出现,是为了解决一个问题,那就是有些人最开始时候,重写init(ServletConfig config)方法,但却总是忘记去调用“super.init(config);”。试想,如果真的出现这种情况,那么,就会造成一种结果,容器收集的Servlet的配置信息,不能初始化给GenericServlet的config属性,以至于当调用getServletConfig()的时候,会得不到有用的config实例,而只能得到一个null。这样也就无法获取该Servlet的配置信息了。

 

    而无参数的init()方法在GenericServlet中的出现,解决了这种或许人为造成的获取不到ServletConfig对象的尴尬。可以看到含参init方法调用了无参init,这就让我们可以在处理Servlet初始化参数的时候,只需要重写无参的init()方法就行了。初始化config对象的操作仍然在Container调用init(ServletConfig config)时候完成,然后调用你重写了的init()方法,完成其他初始化操作。

 

    综合来看,是重写含参还是不含参的init方法,并没有严格的规定,只是如果重写含参init方法,需要先调用父类的含参init方法罢了。两种调用如下:

 

1 public void init(ServletConfig config) throws ServletException {
2 super.init(config);
3 //...code...
4 }
5 public void init() throws ServletException {
6 //...code...
7 }

 



转载于:https://www.cnblogs.com/mumu122GIS/p/9985777.html

相关文章:

  • 微信小程序填坑清单
  • 【.NET Core项目实战-统一认证平台】第五章 网关篇-自定义缓存Redis
  • WPF自定义Window窗体样式
  • python编程入门----while与文件用法
  • [洛谷P3950]部落冲突
  • 技术工坊|高TPS和去中心化存储带来的第三代区块链技术革新机遇(深圳)
  • 深入Redis持久化
  • 【模板】最近公共祖先(LCA)
  • 端口的作用
  • Scrum立会报告+燃尽图(十一月二十二日总第三十次):加强回归测试
  • Java开发者福音 阿里巴巴宣布连任Java全球管理组织席位
  • FFmpeg(七)音频的播放
  • AI创业公司“一览群智”完成1.5亿元融资,经纬中国、策源资本投资
  • HTTP API 自动化测试从手工测试到平台的演变
  • JS 中的深拷贝与浅拷贝
  • #Java异常处理
  • ES10 特性的完整指南
  • JavaScript异步流程控制的前世今生
  • JS数组方法汇总
  • node入门
  • Python语法速览与机器学习开发环境搭建
  • React+TypeScript入门
  • ucore操作系统实验笔记 - 重新理解中断
  • 排序算法学习笔记
  • 无服务器化是企业 IT 架构的未来吗?
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 一个SAP顾问在美国的这些年
  • 用jquery写贪吃蛇
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 找一份好的前端工作,起点很重要
  • 仓管云——企业云erp功能有哪些?
  • 带你开发类似Pokemon Go的AR游戏
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • 如何正确理解,内页权重高于首页?
  • (2020)Java后端开发----(面试题和笔试题)
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (附源码)ssm高校实验室 毕业设计 800008
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (篇九)MySQL常用内置函数
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)项目管理杂谈-我所期望的新人
  • .net core webapi 大文件上传到wwwroot文件夹
  • .考试倒计时43天!来提分啦!
  • @ComponentScan比较
  • @GlobalLock注解作用与原理解析
  • [Angular 基础] - 自定义指令,深入学习 directive
  • [ASP.NET 控件实作 Day7] 设定工具箱的控件图标
  • [AutoSar]状态管理(五)Dcm与BswM、EcuM的复位实现
  • [ExtJS5学习笔记]第三十节 sencha extjs 5表格gridpanel分组汇总
  • [G-CS-MR.PS02] 機巧之形2: Ruler Circle
  • [JS]JavaScript 注释 输入输出语句
  • [leetcode] Longest Palindromic Substring