如何使用 servlet 响应打开新选项卡?
How open a new tab using servlet response?
我想在 Web 应用程序中 运行 index.jsp
文件时打开一个新选项卡。我已经使用 Show.java
(一个 servlet)来执行那个。现在的情况是当我点击index.jsp
中的Print
按钮时,我想在新标签页中打开的内容页面显示在当前标签页中。我想使用 servlet 响应而不是使用 javascript
或 jquery
来做到这一点。
这是我在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
文件。
Servlet 在服务器端工作,并向您的浏览器生成 http 响应,但它无法响应任何打开新选项卡的命令。这取决于用户浏览器设置(打开新 window 或新选项卡),因此 Servlet 无法执行此操作。
仅适用于所有或 none:
<form ... target="_blank">
所以可以将打印按钮放在原始表单之外,并有自己的表单标签。
我想在 Web 应用程序中 运行 index.jsp
文件时打开一个新选项卡。我已经使用 Show.java
(一个 servlet)来执行那个。现在的情况是当我点击index.jsp
中的Print
按钮时,我想在新标签页中打开的内容页面显示在当前标签页中。我想使用 servlet 响应而不是使用 javascript
或 jquery
来做到这一点。
这是我在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
文件。
Servlet 在服务器端工作,并向您的浏览器生成 http 响应,但它无法响应任何打开新选项卡的命令。这取决于用户浏览器设置(打开新 window 或新选项卡),因此 Servlet 无法执行此操作。
仅适用于所有或 none:
<form ... target="_blank">
所以可以将打印按钮放在原始表单之外,并有自己的表单标签。