2013-04-04 51 views
0

我正在嘗試爲我的webapp中的配置文件設置一個上下文路徑,但似乎無論我嘗試什麼解決方案,都沒有給出正確的路徑。配置文件位於WEB-INF/Config中。在Struts2中設置ContextPath Action Class給出了錯誤的路徑

我試過使用ServletContextAware來抓取上下文路徑,但它似乎給了我錯誤的路徑。

C:\ Documents和Settings \人\我的文檔 \ Geronimo的tomcat6中,javaee5-2.2斌\ Geronimo的tomcat6中,javaee5-2.2 \ BIN \ [email protected] \ WEB-INF \配置\ config.xml中

private ServletContext context; 
public void setServletContext(ServletContext context) { 
    this.context = context; 
} 
AdminFile = builder.parse(context + "/WEB-INF/config/config.xml"); 

我還試圖通過建立一個org.apache.struts2.ServletActionContext上下文路徑,通過調用ServletActionContext.getServletContext,但是這給了我一個類似的錯誤。

C:\ Documents和Settings \人\我的文檔 \ Geronimo的tomcat6中,javaee5-2.2斌\ Geronimo的tomcat6中,javaee5-2.2 \ BIN \ [email protected] \ WEB-INF \配置\ config.xml中

ServletContext context = ServletActionContext.getServletContext(); 
AdminFile = builder.parse(context + "/WEB-INF/config/config.xml"); 

我終於嘗試使用ServletRequestAware,它給了我更好的成績,但仍然不是完整的上下文路徑,我需要。我也想避免將我的動作類耦合到servlet api。

\ JSPPrototype \ WEB-INF \配置\ config.xml中

public HttpServletRequest request; 
public void setServletRequest(HttpServletRequest request) 
{ 
this.request = request; 
} 

String context = request.getContextPath(); 
AdminFile = builder.parse(context + "/WEB-INF/config/config.xml"); 

正是我在做什麼錯了,我應該怎麼建立一個可行的contextPath中?

回答

3

ServletContext與應用程序的上下文路徑不同。 ServletContext是您的Web應用程序可以用來與servlet容器進行交互的對象。因此,你的做法是將該對象與String連接起來,它調用它的toString()方法,該方法只打印實現類名稱和哈希碼。這顯然不符合你的路徑。

您需要做的是使用ServletContext來獲得URL到您的文件。要做到這一點,你實際上使用了ServletContext。您可以使用ServletContextgetResource方法獲取網絡應用程序中文件的URL。事情是這樣的:

builder.parse(context.getResource('/WEB-INF/config/config.xml')); 

這需要你parse方法接受一個URL對象。如果您的構建器接受類型爲InputStream的參數,您也可以使用getResourceAsStream()

+0

哇,我不能相信我錯過了。非常感謝您的幫助,它非常完美! – Bird 2013-04-04 20:13:23