1.什么是ServletConfig?13
jakarta.servlet.ServletConfig
显然,Servletconfig是Servlet规范的一员。
Servletconfig是一个接口。(jakarta.servlet.Servlet是一个接口。)
Servlet对象中有一个Servletconfig对象。(Servlet和Servletconfig对象是一对一的。)
100个Servlet应该有100个Servletconfig对象。
2.谁实现了这个界面?13实现了WEB服务器
publicclassorg.apache.catalina.core.StandardWrapperFacadeimplementsServletConfig{}
结论:Tomcat服务器实现了Servletconfig接口。
2.1思考:如果用jetty服务器代替tomcat服务器,输出servletconfig对象,还是这个结果吗?不一定,包名类名可能与Tomcat不同。但他们都实现了Servletconfig的规范。
3.谁创建了Servletconfig对象?它是什么时候创建的?13Tomcat服务器(WEB服务器)创建了Servletconfig对象。
创建Servlet对象时,同时创建Servletconfig对象。
3.1Servletconfig接口到底是干什么的?有什么用?13Config是哪个单词的缩写?
Configuration
ServletConfig对象被翻译成:Servlet对象的配置信息对象。
Servlet对象有配置信息对象。
两个Servlet对象有两个配置信息对象。
3.2Servletconfig对象中包装了哪些信息?13包装在ServletConfig对象中的信息是:
标签配置信息。
<servlet> <servlet-name>configTest</servlet-name> <servlet-class>com.bjpowernode.javaweb.servlet.ConfigTestServlet</servlet-class> </servlet>
tomcat小猫分析webb.xml文件,web.自动将xml文件中标签中的配置信息包装到Servletconfig中。
<servlet> <servlet-name>configTest</servlet-name> <servlet-class>com.bjpowernode.javaweb.servlet.ConfigTestServlet</servlet-class> <!--Servlet对象的初始化信息可以在这里配置。--> <init-param> <param-name>driver</param-name> <param-value>com.mysql.cj.jdbc.Driver</param-value> </init-param> <init-param> <param-name>url</param-name> <param-value>jdbc:mysql://localhost:3306/bjpowernode</param-value> </init-param> <init-param> <param-name>user</param-name> <param-value>root</param-value> </init-param> <init-param> <param-name>password</param-name> <param-value>root1234</param-value> </init-param> </servlet>
标签中有初始参数。这个初始参数信息会自动被tomcat小猫包装到servletconfig对象中。
3.4Servletconfig接口中有四种方法:13第1个方法:
publicStringgetInitParameter(Stringname);//获得value
第2个方法:
getInitParameterNames();///获取key
第3个方法:
publicServletContextgetServletContext();
第4个方法:
publicStringgetServletName();///获得servletnamee
以上四种方法也可以用this来调用自己编写的Servlet类别。(这个Servlet继承了GenericServlet)
com中的代码.bjpowernode.javaweb.servlet.ConfigTestServlet
package com.bjpowernode.javaweb.servlet;import jakarta.servlet.*;import java.io.IOException;import java.io.PrintWriter;import java.util.Enumeration;//Servletconfig接口详细信息 13///研究Servletconfig 13-14 class ConfigTestServlet extends GenericServlet { @Override public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { //以下两句话可以在浏览器上打印 response.setContentType("text/html"); PrintWriter out = response.getWriter(); //获得Servletconfig对象 ServletConfig config = this.getServletConfig(); ///输出对象 ///在浏览器上输出 // Servletconfig的对象是:org.apache.catalina.core.StandardWrapperFacade@4b8c081 out.print("Servletconfig的对象是:"+config); out.print("");//换行 // configTest在configTest中间,即name String servletName = config.getServletName(); out.print(""+servletName+"");//configTest out.print(""); out.print(""); // 通过ServletConfig对象的两种方法,可获得web.xml文件中的初始参数配置信息。 // java.util.EnumerationgetInitParameterNames() // getInitParameterNames()取name // namee获取所有初始参数 ////获取结果集中在一起 Enumeration initParameterNames = config.getInitParameterNames(); ///遍历集合 while (initParameterNames.hasMoreElements()) {///是否有更多的元素? String parameterName = initParameterNames.nextElement();//取元素即取出name String ParameterVal = config.getInitParameter(parameterName);//通过这样取valuee out.print(parameterName+" = "+ParameterVal); out.print(""); } //java.lang.String getInitParameter(java.lang.String name) //getinitparametervalue // value///// String driver = config.getInitParameter("driver");// out.print(driver);//com.mysql.cj.jdbc.Driver // 实际上,获得Servlet对象的初始化参数,不需要获得ServletConfig对象。也可以直接通过this。 ///因为genericservlet提供getinitParamererter(name)以及getinitparameternames() Enumeration names = this.getInitParameterNames(); while(names.hasMoreElements(){///判断是否有更多的元素 String name = names.nextElement();//取元素 String value = this.getInitParameter(name);///根据name取value ////直接在控制台上输出 System.out.println(name+" = "+value); } //Servletcontext接口详细说明 14 // 如何获得Servletcontext对象? // 第一种方法是通过Servletconfig对象获得Servletcontext对象。 ServletContext application = config.getServletContext(); ///输出结果org.apache.catalina.core.ApplicationContextFacade@96784a4 out.print(""+application); // 第二种方法:Servletcontext对象也可以通过this获得。 ServletContext application = this.getServletContext(); ///输出结果org.apache.catalina.core.ApplicationContextFacade@96784a4 out.print(""+application); }}
configtestervlet2
package com.bjpowernode.javaweb.servlet;import jakarta.servlet.*;import java.io.IOException;import java.io.PrintWriter;///研究Servletconfig 一个Servlet对象中有一个Servletconfig对象。(Servlet和Servletconfig是一对一的。)public class configtestervlet2 extends GenericServlet { @Override public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { //以下两句话可以在浏览器上打印 response.setContentType("text/html"); PrintWriter out = response.getWriter(); //获得Servletconfig对象 ServletConfig config = this.getServletConfig(); ///输出对象 ///在浏览器上输出 ///Servletconfig对象为:org.apache.catalina.core.StandardWrapperFacade@6c388349 ///这个输出结果不同于ConfigTestservlet中的ServletConfig对象 ///Servlet和Servletconfig对象一对一 out.print(ServletConfig对象为:"+config); ///value获取初始化信息 String value = config.getInitParameter("key"); out.print(""+value);//value }}
web配置文件.xml
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"><!-- 这是Configtestservlet的servlet配置--> <servlet> <servlet-name>configTest</servlet-name> <servlet-class>com.bjpowernode.javaweb.servlet.ConfigTestServlet</servlet-class><!-- 这里可以配置Servlet对象的初始化信息--> <init-param> <param-name>driver</param-name> <param-value>com.mysql.cj.jdbc.Driver</param-value> </init-param> <init-param> <param-name>url</param-name> <param-value>jdbc:mysql://localhost:3306/bjpowernode</param-value> </init-param> <init-param> <param-name>user</param-name> <param-value>root</param-value> </init-param> <init-param> <param-name>password</param-name> <param-value>root1234</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>configTest</servlet-name> <url-pattern>/test</url-pattern> </servlet-mapping> <!-- 这是Configteservlet2的servlet配置--> <servlet> <servlet-name>Test,config222</servlet-name> <servlet-class>com.bjpowernode.javaweb.servlet.configtestervlet2</servlet-class> <init-param> <param-name>key</param-name> <param-value>value</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>Test,config222</servlet-name> <url-pattern>/test2</url-pattern> </servlet-mapping></web-app>
4.总结15
-什么是Servletconfig?
-配置Servlet对象的信息对象。
标签中的配置信息。(web.servlet在xml文件中的配置信息)
-Servlet对应Servletconfig对象。
-servlet对象是tomcat服务器创建,servletconfig对象也是tomcat服务器创建。默认情况下,它们是在用户发送第一个请求时创建的。
-当Tomcat服务器调用Servlet对象的init方法时,需要向init方法传输Servletconfig对象的参数。
-Tomcat服务器实现了Servletconfig接口的实现类。(Tomcat服务器是指WEB服务器。)
-ServletConfig接口常用的方法有哪些?
publicStringgetInitParameter(Stringname);///通过初始参数的name获得value
getInitParameterNames();////name获取所有初始化参数
publicServletContextgetServletContext();///获得Servletcontext对象
publicStringgetServletName();///获得Servletnamee
-在servlet类中,可以使用this调用上述方法。因为genericservlet实现了servletconfig接口。