0
点赞
收藏
分享

微信扫一扫

ServletConfig接口详情

1. ServletConfig是什么?  13

jakarta.servlet.ServletConfig

显然ServletConfig是Servlet规范中的一员。

ServletConfig是一个接口。(jakarta.servlet.Servlet是一个接口。)

一个Servlet对象中有一个ServletConfig对象。(Servlet和ServletConfig对象是一对一。)

100个Servlet,就应该有100个ServletConfig对象。

2.  谁去实现了这个接口呢? 13

WEB服务器实现了

public class org.apache.catalina.core.StandardWrapperFacade implements ServletConfig {}

结论:Tomcat服务器实现了ServletConfig接口。

2.1 思考:如果把Tomcat服务器换成jetty服务器,输出  ServletConfig对象的时候,还是这个结果吗?

不一定一样,包名类名可能和Tomcat不一样。但是他们都实现了ServletConfig这个规范。

3. ServletConfig对象是谁创建的?在什么时候创建的?13

Tomcat服务器(WEB服务器)创建了ServletConfig对象。

 在创建Servlet对象的时候,同时创建ServletConfig对象。

3.1 ServletConfig接口到底是干啥的?有什么用呢?  13

Config是哪个单词的缩写?

    Configuration

ServletConfig对象被翻译为:Servlet对象的配置信息对象。

  一个Servlet对象就有一个配置信息对象。

 两个Servlet对象就有两个配置信息对象。

3.2 ServletConfig对象中到底包装了什么信息呢?    13

 ServletConfig对象中包装的信息是:

标签的配置信息。

 <servlet>
        <servlet-name>configTest</servlet-name>
         <servlet-class>com.bjpowernode.javaweb.servlet.ConfigTestServlet</servlet-class>
     </servlet>

Tomcat小猫咪解析web.xml文件,将web.xml文件中标签中的配置信息自动包装到ServletConfig对象中。


  <servlet>
         <servlet-name>configTest</servlet-name>
         <servlet-class>com.bjpowernode.javaweb.servlet.ConfigTestServlet</servlet-class>
         <!--这里是可以配置一个Servlet对象的初始化信息的。-->
         <init-param>
             <param-name>driver</param-name>
             <param-value>com.mysql.cj.jdbc.Driver</param-value>
         </init-param>
         <init-param>
              <param-name>url</param-name>
              <param-value>jdbc:mysql://localhost:3306/bjpowernode</param-value>
          </init-param>
          <init-param>
              <param-name>user</param-name>
              <param-value>root</param-value>
          </init-param>
          <init-param>
              <param-name>password</param-name>
              <param-value>root1234</param-value>
          </init-param>
      </servlet>

标签中的是初始化参数。这个初始化参数信息会自动被Tomcat小猫咪封装到ServletConfig对象当中。

3.4 ServletConfig接口中有4个方法: 13

       第1个方法:

           public String getInitParameter(String name);//获取value

       第2个方法:

 getInitParameterNames();//获取key

       第3个方法:

           public ServletContext getServletContext();

       第4个方法:

           public String getServletName();//获取servlet的name


 以上的4个方法,在自己编写的Servlet类当中也可以使用this去调用。(这个Servlet继承了GenericServlet)

代码在com.bjpowernode.javaweb.servlet.

ConfigTestServlet

package com.bjpowernode.javaweb.servlet;

import jakarta.servlet.*;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

//ServletConfig接口详情  13
//研究ServletConfig是知识点  13-14
public class ConfigTestServlet extends GenericServlet {
    @Override
    public void service(ServletRequest request, ServletResponse response)
            throws ServletException, IOException {
        //以下两句可以在浏览器上打印
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        //获取ServletConfig对象
        ServletConfig config = this.getServletConfig();
        //输出该对象
        //浏览器上输出为
        // ServletConfig对象是:org.apache.catalina.core.StandardWrapperFacade@4b8c081
        out.print("ServletConfig对象是:"+config);

        out.print("
");//换行

        // 获取configTest中间的configTest也就是name
        String servletName = config.getServletName();
        out.print(""+servletName+"");//configTest

        out.print("
");
        out.print("
");

        // 通过ServletConfig对象的两个方法,可以获取到web.xml文件中的初始化参数配置信息。
        // java.util.Enumeration	getInitParameterNames()
        // getInitParameterNames()取name
        // 获取所有的初始化参数的name
        //获取结果放在了一个集合中
        Enumeration initParameterNames = config.getInitParameterNames();
        //遍历集合
        while (initParameterNames.hasMoreElements()) {//是否有更多的元素
            String parameterName = initParameterNames.nextElement();//取元素即取出name
            String ParameterVal = config.getInitParameter(parameterName);//通过那么取value
            out.print(parameterName+" = "+ParameterVal);
            out.print("
");
        }
        //java.lang.String getInitParameter(java.lang.String name)
        //getInitParameter取value
        // 通过初始化参数的name获取value
//        String driver = config.getInitParameter("driver");
//        out.print(driver);//com.mysql.cj.jdbc.Driver


        // 实际上获取一个Servlet对象的初始化参数,可以不用获取ServletConfig对象。直接通过this也可以。
        //因为GenericServlet中提供了getInitParameter(name)和getInitParameterNames()方法
        Enumeration names = this.getInitParameterNames();
        while(names.hasMoreElements()){//判断是否有更多元素
            String name = names.nextElement();//取元素
            String value = this.getInitParameter(name);//根据name取value
            //这里直接输出在控制台了
            System.out.println(name+" = "+value);
        }


        //ServletContext接口详解  14
        // 怎么获取ServletContext对象呢?
        // 第一种方式:通过ServletConfig对象获取ServletContext对象。
        ServletContext application = config.getServletContext();
        //输出结果org.apache.catalina.core.ApplicationContextFacade@96784a4
        out.print("
"+application);

        // 第二种方式:通过this也可以获取ServletContext对象。
        ServletContext application2 = this.getServletContext();
        //输出结果org.apache.catalina.core.ApplicationContextFacade@96784a4
        out.print("
"+application2);

    }
}

ConfigTestServlet2

package com.bjpowernode.javaweb.servlet;

import jakarta.servlet.*;

import java.io.IOException;
import java.io.PrintWriter;

//研究ServletConfig是知识点  13
//一个Servlet对象中有一个ServletConfig对象。(Servlet和ServletConfig对象是一对一。)
public class ConfigTestServlet2 extends GenericServlet {
    @Override
    public void service(ServletRequest request, ServletResponse response)
            throws ServletException, IOException {
        //以下两句可以在浏览器上打印
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        //获取ServletConfig对象
        ServletConfig config = this.getServletConfig();
        //输出该对象
        //浏览器上输出为
        //ServletConfig对象是:org.apache.catalina.core.StandardWrapperFacade@6c388349
        //此输出结果与ConfigTestServlet中的ServletConfig对象不一样由此可知
        //Servlet和ServletConfig对象是一对一
        out.print("ServletConfig对象是:"+config);

        //获取初始化信息的value
        String value = config.getInitParameter("key");
        out.print("
"+value);//value

    }
}

配置文件web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

<!--    这个是ConfigTestServlet的servlet配置-->
    <servlet>
        <servlet-name>configTest</servlet-name>
       <servlet-class>com.bjpowernode.javaweb.servlet.ConfigTestServlet</servlet-class>
<!--        这里是可以配置一个Servlet对象的初始化信息的-->
        <init-param>
            <param-name>driver</param-name>
            <param-value>com.mysql.cj.jdbc.Driver</param-value>
        </init-param>
        <init-param>
            <param-name>url</param-name>
            <param-value>jdbc:mysql://localhost:3306/bjpowernode</param-value>
        </init-param>
        <init-param>
            <param-name>user</param-name>
            <param-value>root</param-value>
        </init-param>
        <init-param>
            <param-name>password</param-name>
            <param-value>root1234</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>configTest</servlet-name>
        <url-pattern>/test</url-pattern>
    </servlet-mapping>

    <!--    这个是ConfigTestServlet2的servlet配置-->
    <servlet>
        <servlet-name>configTest2</servlet-name>
        <servlet-class>com.bjpowernode.javaweb.servlet.ConfigTestServlet2</servlet-class>
        <init-param>
            <param-name>key</param-name>
            <param-value>value</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>configTest2</servlet-name>
        <url-pattern>/test2</url-pattern>
    </servlet-mapping>

</web-app>

4. 总结  15

- 什么是ServletConfig?

  - Servlet对象的配置信息对象。

标签中的配置信息。(web.xml文件中servlet的配置信息)

- 一个Servlet对应一个ServletConfig对象。

- Servlet对象是Tomcat服务器创建,并且ServletConfig对象也是Tomcat服务器创建。并且默认情况下,他们都是在用户发送第一次请求的时候创建。

- Tomcat服务器调用Servlet对象的init方法的时候需要传一个ServletConfig对象的参数给init方法。

- ServletConfig接口的实现类是Tomcat服务器给实现的。(Tomcat服务器说的就是WEB服务器。)

- ServletConfig接口有哪些常用的方法?

    public String getInitParameter(String name); // 通过初始化参数的name获取value

 getInitParameterNames(); // 获取所有的初始化参数的name

    public ServletContext getServletContext(); // 获取ServletContext对象

    public String getServletName(); // 获取Servlet的name

  - 以上方法在Servlet类当中,都可以使用this去调用。因为GenericServlet实现了ServletConfig接口。

举报

相关推荐

0 条评论