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


    }
}
相关推荐
lee_curry3 小时前
第四章 jvm中的垃圾回收器
java·jvm·垃圾收集器
九转成圣4 小时前
Java 性能优化实战:如何将海量扁平数据高效转化为类目字典树?
java·开发语言·json
直奔標竿5 小时前
Java开发者AI转型第二十七课!Spring AI 个人知识库实战(六)——全栈闭环收官,解锁前端流式渲染终极技巧
java·开发语言·前端·人工智能·后端·spring
金銀銅鐵5 小时前
[java] 编译之后的记录类(Record Classes)长什么样子(上)
java·jvm·后端
野生技术架构师7 小时前
金三银四面试总结篇,汇总 Java 面试突击班后的面试小册
java·面试·职场和发展
小袁拒绝摆烂7 小时前
多表关联大平层转JSON树形结构
java·json
ja哇8 小时前
大厂面试高频八股
java·面试·职场和发展
yoyo_zzm8 小时前
Laravel6.x新特性全解析
java·spring boot·后端
Nick_zcy9 小时前
小说在线阅读网站和小说管理系统 · 功能全解析
java·后端·python·springboot·ruoyi