2013-04-04 79 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