2014-01-29 123 views
0

大家早上好,我的名字是大衛,並且在碧玉報告中也是新的(urm.am也是新的流量疊加)。我下載了一份關於碧玉報告的教程,指導我完成創建第一份報告的過程。我已經成功創建了我的.jrxml文件,將它編譯爲.jasper文件,並將其填充到.jprint文件中,所有這些文件都藉助於java代碼,我還使用jasper查看器在我的build.xml文件中藉助螞蟻目標成功預覽了報告。如何在網頁瀏覽器中顯示碧玉報告

我現在的問題是如何在Web瀏覽器上顯示報告。

本教程中給出的所有內容都是一個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 continer中。所以它會在我的網頁瀏覽器上以pdf格式顯示我的碧玉報告。本教程說可以在他們的網站找到一個螞蟻腳本來自動化的過程,但我搜索,但沒有找到任何..

所以如果你們任何人都可以給我指示如何部署上述代碼在一個servlet容器,或者給我一個鏈接,告訴我如何創建自動化進程的ant腳本,我會非常非常高興,因爲我已經花了差不多三天時間解決這個問題。

回答

0

我建議你使用諸如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)。

然後(最後)你可以右鍵點擊你的項目並選擇「導出」,然後,「戰爭」。將它直接保存到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> 

,並重新啓動發動機。現在,輸入這個網址n中的瀏覽器應該做的去工作:

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

先生。請它仍然不工作。而是試圖下載它,而不是僅僅在瀏覽器上顯示它。即使在那,如果我允許它下載,它會彈出一條消息,說「無法下載此文件詳細信息:HTTP/1.1 500內部服務器錯誤」 – David

+0

這裏是我的web.xml文件ooks: – David

+0

這裏是我的目錄看起來像:webapps | + --- firstJasperReport | + --- WEB-INF | + --- web.xml | + ---類 | + --- FirstReportSendToBrowserServlet.class | + ---報告| + --- FirstReport.jasper – David

0

我解決我的問題:

  1. 所有的jar庫要成功地顯示在呼喚一個PDF碧玉報告的servlet格式不適用。所以我通過在我的web-inf文件夾中創建一個lib文件夾解決了這個問題,之後我將所有必需的jar放在lib文件夾中。例如:c:\ tomcat \ webapps \ mywebapplicationfolder \ WEB-INF \ lib \ allthejarfiles.jar。
  2. 我的另一個問題是將firstreport.jasper文件放在我的web應用程序的WEB-INF文件夾中,而不是放在它的外部。例如,我將它放在c:\ tomcat \ webapp \ mywebapplicationfolder \ WEB-INF \ classes \ report \ firstreport.jasper中,而不是c:\ tomcat \ webapp \ mywebapplicationfolder \ reports \ firstreport.jasper。
  3. 我也刪除了我的web.xml文件中的url-pattern的.pdf擴展名。

這就是全部