我目前正在尝试在我的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?
答案 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
。