0

美好的一天,我正在开发一个 Servlet,它必须返回一个 PDF 文件和用于处理该文件的消息日志。

到目前为止,我正在传递一个布尔值,我评估并返回日志或文件,具体取决于用户选择,如下所示:

            //If user Checked the Download PDF
        if (isDownload) {
            byte[] oContent = lel;
            response.setContentType("application/pdf");
            response.addHeader("Content-disposition", "attachment;filename=test.pdf");
            out = response.getOutputStream();
            out.write(oContent);
        } //If user Unchecked Download PDF and only wants to see logs
        else {
            System.out.println("idCompany: "+company);
            System.out.println("code: "+code);
            System.out.println("date: "+dateValid);
            System.out.println("account: "+acct);
            System.out.println("documentType: "+type);

            String result = readFile("/home/gianksp/Desktop/Documentos/Logs/log.txt");
            System.setOut(System.out);

            // Get the printwriter object from response to write the required json object to the output stream      
            PrintWriter outl = response.getWriter();
            // Assuming your json object is **jsonObject**, perform the following, it will return your json object  
            outl.print(result);
            outl.flush();
        }

有没有一种有效的方法可以同时退回这两个项目?

非常感谢

4

2 回答 2

1

HTTP 协议不允许您为每个 HTTP 请求发送多个 HTTP 响应。考虑到这一限制,您可以考虑以下替代方案:

  1. 让客户端触发两个 HTTP 请求,例如通过指定onclick事件处理程序,或者,如果您在第一个响应中返回 HTML 页面,您可以在window.load或上触发另一个请求page.ready
  2. 让您有机会选择他想下载的内容并相应地在 servlet 中执行:如果他选择 PDF - 返回 PDF;如果他选择了文本 - 返回文本,如果他同时选择了两者 - 将它们打包并返回。

请注意,第一个变体既笨拙又不友好,就我而言,应该不惜一切代价避免。用户控制他得到什么的页面是一个更好的选择。

于 2013-03-20T06:44:48.280 回答
0

您可以将它们包装在 DTO 对象中或将它们放在会话中以从 JSP 中引用。

于 2013-03-19T20:18:48.597 回答