ServletConfig配置初始化参数

设置初始化参数与 ServletConfig 使用

在 Servlet 的配置文件 web.xml 中,可以使用一个或多个 <init-param> 标签为 Servlet 配置初始化参数。注意,这些标签是放在 <servlet> 标签内部的。

<servlet>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>cn.bamn.demo.LoginServlet</servlet-class>
    <!-- 配置 LoginServlet 的初始化参数 -->
    <init-param>
        <param-name>name</param-name>
        <param-value>sa</param-value>
    </init-param>
    <init-param>
        <param-name>password</param-name>
        <param-value>123456</param-value>
    </init-param>
    <init-param>
        <param-name>charset</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</servlet>Code language: HTML, XML (xml)

通过 ServletConfig 获取初始化参数

当 Servlet 配置了初始化参数后,Web 容器在创建 Servlet 实例对象时,会自动将这些初始化参数封装到 ServletConfig 对象中,并在调用 Servlet 的 init 方法时将其传递给 Servlet。通过 ServletConfig 对象即可获取当前 Servlet 的初始化参数信息。

定义全局变量接收 ServletConfig

private ServletConfig config; // 全局变量,所有线程共享Code language: PHP (php)

init 方法中接收:

@Override
public void init(ServletConfig config) throws ServletException {
    this.config = config;
}Code language: JavaScript (javascript)

doGetdoPost 中使用参数:

// 获取指定的初始化参数
String paramVal = this.config.getInitParameter("name");
response.getWriter().print(paramVal);

response.getWriter().print("<hr/>");

// 获取所有的初始化参数
Enumeration<String> e = config.getInitParameterNames();
while(e.hasMoreElements()){
    String name = e.nextElement();
    String value = config.getInitParameter(name);
    response.getWriter().print(name + "=" + value + "<br/>");
}Code language: JavaScript (javascript)

作用域限制

每个 Servlet 只能访问自己的初始化参数。如果在其他 Servlet 中尝试读取另一个 Servlet 的初始化参数,会导致 NullPointerException

严重: Servlet.service() for servlet [DefaultServlet] in context with path [/ServletDemo] threw exception
java.lang.NullPointerException
    at org.apache.catalina.connector.CoyoteWriter.write(CoyoteWriter.java:180)
    at cn.bamn.demo.NofundServlet.doGet(NofundServlet.java:39)
    ...Code language: CSS (css)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注