基本概念
- ServletConfig用于配置Servlet的参数:在Servlet的配置文件中,可以使用一个或者是多个<init-param> 标签为Servlet配置一些初始化参数。当有些Servlet参数需要灵活可配置时,就可以用ServletConfig来实现。
- 当配置完这些初始化参数后,Tomcat在创建Servlet实例对象时回自动的将这些参数封装到ServletConfig当中,并在调用Servlet的初始化方法时将ServletConfig对象传递给Servlet。
- 开发人员可以通过ServletConfig对象获取当前Servlet初始化的参数信息。
- ServletConfig 可以用来配置Servlet的编码属性/数据库连接属性/配置文件的路径,因为它是针对单个Servlet的配置,在实际开发并不经常被使用。
示例:配置FirstServletConfig的初始化参数
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <servlet> <servlet-name>FirstServletConfig</servlet-name> <servlet-class>servletConfig.FirstServletConfig</servlet-class> <!-- init-param的key-value paris可以通过ServletConfig传递到Servlet中 --> <init-param> <param-name>testServletConfig</param-name> <param-value>GetFirstServletConfig</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>FirstServletConfig</servlet-name> <url-pattern>/FirstServletConfig</url-pattern> </servlet-mapping> <servlet> <servlet-name>OverrideServletConfig</servlet-name> <servlet-class>servletConfig.OverrideServletConfig</servlet-class> <!-- init-param的key-value paris可以通过ServletConfig传递到Servlet中 --> <init-param> <param-name>OverrideServletConfig</param-name> <param-value>OverrideServletConfig</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>OverrideServletConfig</servlet-name> <url-pattern>/OverrideServletConfig</url-pattern> </servlet-mapping> </web-app>
示例:通过 this.getServletConfig() 获取传递进来的ServletConfig对象
package servletConfig; import java.util.Enumeration; import javax.servlet.ServletConfig; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /* * 1.在web-xml中的servlet下面配置<init-param> * 2.获取ServletConfig对象:this.getServletConfig() 或者是申明ServletConfig config,然后重写初始化方法,直接调用config对象。(二选一,不能共存) * 3.通过config.getInitParameter(name) 获取特定初始化参数 或者是 config.getInitParameterNames()获取所有初始化参数名 * */ public class FirstServletConfig extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) { enumServletConfigInitParams(); } public void enumServletConfigInitParams() { // 通过this.getServletConfig() 获取Tomcat传递的ServletConfig对象 Enumeration<String> initParas = this.getServletConfig().getInitParameterNames(); String name, value; while (initParas.hasMoreElements()) { name = initParas.nextElement(); value = this.getServletConfig().getInitParameter(name); System.out.println("name:" + name); System.out.println("value:" + value); } } }
示例:通过重载Servlet初始化方法,获取传递进来的ServletConfig对象
package servletConfig; import javax.servlet.ServletConfig; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class OverrideServletConfig extends HttpServlet{ private ServletConfig config; public void doGet(HttpServletRequest request, HttpServletResponse response) { getServletConfigInitParamByName(); } public void getServletConfigInitParamByName() { //通过输入特定的初始化参数名称获得初始化参数值 String value = this.config.getInitParameter("OverrideServletConfig"); System.out.println("value:" + value); } //重写了Servlet的初始化方法,把服务器封装的ServletConfig传递给了当前Servlet的私有Config对象 //一旦重写了此方法,不能够再调用 this.getServletConfig()获取当前Servlet的ServletConfig对象,只能通过传递过来的私有变量config来操作。 public void init(ServletConfig config){ this.config=config; } }