使用Servlet返回多个项目

时间:2013-03-19 20:14:04

标签: file servlets download

美好的一天,我正在开发一个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();
        }

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

非常感谢

2 个答案:

答案 0 :(得分:1)

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

  1. 让客户端触发两个HTTP请求,例如通过指定onclick事件处理程序,或者,如果您在第一个响应中返回HTML页面,则可以在window.load或{{1}上触发另一个请求};
  2. 让您有机会选择他想下载的内容并相应地在servlet中操作:如果他选择了PDF - 返回PDF;如果他选择了文本 - 返回文本,如果他选择了两者 - 将它们打包存档并归还。
  3. 请注意,第一个变体既笨拙又不方便用户,只要我担心应该不惜一切代价避免。用户控制他所获得的内容的页面是一个更好的选择。

答案 1 :(得分:0)

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