ServletConfig类的使用 [Servlet][JavaWeb]

49 篇文章 0 订阅

ServletConfig类的使用

ServletConfig类就是Servlet配置信息封装的类, 我们可以通过这个类来获取Servlet的配置信息
  1. 可以获取Servlet程序的别名Servlet-name的值

    • getServletName();
      • 就是获取web.xml文件中的Servlet标签的子标签Servlet-name中的值
      • 这个别名, 也就是Servlet-name其实就是tomcat将要创建的Servlet对象的引用名, 也就是Servlet对象名
  2. 获取初始化参数init-param

    • getInitParameter(String name)
      • 传输param-name标签中的值, 就可以获取到param-value标签中的值, 就是通过键获取到值
  • 什么是初始化参数?

    • 初始化参数就是web.xml文件中init-param标签之下的param-name和param-value标签值就称之为初始化参数,可以看做是一个键值对结构

    • 注意: 一个servlet标签之下可以有多个init-param标签, 但是一个init-parma标签之下只能有一对param-name和param-value标签
      • 也就是可以有很多初始化参数
  1. 获取ServletContext对象
    • getServletContext()
    • 此时我们是使用ServletConfig接口的实现类对象来获取的ServletContext对象, 我们又知道ServletConfig对象是通过request对象获得的, 我们的request接口中也提供了直接获取ServletContext对象的方法, 方法名也是getServletContext()方法
      • 但是注意: request接口中提供的getServletContext()方法底层执行的时候也是先调用getServletConfig()方法获取到ServletConfig接口实现类对象之后使用ServletConfig接口实现类对象调用getServletContext()方法获取的ServletContext接口实现类对象
注意: 一个Servlet类对应了一个ServletConfig对象, 因为我们每个Servlet类都要来临配置, 也就是每一个Servlet类都有一个Servlet的配置对象, 也就是一个Servlet对应着一个ServletConfig对象

补充:

GenericServlet抽象类中做了很多的空实现, 并持有一个ServletConfig类的引用, 在GenericServlet类中有一个getServletConfig()方法, 这个方法就会将我们的GenericServlet抽象类中的ServletConfig类的引用返回

  • 所以如果我们是继承HttpServlet抽象类的方式创建的Servlet类, 那么我们HttpServlet抽象类中其实是没有重写GenericServlet抽象类中继承下来的getServletConfig()方法的, 所以其实我们如果是继承HttpServlet的方式创建的Servlet类中调用getServletConfig()方法的时候其实是调用的GenericServlet抽象类中声明的getServletConfig()方法

    • 但是正是因为这种调用方式就会引发新的问题:

      • 因为我们的GenericServlet抽象类中虽然维护了一个ServletConfig类型的引用, 但是由于我们的不同的Servlet对象的ServletConfig配置信息也不同, 所以我们的ServletConfig其实是在GenericServlet类的init()方法中实现的ServletConfig类型的引用的赋值操作, 所以前提就是我们一定要先执行了GenericServlet类中的init()方法

        • GenericServlet类中的init()方法声明如下:

          @Override
          public void init(ServletConfig config)throws ServletException{
              this.config = config;
              this.init();
          }
          
          • GenericServlet类中不仅仅继承了无参的init()方法, 并且重载了一个init(ServletConfig config)方法, 在有参的init方法中完成了对config引用的赋值操作, 并且调用了父类的初始化操作
        • 如果我们是继承了HttpServlet的方式创建的Servlet类, 那么我们这个时候如果要重写从GenericServlet抽象类中继承的init()方法的时候我们就一定要显示的使用super语句调用父类GenericServlet抽象类中声明的init()方法, 执行了对ServletConfig引用的赋值之后我们才可以使用getServletConfig()方法去获取到ServletConfig()对象

  • Servlet接口中只声明了五个抽象方法, 并没有做出实现, 但是我们的Servlet接口中直接提供了一个抽象的getServletCoifig()方法, 调用这个方法的时候我们就会直接调用到我们实现类中的getServletConfig()方法, 因为我们如果实现Servlet接口的方式的时候就肯定是要重写其中所有的抽象方法的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值