JavaWeb学习笔记十:ServletConfig接口详解

ServletConfig

  • 什么是ServletConfig?

    • Servlet对象的配置信息对象。
    • ServletConfig对象中封装了标签中的配置信息。(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
      public Enumeration<String> getInitParameterNames(); // 获取所有的初始化参数的name
      public ServletContext getServletContext(); // 获取ServletContext对象
      public String getServletName(); // 获取Servlet的name
      
    • 以上方法在Servlet类当中,都可以使用this去调用。因为GenericServlet实现了ServletConfig接口。

package com.javaweb.servlet;

import jakarta.servlet.*;

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

/**
 * ServletConfig
 *  1、ServletConfig是什么?
 *      jakarta.servlet.ServletConfig
 *      显然ServletConfig是Servlet规范中的一员
 *      ServletConfig是一个接口(jakarta.servlet.Servlet也是一个接口)
 *  2、谁实现了ServletConfig接口? WEB服务器实现
 *      public class org.apache.catalina.core.StandardWrapperFacade implements ServletConfig {}
 *      结论:Tomcat服务器实现了ServletConfig接口
 *      思考:将Tomcat服务器换成jetty服务器,输出ServletConfig对象的时候,还是这个结果吗?
 *          不一定一样,包名类名可能和Tomcat不一样,但是都实现了ServletConfig规范
 *  3、一个Servlet对象对应一个ServletConfig对象。
 *  4、ServletConfig对象是谁创建的?在什么时候创建的?
 *      Tomcat服务器(WEB服务器)创建了ServletConfig对象
 *      在创建Servlet对象的时候,同时创建了ServletConfig对象
 *  5、ServletConfig接口是干什么的?有什么用?
 *      Config(Configuration)
 *      ServletConfig对象被翻译为:Servlet对象的配置信息对象
 *      一个Servlet对象就有一个配置信息对象
 *  6、ServletConfig对象中包装了什么信息?
 *      <servlet>
 *         <servlet-name>configTest</servlet-name>
 *         <servlet-class>com.javaweb.servlet.ConfigTestServlet</servlet-class>
 *     </servlet>
 *     ServletConfig对象中包装的信息
 *          web.xml文件中<servlet></servlet>标签的配置信息
 *     Tomcat解析web.xml文件,将web.xml文件中<servlet></servlet>标签的配置信息自动包装到ServletConfig对象中
 *  7、ServletConfig有哪些方法
 *      <servlet>
 *         <servlet-name>configTest</servlet-name>
 *         <servlet-class>com.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/student</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>root</param-value>
 *         </init-param>
 *     </servlet>
 *     以上<servlet></servlet>标签中的<init-param></init-param>是初始化参数
 *     这个初始化参数信息会自动被Tomcat封装到ServletConfig对象中
 */
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@66f930bb
        out.print("ServletConfig对象是" + config);
        out.print("<br>");

        // 获取<servlet-name></servlet-name>
        // 输出:configTest
        String servletName = config.getServletName();
        out.print("<servlet-name>"+servletName+"</servlet-name>");
        out.print("<br>");

        // 通过ServletConfig对象中的两个方法,可以获取到web.xml文件中的初始化配置信息
        //java.util.Enumeration<java.lang.String>	getInitParameterNames()  获取所有的初始化参数的name
        //java.lang.String	getInitParameter(java.lang.String name) 通过初始化参数的name获取value
        Enumeration<String> initParameterNames = this.getInitParameterNames();
        // 遍历集合
        /* 输出:password=root
                driver=com.mysql.cj.jdbc.Driver
                user=root
                url=jdbc:mysql://localhost:3306/student
         */
        while (initParameterNames.hasMoreElements()){   // 是否有更多元素
            String parameterName = initParameterNames.nextElement();    // 取元素
            String parameterValue = this.getInitParameter(parameterName);  // 通过name获取参数
            out.print(parameterName + "=" + parameterValue);
            out.print("<br>");
        }


        /**
         * 怎么获取ServletContext对象
         */
        // 第一种方式:通过ServletConfig对象获取ServletContext对象
        ServletContext application = config.getServletContext();
        out.print("<br>" + application);    // 输出:org.apache.catalina.core.ApplicationContextFacade@64b0375f
        // 第二种方式:通过this也可以获取ServletContext对象
        ServletContext application2 = this.getServletContext();
        out.print("<br>" + application2);   // 输出:org.apache.catalina.core.ApplicationContextFacade@64b0375f

    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值