Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Servlets 在Struts2操作类中设置ContextPath会给出错误的路径_Servlets_Struts2_Contextpath - Fatal编程技术网

Servlets 在Struts2操作类中设置ContextPath会给出错误的路径

Servlets 在Struts2操作类中设置ContextPath会给出错误的路径,servlets,struts2,contextpath,Servlets,Struts2,Contextpath,我目前正在尝试为我的webapp中的配置文件设置上下文路径,但似乎无论我尝试什么解决方案,它们都没有给出正确的路径。配置文件位于WEB-INF/config中 我尝试使用ServletContextAware获取上下文路径,但它似乎给了我错误的路径 C:\Documents and Settings\Person\My Documents\geronimo-tomcat6-javaee5-2.2-bin\geronimo-tomcat6-javaee5-2.2\bin\org.apache.ca

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

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

C:\Documents and Settings\Person\My Documents\geronimo-tomcat6-javaee5-2.2-bin\geronimo-tomcat6-javaee5-2.2\bin\org.apache.catalina.core。ApplicationContextFacade@5d869c\WEB-INF\config\config.xml

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

C:\Documents and Settings\Person\My Documents\geronimo-tomcat6-javaee5-2.2-bin\geronimo-tomcat6-javaee5-2.2\bin\org.apache.catalina.core。ApplicationContextFacade@156592a\WEB-INF\config\config.xml

我最终尝试使用ServletRequestAware,它给了我更好的结果,但仍然不是我需要的完整上下文路径。我还希望避免将动作类与servlet api耦合

\JSPPrototype\WEB-INF\config\config.xml


我到底做错了什么?我应该如何构建一个有效的上下文路径?

ServletContext与应用程序的上下文路径不同。
ServletContext
是web应用程序可以用来与servlet容器接口的对象。因此,您所使用的方法是将该对象与一个
字符串
连接起来,该字符串调用它的
toString()
方法,该方法只打印实现类名及其哈希代码。这显然与你的道路不符

相反,您需要做的是使用
ServletContext
获取文件的
URL
。为此,您实际上使用了
ServletContext
。您可以使用
ServletContext
的方法在web应用程序中获取文件的
URL
。大概是这样的:

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

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

ServletContext与应用程序的上下文路径不同。
ServletContext
是web应用程序可以用来与servlet容器接口的对象。因此,您所使用的方法是将该对象与一个
字符串
连接起来,该字符串调用它的
toString()
方法,该方法只打印实现类名及其哈希代码。这显然与你的道路不符

相反,您需要做的是使用
ServletContext
获取文件的
URL
。为此,您实际上使用了
ServletContext
。您可以使用
ServletContext
的方法在web应用程序中获取文件的
URL
。大概是这样的:

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

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

哇,我真不敢相信我错过了这个。非常感谢您的帮助,它工作得非常好!哇,真不敢相信我错过了。非常感谢您的帮助,它工作得非常好!
public HttpServletRequest request;
public void setServletRequest(HttpServletRequest request) 
{
this.request = request;  
}

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