java 如何在web浏览器中显示碧玉报表

avwztpqn  于 2023-01-01  发布在  Java
关注(0)|答案(3)|浏览(425)

大家早上好,我的名字是大卫,我是新的碧玉报告(urm..我也是stack over flow的新手)我下载了一个碧玉reports的教程,它指导我完成了创建第一个报表的过程。我已经成功地创建了我的.jrxml文件,编译成.jasper文件并填充到.jprint文件,所有这些都是在java代码的帮助下,我还在build.xml文件中的ant targets的帮助下,使用碧玉viewer成功地预览了报告。

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

教程中给我的只是一个java servlet代码,它将碧玉报告导出为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 container中部署上述代码。所以它将在我的Web浏览器上以PDF格式显示我的碧玉报告。教程说可以在他们的网站上找到一个蚂蚁脚本来自动化这个过程,但我搜索了一下,没有找到任何..
所以如果你们中的任何人能给予我如何在servlet容器中部署上面的代码,或者给我一个链接,告诉我如何创建蚂蚁脚本来自动化这个过程,我将非常非常高兴,因为我已经花了将近三天的时间来解决这个问题。

zd287kbt

zd287kbt1#

我建议您使用Eclipse这样的IDE。安装这个包含所有Web开发工具的版本。
http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/keplersr1
然后您可以创建一个“动态Web项目”并配置一些servlet容器(可能是tomcat -http://tomcat.apache.org/download-70.cgi)。
然后(最后)你可以右击你的项目,选择“export”,然后选择“war”,直接将它保存到tomcat的webapp目录中。
它将生成一个文件,您可以将其放入容器中,希望一切正常。
当然,这里有一个学习曲线,但是使用IDE将保存您以后的时间。
查看本教程-http://help.eclipse.org/kepler/index.jsp?topic=%2Forg.eclipse.stardust.docs.wst%2Fhtml%2Fwst-integration%2Fdynamic-web-proj.html

cqoc49vn

cqoc49vn2#

你需要做的是在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
j0pj023g

j0pj023g3#

我解决了我的问题:
1.成功显示servlet所需的所有jar库都不到位,servlet调用jasper报告的pdf格式。因此,我通过在web-inf文件夹中创建一个lib文件夹,然后将所有必要的jar文件放在lib文件夹中来解决这个问题。例如,c:\tomcat\webapps\mywebapplicationfolder\WEB-INF\lib\allthejarfiles.jar。
1.我遇到的另一个问题是将firstreport.jasper文件放在我的Web应用程序的WEB-INF文件夹中,而不是放在它的外部。例如,我将它放在c:\tomcat\webapp\mywebapplicationfolder\WEB-INF\classes\report\firstreport.jasper中,而不是c:\tomcat\webapp\mywebapplicationfolder\reports\firstreport.jasper中。
1.我还删除了web.xml文件中url-pattern的. pdf扩展名。
就这样了

相关问题