如何在网络浏览器中显示 jasper 报告

问题描述 投票:0回答:3

大家早上好,我叫大卫,是 jasper 报告中的新人(嗯……我也是 stack over flow 中的新人)。我下载了一个关于 jasper 报告的教程,指导我完成创建第一个报告的过程。我已经成功地创建了我的

.jrxml
文件,将它编译成一个
.jasper
文件并将它填充到一个
.jprint
文件,所有这些都是在 java 代码的帮助下,我还借助 jasper 查看器成功预览了报告我的
build.xml
文件中的蚂蚁目标。

我现在的问题是如何在网络浏览器上显示报告。

教程中提供给我的只是一个 java servlet 代码,它将 jasper 报告导出为 pdf 格式,然后将显示在浏览器上。这是代码:

package net.ensode.jasperbook;

import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.HashMap;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperRunManager;

public class FirstReportSendToBrowserServlet extends.  HttpServlet{

@SuppressWarnings("unchecked")
protected void doGet(HttpServletRequest.  request, HttpServletResponse response)
throws ServletException, IOException{

ServletOutputStream servletOutputStream = response.getOutputStream();
InputStream reportStream = getServletConfig().getServletContext().getResourceAsStream("/reports/FirstReport.jasper");

try{
JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, new HashMap(), new JREmptyDataSource());
response.setContentType("application/pdf");
servletOutputStream.flush();
servletOutputStream.close();

}

catch(JRException e){
//display stack trace in the browser
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
e.printStackTrace(printWriter);
response.setContentType("text/plain");
response.getOutputStream().print(stringWriter.toString());
}

}
}

现在我的问题是如何将上述代码部署到 servlet 容器中。所以它会在我的网络浏览器上以 pdf 格式显示我的 jasper 报告。该教程说可以在他们的网站上找到一个自动化该过程的蚂蚁脚本,但我搜索并没有找到任何..

所以如果你们中的任何人都可以给我关于如何在 servlet 容器中部署上述代码的说明,或者给我一个链接来指导我如何创建自动执行该过程的 ant 脚本,我将非常感谢我在这个问题上花了将近三天的时间。

java jasper-reports
3个回答
0
投票

我推荐你使用一个IDE比如eclipse。安装包含所有 Web 开发工具的版本。

http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/keplersr1

然后您可以创建一个“动态 web 项目”并配置一些 servlet 容器(可能是 tomcat - http://tomcat.apache.org/download-70.cgi)。

然后(最后)您可以右键单击您的项目并选择“导出”,然后选择“战争”。直接保存到tomcat的webapp目录下

它将生成一个文件,您可以将其放入容器中,希望一切都会好起来。

当然,这里有一个学习曲线,但是使用 IDE 会节省您以后的时间。

查看本教程 - http://help.eclipse.org/kepler/index.jsp?topic=%2Forg.eclipse.stardust.docs.wst%2Fhtml%2Fwst-integration%2Fdynamic-web-proj.html


0
投票

你要做的是在你的servlet容器中创建一个web项目。在

Tomcat
下,这可以很容易地完成,只需在您的
webapps
文件夹下创建一个具有这种结构的子文件夹(这只是一个例子):

 webapps
 |
 +---projectName
     |
     +---WEB-INF
         |
         +---web.xml
         |
         +---classes
             |
             +---ServletClass.class

ServletClass.class
是您编译的 servlet。

web.xml
必须包含 wepapp 描述,例如:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
         xmlns="http://java.sun.com/xml/ns/javaee" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         >
    <servlet>
        <servlet-name>ServletClass</servlet-name>
        <servlet-class>ServletClass</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletClass</servlet-name>
        <url-pattern>/url-to-servlet.pdf</url-pattern>
    </servlet-mapping>
</web-app>

然后重新启动引擎。现在,在浏览器中输入这个 URL 应该可以完成工作:

  http://server-address:8080/projectName/url-to-servlet.pdf

0
投票

我解决了我的问题:

  1. 成功显示以 pdf 格式调用 jasper 报告的 servlet 所需的所有 jar 库都没有到位。所以我通过在我的 web-inf 文件夹中创建一个 lib 文件夹来解决这个问题,然后我将所有必要的 jar 放在 lib 文件夹中。例如 c:omcat\webapps\mywebapplicationfolder\WEB-INF\lib llthejarfiles.jar。
  2. 我遇到的另一个问题是将 firstreport.jasper 文件放在我的 Web 应用程序的 WEB-INF 文件夹中,而不是放在它外面。例如我把它放在 c: omcat\webapp\mywebapplicationfolder\WEB-IN
© www.soinside.com 2019 - 2024. All rights reserved.