【问题标题】:How to save content of a page call into a file in jsp/java?如何将页面调用的内容保存到 jsp/java 中的文件中?
【发布时间】:2011-01-03 16:03:16
【问题描述】:

在 jsp/java 中,如何调用输出 xml 文件作为结果的页面并将其结果(xml 类型)保存到服务器上的 xml 文件中。两个文件(生成 xml 的文件和我们要保存/覆盖的文件)都位于同一服务器上。

基本上我想通过调用输出 xml 类型结果的 generate.jsp 来更新我的 test.xml

谢谢。

【问题讨论】:

    标签: java xml file jsp save


    【解决方案1】:

    如果请求是幂等的,那么只需使用java.net.URL 来获取JSP 输出的InputStream。例如

    InputStream input = new URL("http://example.com/context/page.jsp").openStream();
    

    如果请求不是幂等的,那么您需要将响应的PrintWriter 替换为自定义实现,该实现将输出复制到某个缓冲区/构建器中。我之前在这里发布了一个代码示例:Capture generated dynamic content at server side

    一旦有了输出,只需按照通常的java.io 方式将其写入磁盘,假设 JSP 已经是 XHTML 格式。

    【讨论】:

    • “幂等”是什么意思?我还需要在 URL 中使用完整地址还是可以只使用 'URL("/xml/generate.jsp")' ?
    • 幂等 = 调用过程时总是相同的结果。在 HTTP 术语中,这就是 GET 的工作方式。发送一个 URL 总是给出相同的结果。在 POST 中情况并非如此,因为输入/输出不仅仅由 URL 控制。是的,你当然需要完整的地址。否则它将不知道在哪里可以找到它。但是,您可以根据HttpServletRequest 提供的方法动态构建它。
    • 谢谢伙计,它似乎回答了我的问题。虽然我无法将它写入文件,所以我不知道它是否真的从 InputStream 读取数据。再次感谢。
    • 你可以在这里找到基本的 Java IO 教程:java.sun.com/docs/books/tutorial/essential/io 这并不难,只是一个 while 循环,在 try-catch-finally 块内有一个 byte[] 缓冲区,它将输入流读入缓冲区并将缓冲区写入输出流,直到到达输入流的末尾。
    • 是的,我可以轻松创建文件,问题只是路径问题我创建了一个新主题 (stackoverflow.com/questions/2046265/…) 出于某种原因,我无法在我想去的地方。干杯
    【解决方案2】:
    1. 注册一个过滤器,将包装器添加到您的响应中。也就是说,它会向链返回一个新的 HttpServletResponse 对象,扩展原始 HttpServletResponse,并返回您自定义的 OutputStreamPrintWriter 而不是原始对象。
    2. 您的OutputStreamPrintWriter 调用原始OutputStreamPrintWriter,但也写入您的文件(使用新的FileOutputStream

    【讨论】:

      【解决方案3】:

      你为什么不使用像 FreeMarker 这样的真正的模板引擎?那会更容易。

      【讨论】:

        猜你喜欢
        • 2018-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-31
        相关资源
        最近更新 更多