1. 程式人生 > >Servlet中初始化引數和上下文引數的配置

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裡。不需要編寫任何程式碼。明天說這個。今天睡覺了。