【问题标题】:How to save a XML file in JSP?如何在 JSP 中保存 XML 文件?
【发布时间】:2011-08-15 19:21:31
【问题描述】:

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

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

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

【问题讨论】:

  • 看看apacheFileUpload
  • @Coolbeans:虽然问题的表述确实很糟糕,但基于代码 sn-p 我不认为 OP 的问题是将文件从客户端上传到服务器。 OP 只想要(临时)文件的通用文件保存位置。
  • @BalusC - 我明白了。 JSP 中保存的 XML 文件让我想到了 fileUpload ...感谢您的澄清 :)

标签: java xml jsp file-io


【解决方案1】:

使用File#createTempFile()。它独立于平台,如果是 JSP/Servlet webapp,它将在容器管理的默认临时文件夹中创建。

File file = File.createTempFile("graph", ".xml");
// ...

【讨论】:

  • 嘿如何访问这个文件?我的意思是当我有静态 xml 文件时,我曾经将它保存在 web-inf 文件夹中,而我的 jsp 用来自动检测它。谢谢回复
  • 只需将File 或其FileInputStream 传递给您的Fusioncharts 事物?
  • 这是在xml文件是ni web-inf文件夹时写的
  • 为此使用 servlet,以便您拥有 dataURL=graphServletURL。在 servlet 中,只需将文件写入响应的OutputStream,或者更好的是,将StreamResult 指向它。
【解决方案2】:

您需要使用 servlet 上下文在 servlet 中获取独立于 Web 服务器的字段位置。我喜欢这种做事方式:

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>

【讨论】:

  • 当容器被配置为不像大多数 3rd 方主机那样扩展 WAR 时怎么样?然后getRealPath() 将返回null
  • Jetty 默认展开(提取)WAR。执行&lt;Set name="extractWAR"&gt;false&lt;/Set&gt; 并重试。
【解决方案3】:

正如@BalusC 指出的那样,我的第一个答案可能与使用码头有关,因为它会扩大战争。

所以,无论你使用什么服务器,一种可以工作的机制是内省:

 InputSream is = YouClass.getResourceAsStream( "file.xml" );

只要 file.xml 与包含类文件 YourClass.class 的文件夹位于同一文件夹中(部署时,无论是否处于战争中),这将始终有效。

Eclipse 作为一个特殊的资源文件夹,在 Maven 中强制执行,您可以使用它来放置资源并确保在您构建项目时将它们与您的类文件一起部署。

【讨论】:

  • 您在回答如何读取文件,而不是如何保存文件。 StreamResult 将转换后的 XML 写入到指定目标,并且需要 FileWriterOutputStream,而不是 InputStream
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多