Servlet学习之ServletConfig
ServletConfig在Servlet中扮演的角色
-
用于加载Servlet的初始化参数,在一个web应用可以存在多个ServletConfig对象,一个Servlet对应一个ServletConfig对象。
-
初始化参数的作用: 我们可以将一些servlet运行时需要加载常量定义在初始化参数中,当我们需要使用时,可以直接通过ServletConfig获取到这些值。
配置初始化参数
ServletConfig对象的获取
1、通过重写父类有参的init(ServletConfig config)方法获得,查看源码可以知道有参的init(ServletConfig config)的参数类型就是ServletConfig类型的。
//1、创建私有变量
private ServletConfig config = null;
//2、重写init方法,从而获取ServletConfig对象
this.config = config
2、通过继承父类(GenericServlet)的方法得到一个ServletConfig对象
// 得到ServletConfig对象
ServletConfig config = this.getServletConfig();
ServletConfigAPI的介绍
1、String getServletName():获得是我们在web.xml中配置的中的内容,也就是返回是Servlet实例的名字。
2、String getInitParameter(String name):获取在servlet中初始化参数的值。这里注意与全局初始化参数的区分。这个获取的只是在该servlet下的初始化参数
3、Enumeration getInitParameterNames(): 获取当前Servlet所有初始化参数的名字组成的枚举,返回值类型是:Enumeration
4、ServletContext getServletContext():获取代表当前web应用的ServletContext对象(后期会进行介绍 )
ServletConfig的代码测试
创建一个MyConfig的Servlet类,然后在web.xml中的标签下,通过标签为这个servlet配置两个初始化参数:
<servlet>
<servlet-name>MyConfig</servlet-name>
<servlet-class>com.syj.ServletConfig.MyConfig</servlet-class>
<init-param>
<param-name>username</param-name>
<param-value>tom</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>root</param-value>
</init-param>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>MyConfig</servlet-name>
<url-pattern>/myConfig</url-pattern>
</servlet-mapping>
利用提供的API获取参数名和参数值:
public class MyConfig extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletConfig config = this.getServletConfig();
// 1、获取ServletConfig对象
// 获取当前Servlet在web.xml配置的名称。
// 使用的方法是:getServletName()
String servletName = config.getServletName();
System.out.println(servletName);
// 根据<init-param>中<param-name>的名字获取指定的<param-value>的值
// 使用的方法是:getInitParamter(String name)
String pusername = config.getInitParameter("username");
String pencoding = config.getInitParameter("encoding");
System.out.println("getInitParameter得到encoding:"+pusername);
System.out.println("getInitParameter得到encoding:"+pencoding);
// 根据<init-param>获取所有的<param-name>的值返回值类型:Enumeration
// 使用的方法是:getInitParamterNames()
Enumeration<String> initParameterNames = config.getInitParameterNames();
// 遍历得到的参数名
while (initParameterNames.hasMoreElements()) {
String name = initParameterNames.nextElement();
String value = config.getInitParameter(name);
System.out.println("getInitParameterNames方法得到:"+name + ":" + value);
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
ServletConfig补充
- 每一个servlet都有自己的ServletConfig对象,也就是说它是单例的。
- ServletConfig对象是由服务器创建的,通过Servlet中init方法传递到Servlet中。
- ServletConfig对象表示Servlet的配置对象,我们可以通过它获取Servlet的名称与相关的初始化参数。
- 我们可以通过ServletConfig获取 ServletContext对象。
ServletContext config = this.getServletContext ();