【问题标题】:How open a new tab using servlet response?如何使用 servlet 响应打开新选项卡?
【发布时间】:2015-06-17 10:21:51
【问题描述】:

我想在 Web 应用程序中运行 index.jsp 文件时打开一个新选项卡。我已经使用Show.java(一个servlet)来执行那个。目前的情况是当我单击index.jsp 中的Print 按钮时,我想在新选项卡中打开的内容页面显示在当前选项卡上。我想使用 servlet 响应而不是使用 javascriptjquery 来做到这一点。

这是我写在index.jsp文件中的,

<form action="Show">            
    <input type="submit" value="Print"/>
</form>

<%@page import="net.sf.jasperreports.engine.export.JRPdfExporter" %>

<%
   JRPdfExporter export = (JRPdfExporter)request.getAttribute("exportIndentObject");
   if (export != null){
         JRPdfExporter export1 = (JRPdfExporter) session.getAttribute("exportIndentObject");
         export1.exportReport();
    }%>

这是我用来保存内容的Show.java

String param ="Terance";     
  Map<String, Object> map = new HashMap<String, Object>();
  map.put("param", param);                
  JRPdfExporter jRPdfExporter = new  JRPdfExporter();                                                                       jRPdfExporter.setParameter(JRPdfExporterParameter.PDF_JAVASCRIPT,                                      this.print();");

  String jsaperFile="C:\\Users\\user\\Desktop\\Terance\\Jasper\\JasperReport\\src\\java\\jasper\\Report.jrxml";
System.out.println(jsaperFile);
try
                    {
                        String report=JasperCompileManager.compileReportToFile(jsaperFile);

                        File file=new File(report);
                        if(!file.exists()){
                            throw new JRException("Cannot find the given file .");
                        }

                        JasperPrint jasperPrint=JasperFillManager.fillReport(report, map);
                        byte[] exportReportToPdf = JasperExportManager.exportReportToPdf(jasperPrint);

                        ServletOutputStream sout = response.getOutputStream();
                        response.setContentType("application/pdf;");

                        jRPdfExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
                        jRPdfExporter.setParameter(JRExporterParameter.OUTPUT_WRITER, sout);
                        jRPdfExporter.setParameter(JRPdfExporterParameter.PDF_JAVASCRIPT, "this.print();");

                        request.setAttribute("exportIndentObject", jRPdfExporter);

                        response.setContentType("application/pdf");
                        response.setHeader("Content-disposition","inline; filename=\"myReport.pdf\"");        


                        sout.write(exportReportToPdf);      
                        sout.flush();
                        sout.close();              

                    } catch (JRException ex)
                    {
                        ex.printStackTrace();
                    }

当我使用 response.redirect(); 时,我什至无法在浏览器中获取 index.jsp 文件。

【问题讨论】:

  • 您的响应将来自请求的来源
  • @Darshan Lila:- 没有办法解决这个问题吗?

标签: java jsp servlets jasper-reports jsp-tags


【解决方案1】:

仅适用于所有或无:

<form ... target="_blank">

所以也许将打印按钮放在原始表单之外并有自己的表单标签。

【讨论】:

  • 感谢您的帮助。我会用这个。
【解决方案2】:

Servlet 在服务器端工作,并为您的浏览器生成 http 响应,但它无法响应任何打开新选项卡的命令。这取决于用户浏览器设置(打开新窗口或新选项卡),因此 Servlet 无法执行此操作。

【讨论】:

  • 感谢您对 servlet 的解释和理论。
猜你喜欢
  • 2019-08-05
  • 1970-01-01
  • 1970-01-01
  • 2014-01-10
  • 1970-01-01
  • 2020-05-04
  • 1970-01-01
  • 2021-12-09
  • 2017-05-20
相关资源
最近更新 更多