我正在使用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
有人可以建议一种方法来实现这一目标吗?
答案 0 :(得分:2)
您可以从RequestContextHolder
获取当前请求:
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
有点笨重,但可能是你最好的选择。
答案 1 :(得分:0)
我认为您的应用程序实际上不在文件夹中,或者您的代码将被允许浏览文件系统的任意部分。某些应用程序服务器可能不会分解war文件,并且应用程序的位置实际上将位于归档文件本身内。
但是,您可以在应用程序本身内加载任何资源,无论它在何处。例如,ServletContext允许您通过javax.servlet.ServletContext#getResourceAsStream执行此操作。您还可以在那里找到应用程序的上下文路径(如请求路径中所示)。
您可以通过在bean中实现org.springframework.web.context.ServletContextAware来访问servlet上下文。