• JavaWeb 之 ServletConfig 接口


    一、ServletConfig 接口

      1、简介

        ServletConfig 类,见名知意,就是 Servlet 程序的配置信息类。

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

        Servlet 程序默认是第一次访问的时候创建,ServletConfig 是每个 Servlet 程序创建时,就创建一个与之对应的 ServletConfig 对象。

      2、接口的信息

        ServletConfig 这个类中声明了四个方法,可以看到这四个方法都是与 Servlet 有关的。

        

       3、获取 ServletConfig 对象

        在 Servlet 接口的初始化方法,有一个 ServletConfig 类型的参数,同时还给提供了一个获取 ServletConfig 对象的方法。

                     

              

         在 GenericServlet 抽象类中,声明了一个 ServletConfig 类型的成员变量,而且对 ServletConfig 接口和 Servlet 接口中的方法进行了实现。

          

             所以,只需要调用 ServletConfig() 方法就可以获得 ServletConfig 对象。

           但是,还要注意一点:如果在一个 继承 HttpServlet的 servlet 中重写了init()方法,那么在首行一定要调用父类 init(ServletConfig) 的操作,不然默认调用 GenericServlet 的无参构造,这样声明的 ServletConfig 成员变量就是 null,在 servlet 中使用会报错的。

          没有重写 init(ServletConfig) 方法,正确打印:

          

          重写了但是没有调用 super.init(ServletConfig),获取空对象:

            

             

    二、ServletConfig 类的三大作用

      1、可以获取 Servlet 程序的别名 servlet-name 的值

      2、可以获取 Servlet 初始化参数 init-param

      3、可以获取 ServletContext 对象

        Demo:

     1 <!-- servlet 标签给 Tomcat 配置 Servlet 程序 -->
     2     <servlet>
     3         <!--servlet-name 标签 Servlet 程序起一个别名(一般是类名) -->
     4         <servlet-name>HelloServlet</servlet-name><!--servlet-class 是 Servlet 程序的全类名-->
     5         <servlet-class>com.servlet.HelloServlet</servlet-class>
     6         <!--init-param 是初始化参数-->
     7         <init-param>
     8             <!--是参数名-->
     9             <param-name>username</param-name>
    10             <!--是参数值-->
    11             <param-value>root</param-value>
    12         </init-param>
    13         <!--init-param 是初始化参数-->
    14         <init-param>
    15             <!--是参数名-->
    16             <param-name>url</param-name>
    17             <!--是参数值-->
    18             <param-value>jdbc:mysql://localhost:3306/test</param-value>
    19         </init-param>
    20     </servlet>
    21     <!--servlet-mapping 标签给 servlet 程序配置访问地址-->
    22     <servlet-mapping>
    23         <!--servlet-name 标签的作用是告诉服务器, 我当前配置的地址给哪个 Servlet 程序使用-->
    24         <servlet-name>HelloServlet</servlet-name>
    25         <!--
    26         url-pattern 标签配置访问地址 <br/>
    27         / 斜杠在服务器解析的时候, 表示地址为: http://ip:port/工程路径 <br/>
    28         /hello 表示地址为: http://ip:port/工程路径/hello <br/>
    29         -->
    30         <url-pattern>/hello</url-pattern>
    31     </servlet-mapping>

      Servlet 程序:

     1 @Override
     2     public void init(ServletConfig servletConfig) throws ServletException {
     3         System.out.println("2 init 初始化方法");
     4         // 1、 可以获取 Servlet 程序的别名 servlet-name 的值
     5         System.out.println("HelloServlet 程序的别名是:" + servletConfig.getServletName());
     6         // 2、 获取初始化参数 init-param
     7         System.out.println("初始化参数 username 的值是;" + servletConfig.getInitParameter("username"));
     8         System.out.println("初始化参数 url 的值是;" + servletConfig.getInitParameter("url"));
     9         // 3、 获取 ServletContext 对象
    10         System.out.println(servletConfig.getServletContext());
    11     }
  • 相关阅读:
    tomcat(5)-如何查看linux环境下的tomcat版本?
    【PAT甲级】1023 Have Fun with Numbers (20 分)
    Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2)D(树状数组)
    【PAT甲级】1022 Digital Library (30 分)(模拟)
    Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2)B(SET)
    Codeforces Round #551 (Div. 2)D(树形DP)
    Atcoder Grand Contest 037C(贪心,优先队列,思维)
    Codeforces Round #580 (Div. 2)D(思维,Floyd暴力最小环)
    Atcoder Grand Contest 037B(DP,组合数学,思维)
    Atcoder Grand Contest 037A(贪心,思维)
  • 原文地址:https://www.cnblogs.com/niujifei/p/12425799.html
Copyright © 2020-2023  润新知