博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Servlet重写init(ServletConfig config)还是init()
阅读量:6236 次
发布时间:2019-06-22

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

原文地址:

写一个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

你可能感兴趣的文章
!!! # @ --- ODATA 云驱动 --- 数据库发布 RESTFUL API
查看>>
黑客入门之通过IP地址查看MAC地址
查看>>
ruby - block 初步学习
查看>>
Javascript一些实用技巧
查看>>
祸不单行
查看>>
数据结构和算法学习总结04 线性表---栈
查看>>
ios证书
查看>>
HTML的iframe标签妙用 - 在线执行前端代码的网站原理是什么?
查看>>
elasticsearch 事务日志 sync 都干了些什么?
查看>>
我写的Java相关的文章
查看>>
Redis常用问题
查看>>
正确的健身走方法
查看>>
LitePal——Android数据库框架完整使用手册
查看>>
使用聚类做数据分析
查看>>
Python学习笔记(六)
查看>>
sql like N'%...%' 在C#里的写法
查看>>
推荐很好用的Goroutine连接池
查看>>
DOMINO复制冲突文档产生的原因
查看>>
浅谈JS DDoS攻击原理与防御
查看>>
Python sys模块简介
查看>>