什么是ServletConfig?
一个Servlet对应一个ServletConfig对象。
Servlet对象是Tomcat服务器创建,并且ServletConfig对象也是Tomcat服务器创建。并且默认情况下,他们都是在用户发送第一次请求的时候创建。
Tomcat服务器调用Servlet对象的init方法的时候需要传一个ServletConfig对象的参数给init方法。
ServletConfig接口的实现类是Tomcat服务器给实现的。(Tomcat服务器说的就是WEB服务器。)
ServletConfig接口有哪些常用的方法?
public String getInitParameter(String name); // 通过初始化参数的name获取value
public Enumeration getInitParameterNames(); // 获取所有的初始化参数的name
public ServletContext getServletContext(); // 获取ServletContext对象
public String getServletName(); // 获取Servlet的name
以上方法在Servlet类当中,都可以使用this去调用。因为GenericServlet实现了ServletConfig接口。
package com.bjpowernode.javaweb.servlet;import jakarta.servlet.*;import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;/*** ServletConfig* 1. ServletConfig是什么?* jakarta.servlet.ServletConfig* 显然ServletConfig是Servlet规范中的一员。* ServletConfig是一个接口。(jakarta.servlet.Servlet是一个接口。)* 2. 谁去实现了这个接口呢? WEB服务器实现了* public class org.apache.catalina.core.StandardWrapperFacade implements ServletConfig {}* 结论:Tomcat服务器实现了ServletConfig接口。* 思考:如果把Tomcat服务器换成jetty服务器,输出ServletConfig对象的时候,还是这个结果吗?* 不一定一样,包名类名可能和Tomcat不一样。但是他们都实现了ServletConfig这个规范。* 3. 一个Servlet对象中有一个ServletConfig对象。(Servlet和ServletConfig对象是一对一。)* 100个Servlet,就应该有100个ServletConfig对象。* 4. ServletConfig对象是谁创建的?在什么时候创建的?* Tomcat服务器(WEB服务器)创建了ServletConfig对象。* 在创建Servlet对象的时候,同时创建ServletConfig对象。* 5. ServletConfig接口到底是干啥的?有什么用呢?* Config是哪个单词的缩写?* Configuration* ServletConfig对象被翻译为:Servlet对象的配置信息对象。* 一个Servlet对象就有一个配置信息对象。* 两个Servlet对象就有两个配置信息对象。** 6. ServletConfig对象中到底包装了什么信息呢?* * configTest * com.bjpowernode.javaweb.servlet.ConfigTestServlet * * ServletConfig对象中包装的信息是:* web.xml文件中 标签的配置信息。** Tomcat小猫咪解析web.xml文件,将web.xml文件中 标签中的配置信息自动包装到ServletConfig对象中。** 7. ServletConfig接口中有哪些方法?* * configTest * com.bjpowernode.javaweb.servlet.ConfigTestServlet * * * driver * com.mysql.cj.jdbc.Driver * * * url * jdbc:mysql://localhost:3306/bjpowernode * * * user * root * * * password * root1234 * * * 以上 标签中的 是初始化参数。这个初始化参数信息会自动被小猫咪封装到ServletConfig对象当中。* 8. ServletConfig接口中有4个方法:* 第1个方法:* public String getInitParameter(String name);* 第2个方法:* public Enumeration getInitParameterNames();* 第3个方法:* public ServletContext getServletContext();* 第4个方法:* public String getServletName();** 以上的4个方法,在自己编写的Servlet类当中也可以使用this去调用。(这个Servlet继承了GenericServlet)*/
public class ConfigTestServlet extends GenericServlet {@Overridepublic void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {response.setContentType("text/html");PrintWriter out = response.getWriter();// 获取ServletConfig对象ServletConfig config = this.getServletConfig();// 输出该对象// org.apache.catalina.core.StandardWrapperFacade@aea0d43out.print("ServletConfig对象是:" + config.toString());out.print("
");// 获取 String servletName = config.getServletName();out.print(""+servletName+" ");out.print("
");// 通过ServletConfig对象的两个方法,可以获取到web.xml文件中的初始化参数配置信息。// java.util.Enumeration getInitParameterNames() 获取所有的初始化参数的nameEnumeration initParameterNames = config.getInitParameterNames();// 遍历集合while(initParameterNames.hasMoreElements()) { // 是否有更多元素String parameterName = initParameterNames.nextElement(); // 取元素String parameterVal = config.getInitParameter(parameterName); // 通过name获取valueout.print(parameterName + "=" + parameterVal);out.print("
");}// java.lang.String getInitParameter(java.lang.String name) 通过初始化参数的name获取value/*String driver = config.getInitParameter("driver");out.print(driver);*/// 实际上获取一个Servlet对象的初始化参数,可以不用获取ServletConfig对象。直接通过this也可以。Enumeration names = this.getInitParameterNames();while(names.hasMoreElements()){String name = names.nextElement();String value = this.getInitParameter(name);// 打印到后台System.out.println(name + "=" + value);}// 怎么获取ServletContext对象呢?// 第一种方式:通过ServletConfig对象获取ServletContext对象。ServletContext application = config.getServletContext();// 输出out.print("
" + application); //org.apache.catalina.core.ApplicationContextFacade@19187bbb// 第二种方式:通过this也可以获取ServletContext对象。ServletContext application2 = this.getServletContext();out.print("
" + application2); //org.apache.catalina.core.ApplicationContextFacade@19187bbb}
}
package com.bjpowernode.javaweb.servlet;import jakarta.servlet.*;import java.io.IOException;
import java.io.PrintWriter;public class ConfigTestServlet2 extends GenericServlet {@Overridepublic void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {response.setContentType("text/html");PrintWriter out = response.getWriter();// 获取ServletConfig对象ServletConfig config = this.getServletConfig();// 输出// org.apache.catalina.core.StandardWrapperFacade@287af686out.print("ServletConfig对象:" + config);String value = config.getInitParameter("key");out.print("
" + value);}
}