Web容器为每个Servlet创建一个ServletConfig对象。该对象可用于从web.xml文件中读取配置信息。
只需要修改web.xml文件中的配置信息,而无需编辑servlet文件修改。因此,如果不时修改任何特定内容,则更易于管理Web应用程序。

1. ServletConfig的优点

ServletConfig的主要优点是:只需要修改web.xml文件中的配置信息,而无需编辑servlet文件修改。

2. ServletConfig接口的方法

  • public String getInitParameter(String name) - 返回指定参数名称的参数值。
  • public Enumeration getInitParameterNames() - 返回所有初始化参数名称的枚举。
  • public String getServletName() - 返回servlet的名称。
  • public ServletContext getServletContext() - 返回ServletContext的对象。

3. 如何获取ServletConfig的对象

Servlet接口的getServletConfig()方法返回ServletConfig的对象。

getServletConfig()方法的语法:

public ServletConfig getServletConfig();

getServletConfig()方法的示例:

ServletConfig config=getServletConfig();  
//Now we can call the methods of ServletConfig interface

Servlet提供初始化参数的语法

servlet的init-param子元素用于指定servlet的初始化参数。代码片段如下所示:

<web-app>  
  <servlet>  
    ......  

    <init-param>  
      <param-name>parametername</param-name>  
      <param-value>parametervalue</param-value>  
    </init-param>  
    ......  
  </servlet>  
</web-app>

4. ServletConfig初始化参数示例

在此示例中,我们从web.xml文件中获得一个初始化参数,并将此信息打印在servlet中。

打开Eclipse,创建一个动态web项目:servletconfig,完整项目结构如下:
servletconfig

创建一个Servlet文件:DemoServlet.java

package com.xntutor.servlet;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class DemoServlet extends HttpServlet {
    public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException {

        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        ServletConfig config = getServletConfig();
        String driver = config.getInitParameter("driver");
        out.print("Driver is: " + driver);

        out.close();
    }

}

文件:web.xml

<?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"
    id="WebApp_ID" version="3.0">
    <display-name>servletconfig</display-name>
    <servlet>
        <servlet-name>DemoServlet</servlet-name>
        <servlet-class>com.xntutor.servlet.DemoServlet</servlet-class>

        <init-param>
            <param-name>driver</param-name>
            <param-value>sun.jdbc.odbc.JdbcOdbcDriver</param-value>
        </init-param>

    </servlet>

    <servlet-mapping>
        <servlet-name>DemoServlet</servlet-name>
        <url-pattern>/servlet1</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
</web-app>

启动Tomcat服务器,打开浏览器访问下面URL:

得到以下结果:

5. 获取所有ServletConfig初始化参数

在此示例中,我们从web.xml文件中获取所有初始化参数,并将这些信息打印在servlet中。

创建一个Servlet文件:DemoServlet2.java

package com.xntutor.servlet;

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

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DemoServlet2 extends HttpServlet {
    public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException {

        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        ServletConfig config = getServletConfig();
        Enumeration<String> e = config.getInitParameterNames();

        String str = "";
        while (e.hasMoreElements()) {
            str = e.nextElement();
            out.print("<br>Name: " + str);
            out.print(" value: " + config.getInitParameter(str));
        }

        out.close();
    }

}

文件:web.xml

<?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"
    id="WebApp_ID" version="3.0">
    <display-name>servletconfig</display-name>
    <servlet>
        <servlet-name>DemoServlet</servlet-name>
        <servlet-class>com.xntutor.servlet.DemoServlet2</servlet-class>
        <init-param>
            <param-name>username</param-name>
            <param-value>system</param-value>
        </init-param>
        <init-param>
            <param-name>password</param-name>
            <param-value>oracle</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>DemoServlet</servlet-name>
        <url-pattern>/servlet2</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
</web-app>

启动Tomcat服务器,打开浏览器访问下面URL:

得到以下结果: