正文开始 ----------
可以先通过这个思维导图来大致了解一下关于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文件中标签中的配置信息
常用方法
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
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); } }