初识ServletConfig

正文开始

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

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文件中标签中的配置信息

常用方法

java 复制代码
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>

String value=config.getInitParameter("driver);

通过这个方法,传入name,可以获取初始化配置信息的value

java 复制代码
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("<br>");

        String configServletName = config.getServletName();
        out.println("<servlet-name>"+configServletName+"</servlet-name>");
//通过ServletConfig对象中的方法可以获取web.xml文件中的初始化参数配置信息
        //java.util.Enumeration<java.lang.String> getInitParameterNames()  获取所有初始化参数name
//java.lang.String   getInitParameter(java.lang.String name)   通过初始化参数的name,来获取value
        Enumeration<String> initParameterNames = config.getInitParameterNames();//获取对应name的value
        //遍历集合
        out.println("<br>");
        while (initParameterNames.hasMoreElements()){
            String s = initParameterNames.nextElement();
            String value = config.getInitParameter(s);

            out.println(s+"----->"+value);
            out.println("<br>");
        }
        //实际上获取一个Servlet对象的初始化参数,可以不用获取ServletConfig对象
        //因为适配器有相关方法
        Enumeration<String> names = this.getInitParameterNames();
        while (names.hasMoreElements()){
            String s = names.nextElement();
            System.out.println(s+"---->"+this.getInitParameter(s));
            //out.println("<br>");
        }

        //怎么获取ServletContext对象

        //第一种方式通过ServletConfig对象来获取ServletContext对象
        ServletContext application=config.getServletContext();
        //输出
        //org.apache.catalina.core.ApplicationContextFacade@bb8cbf0
        out.print("<br>"+application);
        //第二种:通过this来获取ServletContext对象,注意:this必须是继承GenericServlet
        ServletContext application2 = this.getServletContext();
        //org.apache.catalina.core.ApplicationContextFacade@bb8cbf0
        out.print("<br>"+application2);


    }
}
相关推荐
wangbing112514 小时前
平台介绍-modbus设备调试
java
西索斯coding15 小时前
gpt-image-2.5-sunburst 和 gemini-3.1-flash-image 差多少?60 组项目素材的成功成本评测框架
java·linux·gpt·ai
wuminyu15 小时前
Java字节码学习总结:字节码如何加载、解析和执行
java·linux·c语言·jvm·c++
Flynn Liang16 小时前
大模型怎么自己调函数?Spring AI 2.0 Tool Calling 自动循环原理 + 完整时序图
java·人工智能·spring·agent·函数调用·springai·toolcalling
乌暮17 小时前
请求进门先安检:Spring 拦截器与统一功能实战指南
java·开发语言·后端·学习·spring
学长毕设17 小时前
基于SpringBoot的烘焙商品商品系统-附源码
java·spring boot·后端
金銀銅鐵18 小时前
[Java] 用纯 Swing 做一个《論語·學而》阅读器
java·ai编程·交互设计
艾伦_耶格宇18 小时前
【kubernetes - 1.28版本】-11 K8S核心组件
java·容器·kubernetes
2301_7807896619 小时前
深度伪造即服务:新型网络诈骗的“完美面具”与识别之道
java·网络·ddos
LHICOD19 小时前
Linux-2
java·linux·后端·jar·vmware·svm·vm