2014-02-17 61 views
1

我正在使用運行在Tomcat 7.0.41中的NetBeans編寫J2EE Web應用程序。我創建了一個部署描述符web.xml,其中包含四個上下文參數。我創建了一個擴展HttpServlet的類。在類的init方法中,當我從ServletConfig實例調用getInitParameterNames時,我得到一個空的枚舉。最終,我懷疑Tomcat根本就沒有讀取web.xml文件,因爲我必須訴諸使用@WebServlet註釋甚至完全訪問servlet。任何人都可以提出爲什麼我不能訪問context-params和/或爲什麼Tomcat沒有讀取web.xml文件?無法從web.xml讀取上下文參數

下面是web.xml文件:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
<context-param> 
    <param-name>preptimeminutes</param-name> 
    <param-value>60</param-value> 
</context-param> 
<context-param> 
    <param-name>preptimehours</param-name> 
    <param-value>0</param-value> 
</context-param> 
<context-param> 
    <param-name>servings</param-name> 
    <param-value>1</param-value> 
</context-param> 
<context-param> 
    <param-name>calories</param-name> 
    <param-value>100</param-value> 
</context-param> 
<session-config> 
    <session-timeout> 
     30 
    </session-timeout> 
</session-config> 

下面是init方法的代碼:

@Override 
public void init(ServletConfig servletConfig) throws ServletException 
{ 
    int preptemp; 
    String tempString1, tempString2; 
    Enumeration<String> e = servletConfig.getInitParameterNames(); 

this.servletConfig = servletConfig; 
    servletContext = servletConfig.getServletContext(); 

    try 
    { 
     while(e.hasMoreElements()) 
     { 
      servletContext.log(e.nextElement());  
     } 
    } ... 
} 

感謝,

傑森Mazzotta

+0

這將有助於看到你的web.xml和從你的servlet代碼段。 – cosjav

+1

是否將web.xml部署到正確的位置?它在啓動時是否有任何錯誤? –

+0

啓動時未報告錯誤。 web.xml文件位於context.xml中列出的docBase的WEB-INF子目錄中。 – user2985081

回答

0

它se ems你想讀取ServletContex(整個應用程序的參數)的參數,但是你最終讀到ServletConfig(特定servlet的)。

另一個潛在的問題是你重寫init(ServletConfig)而不是init()。不應該重寫第一個方法,因爲它處理許多servlet生命週期任務,如將servlet添加到可用的servlet池中。如果你想添加一些東西到初始化過程中,你應該重寫init()方法,這個方法稍後會被init(ServletConfig)調用。

因此,嘗試可能像

@Override 
public void init() throws ServletException 
{ 
    ServletContext servletContext = getServletContext(); 
    Enumeration<String> e = servletContext.getInitParameterNames(); 
    try 
    { 
     while(e.hasMoreElements()) 
     { 
      servletContext.log(e.nextElement());  
     } 
    } ... 
} 
+0

...或者從init(ServletConfig配置)調用'super(config)'。 – EJP

+0

@EJP同意,但是重寫'init()'而不是'init(ServletConfig)'更好,所以我決定跳過這個變種在回答。我在[comment]中提到過它(http://stackoverflow.com/questions/21819064/cant-read-context-params-from-web-xml/21820171?noredirect=1#comment33021536_21819064),但將其置於答案中看起來像鼓勵別人使用它,這是我試圖避免的。 – Pshemo

相關問題