初识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);


    }
}
相关推荐
CodeAmaz4 分钟前
Spring编程式事务详解
java·数据库·spring
没有bug.的程序员6 分钟前
微服务基础设施清单:必须、应该、可以、无需的四级分类指南
java·jvm·微服务·云原生·容器·架构
武子康9 分钟前
Java-204 RabbitMQ Connection/Channel 工作流程:AMQP 发布消费、抓包帧结构与常见坑
java·分布式·消息队列·rabbitmq·ruby·java-activemq
郑州光合科技余经理10 分钟前
海外国际版同城服务系统开发:PHP技术栈
java·大数据·开发语言·前端·人工智能·架构·php
appearappear21 分钟前
Mac 上重新安装了Cursor 2.2.30,重新配置 springboot 过程记录
java·spring boot·后端
CryptoRzz29 分钟前
日本股票 API 对接实战指南(实时行情与 IPO 专题)
java·开发语言·python·区块链·maven
程序员水自流31 分钟前
MySQL数据库自带系统数据库功能介绍
java·数据库·mysql·oracle
谷哥的小弟36 分钟前
Spring Framework源码解析——RequestContext
java·后端·spring·框架·源码
天远Date Lab42 分钟前
Java微服务实战:聚合型“全能小微企业报告”接口的调用与数据清洗
java·大数据·python·微服务
lizz311 小时前
C++操作符重载深度解析
java·c++·算法