当前位置: 首页 > 图灵资讯 > 技术篇> ServletConfig接口详情

ServletConfig接口详情

来源:图灵教育
时间:2023-05-22 09:22:29

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对象?它是什么时候创建的?13

Tomcat服务器(WEB服务器)创建了Servletconfig对象。

创建Servlet对象时,同时创建Servletconfig对象。

3.1Servletconfig接口到底是干什么的?有什么用?13

Config是哪个单词的缩写?

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接口。