ServletConfig的使用

Web容器为每个Servlet创建一个ServletConfig对象。该对象可用于从web.xml文件获取配置信息。

如果从web.xml文件修改了配置信息,则无需更改Servlet。因此,如果您可以把经常改变的参数配置到web.xml,通过ServletConfig对象来读取。

1 ServletConfig的好处

ServletConfig的核心优点是,如果在web.xml文件中修改了信息,则无需重新修改Servlet源码文件。

2 ServletConfig的方法

  1. public String getInitParameter(String name):返回指定参数名称的参数值。
  2. public Enumeration getInitParameterNames():返回所有初始化参数名称的枚举。
  3. public String getServletName():返回Servlet的名称。
  4. public ServletContext getServletContext():返回ServletContext的对象。

3 获取ServletConfig对象

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

ServletConfig config = getServletConfig();  

4 使用ServletConfig读取参数

Servlet的init-param标签用于指定Servlet的初始化参数。

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

5 读取指定参数的案例

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

5.1 编写DemoServlet

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

/**
 * 一点教程网 - http://www.yiidian.com
 */
public class DemoServlet extends HttpServlet{

    public void doGet(HttpServletRequest req,HttpServletResponse res)
            throws ServletException,IOException
    {
        res.setContentType("text/html;charset=utf-8");
        PrintWriter out = res.getWriter();

        ServletConfig config=getServletConfig();
        String driver=config.getInitParameter("driver");
        out.print("驱动名称: "+driver);

        out.close();
    }

}

5.2 配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <servlet>
        <servlet-name>DemoServlet</servlet-name>
        <servlet-class>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>/demo</url-pattern>
   </servlet-mapping>
    

</web-app>

5.3 运行测试

访问:http://localhost:8080/demo,效果如下:

6 读取所有参数的案例

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

6.1 编写DemoServlet

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

/**
 * 一点教程网 - http://www.yiidian.com
 */
public class DemoServlet extends HttpServlet{

    public void doGet(HttpServletRequest req,HttpServletResponse res)
            throws ServletException,IOException
    {
        res.setContentType("text/html;charset=utf-8");
        PrintWriter out = res.getWriter();

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

        String str="";
        while(e.hasMoreElements()){
            str=e.nextElement();
            out.print("<br>参数名称: "+str);
            out.print("参数值: "+config.getInitParameter(str));
        }

        out.close();
    }

}

6.2 配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <servlet>
        <servlet-name>DemoServlet</servlet-name>
        <servlet-class>DemoServlet</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>/demo</url-pattern>
   </servlet-mapping>
    

</web-app>

6.3 运行测试

访问:http://localhost:8080/demo,效果如下:

热门文章

优秀文章