Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/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
Tomcat 如何在SpringWS中获取应用程序上下文路径?_Tomcat_Spring Ws - Fatal编程技术网

Tomcat 如何在SpringWS中获取应用程序上下文路径?

Tomcat 如何在SpringWS中获取应用程序上下文路径?,tomcat,spring-ws,Tomcat,Spring Ws,我正在使用SpringWS创建一个Web服务。在我的项目中,我创建了一个Helper类来读取位于/src/main/resource文件夹中的示例响应和请求xml文件 在“本地”单元测试webservice应用程序时,我使用System.getProperty(“user.dir”)获取应用程序上下文文件夹。以下是我在Helper类中创建的一个方法,用于帮助我检索资源文件夹中感兴趣的文件 public static File getFileFromResources(String filena

我正在使用SpringWS创建一个Web服务。在我的项目中,我创建了一个
Helper
类来读取位于
/src/main/resource
文件夹中的示例响应和请求xml文件

在“本地”单元测试webservice应用程序时,我使用
System.getProperty(“user.dir”)
获取应用程序上下文文件夹。以下是我在
Helper
类中创建的一个方法,用于帮助我检索资源文件夹中感兴趣的文件

 public static File getFileFromResources(String filename) {
  System.out.println("Getting file from resource folder");
  File request = null;
  String curDir = System.getProperty("user.dir");
  String contextpath = "C:\\src\\main\\resources\\";
  request = new File(curDir + contextpath + filename);
  return request;
 }
但是,在将编译好的WAR文件“发布”到ApacheTomcat目录的
。/webapps
文件夹后,我意识到
System.getProperty(“user.dir”)
不再返回我的应用程序上下文路径。相反,它返回ApacheTomcat根目录,如图所示

C:\Program Files\Apache软件基金会\Tomcat 6.0\src\main\resources\SampleClientFile

我似乎找不到有关获取我的Web服务的根文件夹的任何信息。我在Spring web应用程序上看到了一些示例,在这些示例中,我可以使用以下内容检索上下文路径:

request.getSession().getServletContext().getContextPath()
但在本例中,我使用的是一个SpringWeb应用程序,其中请求中有一个servlet上下文。但是SpringWS,我的入口点是一个端点。如何获取webservice应用程序的上下文路径

我希望有一个类似的上下文路径

C:\Program Files\Apache软件基金会\Tomcat 6.0\webapps\clientWebService\WEB-INF\classes


有人能提出一个实现这一目标的方法吗

您可以从
RequestContextHolder
获取当前请求:

HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();

有点笨重,但可能是您最好的选择。

我不认为有任何保证可以保证您的应用程序实际位于文件夹中,或者允许您的代码浏览文件系统的任意部分。某些应用程序服务器可能不会分解war文件,而应用程序的位置实际上位于归档文件本身内部

但是,您可以加载应用程序本身中的任何资源,而不管它位于何处。例如,ServletContext允许您通过javax.servlet.ServletContext#getResourceAsStream来实现这一点。您还可以在那里找到应用程序的上下文路径(如请求路径)

您可以通过在bean中实现org.springframework.web.context.ServletContextAware来访问servlet上下文