JavaWEB ServletContext 接口详解

1、什么是ServletConfig ?

这个接口是Servlet 规范中的一个成员; ServletConfig 是一个接口;

2、谁去实现了这个接口?

org.apache.catalina.core.StandardWrapperFacade 实现了这个接口; 结论是:Tomcat 服务器实现了这个 ServletConfig 接口

思考:

  • 当服务器更换了之后,把Tomcat 换成了 jetty 之后,输出ServletConfig对象的时候,还是会出现同样的输出结果吗?

此时的输出是不一样的,因为在不同的服务器实现的不一样,可能包名是不一样的,类名可能不一样,但是都会实现ServletConfig 规范;

3、两个Servlet 类共享一个ServletConfig 对象吗?

不会的,一个Servlet 对象会关联一个 ServletConfig 对象 两者之间是一个一对一的关系

4、ServletConfig 对象是谁创建的?在什么时候创建的?

Tomcat(WEB 服务器)创建了 ServletConfig 对象; 在Servlet 对象创建的时候 ServLetConfig 对象基本就是同时被创建出来的; (所谓的Servllet 对象就是比如UserServlet 等一系列相关的类创建的对象)

5、ServletConfig 接口到底是做什么使用的?作用是什么?

Configuration(配置的意思)

ServletConfig 对象可以翻译为:Servlet 对象的配置信息对象; 就是web.xml 的相关配置信息,经过了Tomcat 会把 xml 文件的信息自动的包装成为了一个ServletConfig 对象,里面装配了一些信息;就是叫做配置信息对象

6、ServletConfig 对象中到底包装了什么信息?

    <servlet>
        <servlet-name>UserServlet</servlet-name>
        <servlet-class>com.luobin.servlet.myservlet.UserServlet</servlet-class>
    </servlet>
复制代码

ServletConfig 对象中包装的信息是:web.xml 中 标签俩面的内容;

小结一下就是:Tomcat 通过了对于 标签的解析,将 标签里面内容包装到 ServletConfig 对象里面

7、ServletConfig 里面都有什么方法呢?主要是存在 4 个方法

    <servlet>
        <servlet-name>ServletConfig1</servlet-name>
        <servlet-class>com.luobin.javaweb.servlet.ConfigTestServlet01</servlet-class>
        <!-- 在这个位置可以配置 Servlet 对象的初始化信息 -->
        <init-param>
            <param-name>username</param-name>
            <param-value>root</param-value>
        </init-param>
        <init-param>
            <param-name>password</param-name>
            <param-value>123456</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletConfig1</servlet-name>
        <url-pattern>/ServletConfig01</url-pattern>
    </servlet-mapping>
复制代码

上面的 标签里面的 是初始化参数,这个初始化参数可以被 Tomcat 自动的封装到ServletConfig 对象里面的;

        // 通过使用ServletConfig 对象的两个方法,可以获取到 web.xml 文件中的初始化参数配置信息;
        Enumeration<String> initParameterNames = config.getInitParameterNames();
        // 遍历集合
        out.println("<br>");
        while (initParameterNames.hasMoreElements()) {
            String parameterName = initParameterNames.nextElement();
            out.println("<br>");
            out.println( "配置的参数的名字为: " + parameterName);
        }

        out.println("<br>");
        String username = config.getInitParameter("username");
        out.println("init 配置的参数的值为 :" + username);
复制代码

主要拥有的方法有: 1、config.getInitParameterNames(); // 获取到Init 时候的所有参数的名字; 2、config.getInitParameter("username"); // 获取到通过参数的名字映射得到参数的值; 在这里插入图片描述

下面是原代码里面接口的实现:

package javax.servlet;

import java.util.Enumeration;

public interface ServletConfig {
    String getServletName();

    ServletContext getServletContext();

    String getInitParameter(String var1);

    Enumeration<String> getInitParameterNames();
}
复制代码

8、 使用this 调用了 ServletConfig 里面的方法也是可以的,因为GenericServlet 这个方法实现了ServletConfig 这个接口,

  • 实际上,获取一个Servlet 对象的初始化参数,是可以不获取ServletConfig 对象的,直接通过 this 也是可以实现的 // 父类是具有这个方法的,所以子类可以直接调用即可,不需要中间的对象的创建了 this.getInitParameterNames(); this.getInitParameter("username");

猜你喜欢

转载自juejin.im/post/7031449577974988814