• 初识ServletConfig


    在这里插入图片描述

    正文开始

    可以先通过这个思维导图来大致了解一下关于ServletConfig

    image-20220820100945035

    ServletConfig 是一个接口(jakarta.Servlet的一个接口)
    ServletConfig 是Servlet规范的一员
    全称:jakarta.servlet.ServletConfig
    Servlet对象的配置信息对象。
    ServletConfig对象中封装了标签中的配置信息。(web.xml文件中servlet的配置信息)
    每个serlvet类的实例都有且只有一个对应的servletConfig对象

    谁去实现ServletConfig这个接口

    public class org.apache.catalina.core.StandardWrapperFacade

    结论:Tomcat服务器实现了ServletConfig这个接口-----WEB服务器实现了这个接口
    不同服务器有不同的实现
    思考:如果把Tomcat服务器换成jetty服务器,输出ServletConfig对象的时候,还是这个结果吗?
    不一定一样,包名类名可能和Tomcat服务器不一样,但是他们都实现了ServletConfig这个规范

    一个Servlet对象有一个ServletConfig对象,他们之间是一对一

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

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

      • Tomcat服务器(WEB服务器)创建了ServletConfig对象
        在创建Servlet对象的时候,同时创建了ServletConfig对象

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

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

      ServletConfig接口的作用

    Config是Configuration单词的缩写
    ServletConfig对象翻译为:Servlet对象的配置信息对象
    一个Servlet对象就有一个配置信息对象

    ServletConfig对象中包装的信息

    web.xml文件中标签中的配置信息

    常用方法

    public String getInitParameter(String name); // 通过初始化参数的name获取value
    1
     <servlet>
            <servlet-name>configTestServlet</servlet-name>
            <servlet-class>commanman.servlet.ConfigTestServlet</servlet-class>
            <!--这里可以配置servlet对象的初始化信息 -->
            <init-param>
                <param-name>driver</param-name>
                <param-value>com.mysql.cj.jdbc.Driver</param-value>
            </init-param>
           
        </servlet>
        <servlet-mapping>
            <servlet-name>configTestServlet</servlet-name>
            <url-pattern>/test</url-pattern>
        </servlet-mapping>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    String value=config.getInitParameter("driver);
    通过这个方法,传入name,可以获取初始化配置信息的value

    public Enumeration<String> getInitParameterNames(); // 获取所有的初始化参数的name
    public ServletContext getServletContext(); // 获取ServletContext对象
    public String getServletName(); // 获取当前Servlet的name
    123
    package com.bjpowernode.servlet;
    
    import jakarta.servlet.*;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Enumeration;
     /
     * @author gaoziman
     * @create 2022--08--19 20:39
     */
    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 config = this.getServletConfig();
            //org.apache.catalina.core.StandardWrapperFacade@778f4ce
            out.println("ServletConfig对象:"+config);
            out.println("
    "
    ); String configServletName = config.getServletName(); out.println(""+configServletName+""); //通过ServletConfig对象中的方法可以获取web.xml文件中的初始化参数配置信息 //java.util.Enumeration getInitParameterNames() 获取所有初始化参数name //java.lang.String getInitParameter(java.lang.String name) 通过初始化参数的name,来获取value Enumeration<String> initParameterNames = config.getInitParameterNames();//获取对应name的value //遍历集合 out.println("
    "
    ); while (initParameterNames.hasMoreElements()){ String s = initParameterNames.nextElement(); String value = config.getInitParameter(s); out.println(s+"----->"+value); out.println("
    "
    ); } //实际上获取一个Servlet对象的初始化参数,可以不用获取ServletConfig对象 //因为适配器有相关方法 Enumeration<String> names = this.getInitParameterNames(); while (names.hasMoreElements()){ String s = names.nextElement(); System.out.println(s+"---->"+this.getInitParameter(s)); //out.println("
    ");
    } //怎么获取ServletContext对象 //第一种方式通过ServletConfig对象来获取ServletContext对象 ServletContext application=config.getServletContext(); //输出 //org.apache.catalina.core.ApplicationContextFacade@bb8cbf0 out.print("
    "
    +application); //第二种:通过this来获取ServletContext对象,注意:this必须是继承GenericServlet ServletContext application2 = this.getServletContext(); //org.apache.catalina.core.ApplicationContextFacade@bb8cbf0 out.print("
    "
    +application2); } }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
  • 相关阅读:
    全网顶级,谷歌98k架构师带你手撕spring 高级源码笔记,征服面试官的首选
    Andriod 简单控件
    ESbuild 简介
    Nginx支持SNI证书,已经ssl_server_name的使用
    【Unity小技巧】可靠的相机抖动及如何同时处理多个震动
    使用前端技术实现静态图片局部流动效果 🌊
    数据仓库理论篇
    设计模式之代理模式与外观模式
    如何从零开始解读产品经理需求分析-需求挖掘
    VS 2019报错无法打开源文件
  • 原文地址:https://blog.csdn.net/qq_58608526/article/details/126437226