在我的项目中,我需要在JSP中保存XML文件。我使用Eclipse作为IDE并希望在项目中保存XML文件,以便Fusioncharts可以使用XML文件生成图形。当JSP在服务器上运行时,我不能给出任何本地路径。
StreamResult result = new StreamResult(new File("C:\\graph.xml"));
在这种情况下这不起作用,所以在这种情况下我该怎么办?
答案 0 :(得分:1)
使用File#createTempFile()
。它是独立于平台的,如果是JSP / Servlet webapp,它将在容器管理的默认临时文件夹中创建。
File file = File.createTempFile("graph", ".xml");
// ...
答案 1 :(得分:0)
您需要使用servlet上下文在servlet中获取与Web服务器无关的fiel位置。我喜欢这种做事方式:
public String getCachePath( ServletContext sc, HttpServletRequest request )
{
//get cache dir from web.xml
String cacheDir = getInitParameter( "cache.dir");
//String fileName = File.separator +"tmp"+File.separator +
String fileName = sc.getRealPath( request.getContextPath() ) + File.separator + "WEB-INF" + File.separator +
cacheDir + File.separator;
return fileName;
}//met
然后您可以在web.xml中定义cache.dir,如下所示:
<servlet>
<servlet-name>server</servlet-name>
<servlet-class>fully qualified name of your class</servlet-class>
<init-param>
<param-name>cache.dir</param-name>
<param-value>cache</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
答案 2 :(得分:0)
正如@BalusC指出的那样,我的第一个答案可能与使用码头有关,因为它扩大了战争。
因此,一种可以对你使用的服务器起作用的机制就是内省:
InputSream is = YouClass.getResourceAsStream( "file.xml" );
只要file.xml位于同一文件夹中(在部署时,在战争中或不在战争中)作为包含类文件YourClass.class的文件夹,这将始终有效。
Eclipse作为一个特殊的资源文件夹,在maven中强制执行,而不是可以用来放置资源,并确保在构建项目时将它们与类文件一起部署。