ServletConfig接口

ServletConfig接口简介

在 Servlet 接口的 init()方法中有一个参数 ServletConfig,这个参数类型是个接口,里面是一些 在 web.xml 中对当前 Servlet类的配置信息。Servlet 规范将Servlet 的配置信息全部封装到了 ServletConfig 接口对象中。在tomcat调用 init()方法时,首先会将 web.xml 中当前 Servlet 类的配置信息封装为一个对象。这个对象的类型实现了 ServletConfig 接口, Web 容器会将这个对象传递给init()方法中的 ServletConfig 参数。

ServletConfig中的方法

  • getInitParameter(): 获取指定名称的初始化参数值。例如从下面的servlet中调用 getInitParameter("userName");方法会返回字符串"monkey1024"。
  • getInitParameterNames():获取当前 Servlet 所有的初始化参数名称。其返回值为枚举类型 Enumeration
  • getServletName():获取当前 Servlet 的中指定的 Servlet名称。如下面中的 ServletName 为"configServlet"。
  • getServletContext():获取到当前 Servlet 的上下文对象 ServletContext,这是个非常重要的对象,将在下一节中详细介绍。

示例:

在配置web.xml时,可以为servlet指定多个初始化参数:

  <servlet>
      <servlet-name>configServlet01</servlet-name>
      <servlet-class>com.monkey1024.servlet.ConfigTest01</servlet-class>
      <init-param>
          <param-name>userName</param-name>
          <param-value>monkey1024</param-value>
      </init-param>
      <init-param>
          <param-name>password</param-name>
          <param-value>123456</param-value>
      </init-param>
  </servlet>
  <servlet-mapping>
      <servlet-name>configServlet01</servlet-name>
      <url-pattern>/config01</url-pattern>
  </servlet-mapping>

创建一个servlet:

package com.monkey1024.servlet;

import java.io.IOException;
import java.util.Enumeration;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**
 * ServletConfig接口
 *
 */
public class ConfigTest01 implements Servlet {

    private ServletConfig config;

    @Override
    public void destroy() {

    }

    @Override
    public ServletConfig getServletConfig() {
        return this.config;
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init方法中ServletConfig:" + servletConfig);
        this.config = servletConfig;
    }

    @Override
    public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
        String userName = config.getInitParameter("userName");
        System.out.println("userName=" + userName);
        Enumeration<String> param = config.getInitParameterNames();

        while(param.hasMoreElements()){
            String name = param.nextElement();
            String value = config.getInitParameter(name);
            System.out.println(name + "=" +  value);
        }

        System.out.println("ServletName=" + config.getServletName());

    }

}

ServletConfig的特点

每一个servlet都对应一个ServletConfig用于封装各自的配置信息,即有几个servlet就会产生几个ServletConfig对象。