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


    }
}
相关推荐
Hygge-star17 分钟前
【数据结构】二分查找-LeftRightmost
java·数据结构·算法
张扬飞舞22 分钟前
IntelliJ IDEA打开项目后,目录和文件都不显示,只显示pom.xml,怎样可以再显示出来?
xml·java·intellij-idea
oneDay++22 分钟前
# IntelliJ IDEA企业版集成AI插件「通义灵码」全流程详解:从安装到实战
java·经验分享·学习·intellij-idea·学习方法
长勺29 分钟前
Spring Security vs Shiro vs Sa-Token
java·后端·spring
为美好的生活献上中指1 小时前
java每日精进 5.14【参数校验】
java·开发语言·spring boot·tomcat
qq_12498707531 小时前
原生小程序+springboot+vue+协同过滤算法的音乐推荐系统(源码+论文+讲解+安装+部署+调试)
java·spring boot·后端·小程序·毕业设计·课程设计·协同过滤
曾昭武1 小时前
IDEA怎么汉化&idea中文改回英文版
java·intellij-idea·idea汉化·idea怎么汉化·idea转回英文
信徒_2 小时前
SpringBoot 自动装配流程
java·spring boot·后端
小薛博客3 小时前
4、前后端联调文生文、文生图事件
java·ai
愛~杦辷个訾4 小时前
芋道项目,商城模块数据表结构
java·sql·芋道·yudao-cloud·芋道商城