正文开始
可以先通过这个思维导图来大致了解一下关于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服务器(WEB服务器)创建了ServletConfig对象
-
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);
}
}