2013-01-08 14 views
1

我正在開發使用servlet的Web開發的第一步。現在我試圖檢索servlet的一些初始參數以及上下文。他們在web.xml中聲明如下:getInitParameterNames()不會獲得init參數

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> 
    <display-name>JediWebTutorial</display-name> 
    **<context-param> 
     <param-name>contextParam</param-name> 
     <param-value>contextValue</param-value> 
    </context-param>** 
    <servlet> 
     <servlet-name>GreeterServlet</servlet-name> 
     <servlet-class>jedi.servlets.GreeterServlet</servlet-class> 
     **<init-param> 
      <param-name>servletParam</param-name> 
      <param-value>servletValue</param-value>  
     </init-param>** 
    </servlet> 
    <servlet> 
     <servlet-name>GetParameterValuesServlet</servlet-name> 
... 

我試圖在GreeterServlet內得到它,在doGet方法,如:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

    ServletConfig config = getServletConfig(); 
    ServletContext context = config.getServletContext(); 
    Enumeration<String> servletParams = config.getInitParameterNames(); 
    Enumeration<String> contextParams = context.getInitParameterNames(); 

    for (String param : Collections.list(servletParams)) { 
     System.out.println(param); 
    } 

    for (String param : Collections.list(contextParams)) { 
     System.out.println(param); 
    } 
... 

正如預期的那樣,控制檯顯示名稱「contextParam」。但是,它不打印「servletParam」名稱。

我一直在掙扎幾個小時,並且確信節點在裏面,我不會以任何方式重寫GreeterServlet的init()方法(因爲它在某些情況下被報告爲導致問題的原因許多討論列表)。我還沒有在網上發現類似的情況 - 也許因爲太過簡單,我太開心了。無論如何,感謝任何懶得看看它的人!

順便說一句,如果有幫助,我使用TomCat 7.0.34和Eclipse Helios。

回答

-1

我應該添加這個作爲評論,但不知何故,我沒有得到這個問題的「添加評論」鏈接,因此張貼爲答案。

哪個servlet是您公佈的doGet()方法的一部分?它看起來像是GetParameterValuesServlet的一部分,並且您已將init params添加到GreeterServlet。

+0

謝謝,但它確實是GreeterServlet的doGet方法。 – TitoFHR

+0

我使用了與原始文章中發佈的完全相同的代碼,並且打印了「servletParam」和「contextParam」。我不知道爲什麼你沒有得到相同的輸出。 –

1

在這個問題上,我發現一個servlet的初始化參數,可以訪問下面的方式(對於上面的問題)工作:

ServletContext context = config.getServletContext(); 
ServletRegistration register = context.getServletRegistration("GreeterServlet"); 
String servletParam = register.getInitParameter("servletParam"); 
System.out.println(servletParam); 

什麼將打印預期servletValue

這確實是一個解決方案,即使它沒有回答前面的問題。如果有人遇到類似的問題,試試吧!如果有人找出原始問題的解決方案,它肯定會好起來的! ;-)