设置初始化参数与 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)
在 doGet 或 doPost 中使用参数:
// 获取指定的初始化参数
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)
Previous: Servlet 线程安全问题
Next: ServletContext 对象