如何在spring-ws中获取应用程序上下文路径?

时间:2011-01-11 04:40:23

标签: tomcat spring-ws

我正在使用Spring-WS创建一个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文件“发布”到Apache Tomcat目录的../webapps文件夹之后,我意识到System.getProperty("user.dir")不再返回我的应用程序上下文路径。相反,它返回Apache Tomcat根目录,如图所示

  

C:\ Program Files \ Apache Software Foundation \ Tomcat 6.0 \ src \ main \ resources \ SampleClientFile

我似乎无法找到有关获取我的webservice的根文件夹的任何信息。我在Spring Web应用程序上看到了一些示例,我可以使用以下命令检索上下文路径:

request.getSession().getServletContext().getContextPath()

但是在这种情况下,我使用的是Spring Web应用程序,其中请求中有一个servlet上下文。但是Spring-WS,我的入口点是端点。如何获取Web服务应用程序的上下文路径。

我期待像

这样的上下文路径
  

C:\ Program Files \ Apache Software Foundation \ Tomcat 6.0 \ webapps \ clientWebService \ WEB-INF \ classes

有人可以建议一种方法来实现这一目标吗?

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

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

但是,您可以在应用程序本身内加载任何资源,无论它在何处。例如,ServletContext允许您通过javax.servlet.ServletContext#getResourceAsStream执行此操作。您还可以在那里找到应用程序的上下文路径(如请求路径中所示)。

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