servlet初始化參數配置方式
1. init-param
在部署描述符中的節點下添加節點
<servlet>
<init-param>
<param-name>name</param-name>
<param-value>servlet-value</param-value>
</init-param>
...
</servlet>
之後在對應的Servlet中即可通過獲取ServletConfig對象獲取初始化參數
// 獲取該Servlet的初始化參數
ServletConfig sc = this.getServletConfig();
String servletValue = sc.getInitParameter("name");
這種方式的特點:
- 只有配置了該節點的Servlet纔可以獲取該配置
- 每個Servlet支持一個或多個節點
- 運行機制:Servlet初始化過程中,參數將被封裝到ServletConfig中
2. context-param
在部署描述符中的節點下添加節點
<webapp>
<!-- 全局配置 -->
<context-param>
<param-name>name</param-name>
<param-value>context-value</param-value>
</context-param>
<!-- /全局配置 -->
...
</webapp>
之後在每一個Servlet中都可以獲取該初始化參數
// 獲取整個web應用共享的額初始化參數
ServletContext context = this.getServletContext();
String contextValue = context.getInitParameter("name");
該方式的特點:
- web應用下的每個Servlet都可以獲取該配置
3. 動態配置全局變量
在Servlet中通過ServletContext
的set/getAttribute
方法可以動態設置/獲取全局變量
// 動態保存獲取全局變量
ServletContext context = this.getServletContext();
context.setAttribute("active", "activeValue");
String activeValue = (String) context.getAttribute("active");
完整代碼
<!-- web.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<display-name>Archetype Created Web Application</display-name>
<!-- 全局配置 -->
<context-param>
<param-name>name</param-name>
<param-value>context-value</param-value>
</context-param>
<!-- /全局配置 -->
<!-- 測試初始配置信息Servlet -->
<servlet>
<init-param>
<param-name>name</param-name>
<param-value>servlet-value</param-value>
</init-param>
<servlet-name>InitParam</servlet-name>
<servlet-class>com.dotgua.demo1.InitParam</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>InitParam</servlet-name>
<url-pattern>/param_test</url-pattern>
</servlet-mapping>
<!-- /測試初始配置信息Servlet -->
</web-app>
/**
* InitParam類
*/
package com.dotgua.demo1;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class InitParam extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 獲取該Servlet的初始化參數
ServletConfig sc = this.getServletConfig();
String servletValue = sc.getInitParameter("name");
// 獲取整個web應用共享的額初始化參數
ServletContext context = this.getServletContext();
String contextValue = context.getInitParameter("name");
// 動態保存獲取全局變量
context.setAttribute("active", "activeValue");
String activeValue = (String) context.getAttribute("active");
PrintWriter pw = resp.getWriter();
pw.println("ServletValue = " + servletValue);
pw.println("ContextValue = " + contextValue);
pw.println("activeValue = " + activeValue);
pw.close();
}
}