ServletConfig类的使用说明+重写init方法

ServletConfig类的说明

Servlet程序和ServletConfig对象都是由Tomcat负责创建,我们负责使用。

servlet程序默认是第一次访问的时候创建,servletConfig是每个Servlet程序创建时,就创建一个对应的ServletConfig对象,然后这个对象就会传到init这个方法里面供我们使用

作用:

config的意思即为配置,所以我们可以从名字上看出来这个类就是用来配置servlet的
它有三大作用:

可以获取Servlet程序配置的servlet-name的值
获取初始化参数init-param
获取SevletContext对象

他是出现在我们实现Servlet接口中的init方法里面的
在这里插入图片描述

获取Servlet程序配置的servlet-name的值

通过servletConfiggetServletName()方法,即servletConfig.getServletName()这个东西会返回我们当前配置的servlet-name在这里插入图片描述

获取初始化参数init-param

需要用到servletConfig的getInitParameter()方法
来,我们先来配置一个init-param标签,即初始化参数
在下图中param-name是用来配置参数名的,param-value是用来配置参数值的在这里插入图片描述在这里插入图片描述我们在servlet-name为hello_servlet的程序配置里面配置init-servlet,我们这里设置参数名为url参数值设置为jdbc:mysql:localhost:3306/test

然后在这里插入图片描述成功打印出我们的结果

获取SevletContext对象

用servletConfig的getServletContext()方法在这里插入图片描述

ServletConfig类在其他地方的使用

当然我们不止能在init的方法里面是引用,我们还可以在其他地方使用这个类
我们需要用到先使用getServletConfig()这个方法来获取到ServletConfig对象
来,我们先换一个我们的类来操作操作在这里插入图片描述
这个类是通过继承HttpServlet对象来实现的Servlet程旭,我们在doGet方法里面16行先获取一个servletConfig对象,然后后面我们就可以用这个对象了
这是我们hello_servlet2的配置在这里插入图片描述
注意:
我们一个类的servletConfig的对象只能用于自身的类,不能访问到别的类上面也不能用到别的类上面

重写init方法

注意一个问题
在我们重写init的方法的时候记得在init方法里面的代码前面加上super.init(config);这一句,不要忘了
来我搞个东西,我们还是在我们这个类里面,我们按Ctrl+O来选择我们的init方法进行重写在这里插入图片描述
注意一开始的init方法是这个样子的在这里插入图片描述注意这里有一个super.init(config);这一句,然后我们重写

重写后运行,可以看到虽然init里面的东西打印了但是页面却出现问题了,上面说24行出问题了,就是doGet里面的东西没法正常运行了
在这里插入图片描述
其实这就是super.init(config);的问题,如果我们把这一句加在我们重写代码的前面就什么问题都会没有了

为什么用super

为什么用接口实现的servlet程序不需要使用super,而通过继承实现的则需要呢?
首先我们需要知道super的作用,若这个用在子类重写父类的方法中,则此时,可以使用这个方法调用父类的这个被重写的方法,就是说,一个子类若重写了父类的某个方法,但是还想在这个子类重写的方法中调用父类的方法,则可以通过super来调用

所以super.init(config)在此处的作用就是:
调用父类的,init方法,并把config这个对象传递过去

config代表什么?
此处可以看到,这个重写的init方法中,为我们提供了一个ServletConfig类型的对象,即config,这个玩意,其中封装着Servlet相关的配置信息,包含了我们的web配置文件web.xml中的信息

所以此处super.init(config)的作用就是将我们关于servlet的配置信息传递给父类

看一下源码:
在这里插入图片描述

当我们重写了init方法,并且没有调用父类的init方法,就不能初始化给GenericServlet的config属性
如下:当调用getServletConfig()的时候,会得不到有用的config实例,而只能得到一个null。这样也就无法获取该Servlet的配置信息了。
在这里插入图片描述






而实现Servlet接口实现的servlet程序,他的父类是个接口,并不需要servlet中的配置信息,所以不需要我们通过super来向上级提供SerlvetConfig

看继承体系我们就知道,GenericServlet也是通过实现servlet接口来实现的servlet程序
在这里插入图片描述
idea查看某个类的继承体系的快捷键:ctrl+h

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值