Servlet中初始化引數和上下文引數的配置
在Java Web開發中。常量資訊通常傾向於寫在配置檔案中。這樣需求變化時只需要修改一下配置檔案就可以了。而不用大量的改動程式碼並造成程式的重新編譯。web.xml提供了這種配置初始化引數的功能。
<servlet>
<servlet-name>ServletParamTest</servlet-name>
<servlet-class>servlet.ServletParamTest</servlet-class>
<init-param>
<param-name>helloween</param-name> <!--第一個引數-->
<param-value>password</param-value> <!--第一個引數的引數值-->
</init-param>
<init-param>
<param-name>admin</param-name> <!--第二個引數-->
<param-value>admin</param-value> <!--第二個引數的引數值-->
</init-param>
<init-param>
<param-name>babyface</param-name> <!--第三個引數-->
<param-value>babyface</param-value> <!--第二個引數的引數值-->
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ServletParamTest</servlet-name>
<url-pattern>/servlet</url-pattern>
</servlet-mapping>
Servlet中提供方法getInitParameter(String param)來獲取初始化引數值。還可以使用方法getInitParameterNames()來返回所有配置引數的名稱的集合。這個集合為列舉型別。這種配置方式只可以在該Servlet種才可對其實現取值。而其他的Servlet中則不可以。因為它是配置在某一個<servlet></servlet>配置節內的。
舉一個取值的例子:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("GBK");
response.setCharacterEncoding("GBK");
response.setContentType("text/html");
Enumeration parmas=this.getInitParameterNames(); //只獲得所有引數名稱。而不獲得引數值
while(parmas.hasMoreElements()) //判斷條件為列舉型別裡是否有至少一個值
{
String name1=(String) parmas.nextElement(); //獲取下一個引數名稱
String name=getInitParameter(name1); //根據引數名稱獲得引數值
request.setAttribute("name", name);
}
response.sendRedirect("index.jsp");
而要做到每個Servlet中都可取到的引數則需要上下文引數。而它需要使用標籤<context-param>來配置
<context-param>
<param-name>helloween</param-name> <!--第一個引數-->
<param-value>password</param-value> <!--第一個引數的引數值-->
</context-param>
<context-param>
<param-name>admin</param-name> <!--第二個引數-->
<param-value>admin</param-value> <!--第二個引數的引數值-->
</context-param>
<context-param>
<param-name>babyface</param-name> <!--第三個引數-->
<param-value>babyface</param-value> <!--第二個引數的引數值-->
</context-param>
獲取context-param可以使用ServletContext物件。Servlet中通過getServletConfig().getServletContext()來獲取ServletContext物件,使用該物件的getInitParameter()方法獲取指定名稱的引數值。getInitParameterNames()獲取所有引數名稱。
在Java 5.0裡開始引入註解的概念。而是用註解可以實現不用Servlet主動讀取配置的引數。而由WEB容器啟動時自動把web.xml裡配置的資訊注射到Servlet裡。不需要編寫任何程式碼。明天說這個。今天睡覺了。