1、什么是ServletConfig ?
这个接口是Servlet 规范中的一个成员;
ServletConfig 是一个接口;
2、谁去实现了这个接口?
org.apache.catalina.core.StandardWrapperFacade 实现了这个接口;
结论是:Tomcat 服务器实现了这个 ServletConfig 接口
思考:
- 当服务器更换了之后,把Tomcat 换成了 jetty 之后,输出ServletConfig对象的时候,还是会出现同样的输出结果吗?
此时的输出是不一样的,因为在不同的服务器实现的不一样,可能包名是不一样的,类名可能不一样,但是都会实现ServletConfig 规范;
3、两个Servlet 类共享一个ServletConfig 对象吗?
不会的,一个Servlet 对象会关联一个 ServletConfig 对象
两者之间是一个一对一的关系
4、ServletConfig 对象是谁创建的?在什么时候创建的?
Tomcat(WEB 服务器)创建了 ServletConfig 对象;
在Servlet 对象创建的时候 ServLetConfig 对象基本就是同时被创建出来的; (所谓的Servllet 对象就是比如UserServlet 等一系列相关的类创建的对象)
5、ServletConfig 接口到底是做什么使用的?作用是什么?
Configuration(配置的意思)
ServletConfig 对象可以翻译为:Servlet 对象的配置信息对象;
就是web.xml 的相关配置信息,经过了Tomcat 会把 xml 文件的信息自动的包装成为了一个ServletConfig 对象,里面装配了一些信息;就是叫做配置信息对象
6、ServletConfig 对象中到底包装了什么信息?
<servlet>
<servlet-name>UserServlet</servlet-name>
<servlet-class>com.luobin.servlet.myservlet.UserServlet</servlet-class>
</servlet>
ServletConfig 对象中包装的信息是:web.xml 中 标签俩面的内容;
小结一下就是:Tomcat 通过了对于 标签的解析,将 标签里面内容包装到 ServletConfig 对象里面
7、ServletConfig 里面都有什么方法呢?主要是存在 4 个方法
<servlet>
<servlet-name>ServletConfig1</servlet-name>
<servlet-class>com.luobin.javaweb.servlet.ConfigTestServlet01</servlet-class>
<!-- 在这个位置可以配置 Servlet 对象的初始化信息 -->
<init-param>
<param-name>username</param-name>
<param-value>root</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>123456</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ServletConfig1</servlet-name>
<url-pattern>/ServletConfig01</url-pattern>
</servlet-mapping>
上面的 标签里面的 是初始化参数,这个初始化参数可以被 Tomcat 自动的封装到ServletConfig 对象里面的;
// 通过使用ServletConfig 对象的两个方法,可以获取到 web.xml 文件中的初始化参数配置信息;
Enumeration<String> initParameterNames = config.getInitParameterNames();
// 遍历集合
out.println("<br>");
while (initParameterNames.hasMoreElements()) {
String parameterName = initParameterNames.nextElement();
out.println("<br>");
out.println( "配置的参数的名字为: " + parameterName);
}
out.println("<br>");
String username = config.getInitParameter("username");
out.println("init 配置的参数的值为 :" + username);
主要拥有的方法有:
1、config.getInitParameterNames(); // 获取到Init 时候的所有参数的名字;
2、config.getInitParameter(“username”); // 获取到通过参数的名字映射得到参数的值;
下面是原代码里面接口的实现:
package javax.servlet;
import java.util.Enumeration;
public interface ServletConfig {
String getServletName();
ServletContext getServletContext();
String getInitParameter(String var1);
Enumeration<String> getInitParameterNames();
}
8、 使用this 调用了 ServletConfig 里面的方法也是可以的,因为GenericServlet 这个方法实现了ServletConfig 这个接口,
- 实际上,获取一个Servlet 对象的初始化参数,是可以不获取ServletConfig 对象的,直接通过 this 也是可以实现的
// 父类是具有这个方法的,所以子类可以直接调用即可,不需要中间的对象的创建了
this.getInitParameterNames();
this.getInitParameter(“username”);