在Struts2 Action Class中设置ContextPath会给出错误的路径

时间:2013-04-04 19:26:32

标签: servlets struts2 contextpath

我目前正在尝试在我的webapp中为配置文件设置上下文路径,但似乎无论我尝试什么解决方案,它们都没有给出正确的路径。配置文件位于WEB-INF / Config中。

我尝试使用ServletContextAware来获取上下文路径,但它似乎给了我错误的路径。

  

C:\ Documents and Settings \ Person \ My   文档\ Geronimo的tomcat6中-javaee5-2.2斌\ Geronimo的tomcat6中-javaee5-2.2 \ BIN \ org.apache.catalina.core.ApplicationContextFacade@5d869c \ WEB-INF \配置\ config.xml中

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

我也尝试通过调用ServletActionContext.getServletContext来创建org.apache.struts2.ServletActionContext的上下文路径,但这给了我一个类似的错误。

  

C:\ Documents and Settings \ Person \ My   文档\ Geronimo的tomcat6中-javaee5-2.2斌\ Geronimo的tomcat6中-javaee5-2.2 \ BIN \ org.apache.catalina.core.ApplicationContextFacade@156592a \ WEB-INF \配置\ config.xml中

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

我终于尝试使用ServletRequestAware,它给了我更好的结果,但仍然不是我需要的完整上下文路径。我还想避免将我的action类与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?

1 个答案:

答案 0 :(得分:3)

ServletContext与应用程序的上下文路径不同。 ServletContext是Web应用程序可用于与servlet容器交互的对象。因此,您正在使用的方法是将该对象与String连接,后者调用它的toString()方法,该方法只打印实现类名称和它的哈希码。这显然与你的路径不符。

您需要做的是使用ServletContext为您的文件获取URL。为此,您实际使用ServletContext。您可以使用URL的{​​{3}}方法获取网络应用程序中ServletContext的文件。像这样:

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

这需要您的parse方法接受URL对象。如果您的构建器接受类型为getResourceAsStream()的参数,也可以使用InputStream