這一節將介紹 ServletContext 和 ServletConfig 這兩個介面。 通過這兩個介面,我們可以在web.xml中設定一些參數,如資料庫地址、使用者名稱密碼等,供 Servlet 使用, 這樣每次參數值變動時,不用重新編譯Servlet了。
javax.servlet.ServletContext介面(上下文參數)是針對整個項目的全域設定, 而javax.servlet.ServletConfig介面(初始化參數)是針對當前Servlet的設定。 兩者的設定內容都寫在web.xml中。在Eclipse中建立Servlet時, 可以看到設定初始化參數的位置,如下圖:
而上下文參數就沒這麼方便,只能通過手工編輯web.xml來添加了。 好在Eclipse提供了方便的XML編輯器, 開啟web.xml之後即可看到各個Servlet的配置情況, 按右鍵最頂層的“web-app”元素,選擇Add Child->context-param, 然後分別修改 param-name 和 param-value 即可。
那麼在程式中如何取得這兩類參數?請看這幾個方法:
javax.servlet.GenericServlet.getServletConfig()
返回當前Servlet的ServletConfig對象。
javax.servlet.ServletConfig.getServletContext()
返回當前應用程式的ServletContext對象。
通過這兩個方法,我們就可以獲得當前Servlet的初始化參數對象和上下文參數對象。
ServletContext的主要方法:
String getInitParameter(String name)
擷取指定上下文參數的值。
ServletConfig的主要方法:
String getInitParameter(String name)
擷取指定初始化參數的值。
java.util.Enumeration getInitParameterNames()
擷取所有的初始化參數的名稱。
樣本程式分別通過ServletContext和ServletContent讀出值並顯示出來。 因為參數值在Servlet的生命週期中是不變的,僅需讀取一次即可, 所以將取得參數的代碼寫在了 init() 方法而不是 doGet()方法中。 其他沒什麼特別需要說明的地方,參數追加的方法參考前文即可。
樣本下載:initparam_jb51net.zip
+++++++++++++++++++++++++++++++++++++==
複製代碼 代碼如下:
package com.idv2.learnjsp;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class for Servlet: InitParam
*
*/
public class InitParam extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
/**
* 自動產生的序號
*/
private static final long serialVersionUID = 7732869603825506920L;
/**
* 程式名稱
*/
private String appName;
/**
* 頁面標題
*/
private String title;
public void init() {
// 擷取參數
ServletConfig config = getServletConfig();
ServletContext context = config.getServletContext();
title = config.getInitParameter("title");
appName = context.getInitParameter("appname");
}
/* (non-Java-doc)
* @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>" + title + "</title>");
out.println("</head>");
out.println("<body>");
out.println("Application name: " + appName);
out.println("</body>");
out.println("</html>");
}
}