如何在JSP中保存XML文件?

时间:2011-08-15 19:21:32

标签: java xml jsp file-io

在我的项目中,我需要在JSP中保存XML文件。我使用Eclipse作为IDE并希望在项目中保存XML文件,以便Fusioncharts可以使用XML文件生成图形。当JSP在服务器上运行时,我不能给出任何本地路径。

StreamResult result = new StreamResult(new File("C:\\graph.xml"));

在这种情况下这不起作用,所以在这种情况下我该怎么办?

3 个答案:

答案 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中强制执行,而不是可以用来放置资源,并确保在构建项目时将它们与类文件一起部署。