<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 251  文章 - 504  trackbacks - 0
    <2007年1月>
    31123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    本博客系個人收集材料及學習記錄之用,各類“大俠”勿擾!

    留言簿(14)

    隨筆分類

    收藏夾

    My Favorite Web Sites

    名Bloger

    非著名Bloger

    搜索

    •  

    積分與排名

    • 積分 - 202381
    • 排名 - 285

    最新評論

    一、引子:前期試驗工作
    1.直接在jasperreports-1.3.0-project工程中運行,ant編譯"demo\samples\webapp"的build.xml,可以直接看到由webapp中的.jrxml文件定義的報表格式,但是無法顯示數據源的數據;

    2.上述ant編譯"demo\samples\webapp"的build.xml時,也出現了"-Xlint:unchecked"?和"-?Xlint:deprecation"的版本兼容問題的錯誤,在build.xml中加入編譯參數后,沒什么變化,依然只是能看到.jrxml文件定義的報表格式,無法顯示數據;

    3.運行<target?name="viewDesign">時出錯,提示:
    viewDesign:
    ?????[java]?net.sf.jasperreports.engine.JRException:?java.io.FileNotFoundException:?reports\WebappReport.jasper
    ?????[java]?at?net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:75)

    查看了一下"webapp\reports"目錄,果然沒有編譯好的WebappReport.jasper文件,那么是操作問題導致編譯出錯無法把.jrxml編譯成.jasper,還是程序本身就沒有調用編譯設計文件的代碼?

    4.查看build.xml文件中<target?name="viewDesign">運行的net.sf.jasperreports.view.JasperDesignViewer類的源代碼,以及看build.xml中提供的參數,發現JasperDesignViewer類只是根據傳入的.jrxml或者.jasper文件的路徑顯示報表,并不負責編譯和填充xml設計文件;

    5.ok,webapp示例應該就是只提供了在web服務器中跑的支持,并不同時提供直接applet方式顯示,簡單讓它能夠根據.jrxml或者.jasper源設計文件看一下報表格式而已。因為applet方式顯示報表的示例charts中都有了,也沒必要提供支持了。

    6.所以,如有要顯示webapp示例,只能在web服務器中部署運行了。這個示例也正是用來展示web環境下如何使用jasperreports開發報表的!

    7.部署webapp示例詳見下文;

    二、myeclipse+tomcat部署運行jasperreports的webapp示例step?by?step
    1.在eclipse中新建web?工程:"jasperwebappproject";

    2.把"jasperreports-1.3.0-project\demo\samples\webapp"下的所有文件拷貝到新建的web工程("jasperwebappproject")的webroot下;

    注意:
    ?*?此時新工程的webroot目錄就與原webapp目錄結構對應上了(不要把該webapp文件夾也拷貝過去了,因為新建web工程就默認有webroot根目錄了),拷貝時要覆蓋掉新建工程時webroot下的原WEB-INF目錄;

    ?*一定要確保webapp\WEB-INF\classes目錄的下的三個源代碼文件夾(datasource、scriptlets、servlets)和web.xml文件都拷貝過去了!!
    因為本人操作的時候發現,有時候原WEB-INF文件能夠全部拷貝過去,有時候skip掉沒有拷貝過去。

    ?*如果沒有把該web.xml拷貝過去,將無法運行示例中的servlet?samples,并且jsp?samples中也無法顯示圖片!因為web.xml中沒有配置ImageServlet:
    <servlet>
    <servlet-name>ImageServlet</servlet-name>
    <servlet-class>net.sf.jasperreports.j2ee.servlets.ImageServlet</servlet-class>
    </servlet>

    <servlet-mapping>
    <servlet-name>ImageServlet</servlet-name>
    <url-pattern>/servlets/image</url-pattern>
    </servlet-mapping>

    3.把"jasperreports-1.3.0-project\lib"與"jasperreports-1.3.0-project\dist"下的所有jar包拷貝到新建工程的lib下;
    注釋:其實只需要拷貝webapp中build.xml文件中要include的jar包,不過本人懶得一一去對了,把所有的jar包都加上,圖省事;

    4.右鍵新建工程"jasperwebappproject"->"Properties"->"Java?build?path"->"source"-"add?folder...",把"jasperwebappproject\webroot\WEB-INF\classes"文件夾打上勾,即:把classes文件夾也設置為source?folder;因為classes文件夾下有.java源文件,如果不設置為source?folder,就需要手工編譯了,并且eclipse還可能因為自動編譯把該classes的源文件全部清空,因為src是空的。
    所以,一定要把classes文件夾設置為source?folder;

    注:
    "Java?build?path"->"source"中有一選項"allow?output?folders?for?source?folders",按字面理解應該是把該項選上就是把默認的輸出路徑WEB-INF\classes設置為source?folder了,但是我把它選上了,好像沒有效果,只是當時把classes加入source樹了,但是下次再查看工程properties還是原樣,工程中也沒有把classes當作source?folder,而且還把classes目錄清空了。
    選項"allow?output?folders?for?source?folders"到底是干什么用的呢?不知道了,期待知道的回答一下,萬分感謝!

    5.此時,我們把webapp下的所有文件和需要的所有jar包都拷貝到新工程了,并且把WEB-INF\classes設置為source?folder了;但是如果此時轉換到J2EE?development視圖的話,會發現工程中報了很多錯誤,主要是.jsp文件和.html文件大量報錯。.html文件的錯誤無關緊要,只是多了一些沒有開始標簽的結束標簽,改不改都不影響運行。但是.jsp文件怎么會報錯,提示很多類文件找不到呢?所需要的jar包(包括jasperreports-1.3.0.jar)和數據源等文件(WEB-INF\classes\datasource)都在工程中了呀!
    解決:
    根據以往經驗,eclipse中如果直接把別人的代碼復制粘貼上去,即使所有的類文件和jar包都存在,也會報錯,需要把該.java源文件重新"剪切"粘貼一下,這樣就不報錯了。
    試了一下,把jsp文件夾下的compile.jsp,fill.jsp,viewer.jsp,html.jsp文件前面部分導入包和類的那些語句(eg.<%@?page?import="datasource.*"?%>)重新剪切粘貼一下,保存,耶,不提示紅×錯誤了!

    注:
    不理會eclipse中這些.jsp文件的報錯也沒關系,因為部署到tomcat后,運行時肯定是能夠找到所需要的類的,因為那些jar包都在工程中了。不過在eclipse中看著那么多的紅×錯誤,還是剪切粘貼一下消除它,心里比較爽。

    6.把工程部署(deploy)到tomcat中;

    7.啟動tomcat;

    8.在IE中輸入"http://192.168.3.161:9005/jasperSampleWebapp/index.html",正確顯示!
    9.點左邊的菜單"compile?JRXML",點右邊的"jsp?examples",->"execute",提示編譯成功!
    10.點左邊的菜單"fill?report",點右邊的"jsp?examples",->"execute",提示填充數據成功!
    11.點左邊的菜單"export?report",分別可以以pdf,html等格式輸出報表!耶,革命終于勝利!

    ok!

    三、小結:
    ????總結運行jasperreports的webapp示例的關鍵幾個步驟:
    1.要確保webapp\WEB-INF\classes目錄的下的三個源代碼文件夾(datasource、scriptlets、servlets)和web.xml文件都拷貝過去了!!
    2.要把WEB-INF\classes設置為source?folder,否則提示找不到數據源,因為該webapp示例的數據源是WEB-INF\classes\datasource\WebappDataSource.java里的二維數組;
    3.要確保把原web.xml復制到工程中了,否則無法顯示圖片,也無法運行servlet?samples;
    4.*.jsp文件的報錯可通過重新剪切粘貼一下來消除;
    5.ie中瀏覽圖表時要按照“compile、fill、export”的順序點擊,這樣才能順利看到報表。

    四、其他相關內容:
    1.把.jrxml編譯成.jasper文件的類是:net.sf.jasperreports.engine.JasperCompileManager
    方法compileReportToFile:這個方法能夠創建一個在整個程序中使用的編譯的報告文件(.jasper)。

    這個類有兩個重載函數,一個只有一個參數,指定.jrxml的路徑;另一個有兩個參數,分別指定.jrxml的路徑和.jasper的輸出路徑;
    compileReportToFile(String?srcdir):???編譯.jrxml得到.jasper,但是不輸出該.jasper文件;
    compileReportToFile(String?srcdir,String?destdir):??編譯.jrxml得到.jasper,并且輸出該.jasper文件到指定路徑;

    驗證:
    法一:
    把compile.jsp中的關鍵的一行代碼:
    JasperCompileManager.compileReportToFile(application.getRealPath("/reports/WebappReport.jrxml"));
    改為:
    JasperCompileManager.compileReportToFile(application.getRealPath("/reports/WebappReport.jrxml"),application.getRealPath("/reports/WebappReport.jasper"));

    重啟tomcat,運行該compile.jsp文件,這時可以在tomcat的目錄"tomcat5.5.17\webapps\jasperSampleWebapp\reports"下看到新生成的WebappReport.jasper文件!

    法二:
    寫一個包含main函數的測試類,執行JasperCompileManager.compileReportToFile方法:

    package?test;

    import?net.sf.jasperreports.engine.JRException;
    import?net.sf.jasperreports.engine.JasperCompileManager;
    import?net.sf.jasperreports.engine.design.*;

    public?class?testCompileManager{
    ????public?static?void?main(String[]?args)?{
    ????????String?sourceFileName="E:\\jiangcm\\workspace-forict-myeclipse\\jasperreports\\demo\\samples\\webapp\\reports\\WebappReport.jrxml";
    ????????String?destFileName="E:\\jiangcm\\workspace-forict-myeclipse\\jasperreports\\demo\\samples\\webapp\\reports\\WebappReport.jasper";
    ????????try?{
    ????????????JasperCompileManager.compileReportToFile(sourceFileName,?destFileName);
    ????????}?catch?(JRException?e)?{
    ????????????//?TODO?Auto-generated?catch?block
    ????????????e.printStackTrace();
    ????????}
    ????}
    }

    posted on 2007-01-29 14:14 matthew 閱讀(5704) 評論(6)  編輯  收藏 所屬分類: 報表設計與開發

    FeedBack:
    # re: myeclipse+tomcat 環境下jasperreports sample之webapp例子-轉貼 2007-04-04 05:41 "chrest2005@yahoo.com"
    Dear En.

    I Found your web page seems so usful,and i mean the work "seems", as my mother language is not chines.
    I am asking u, if u good at english to translate it to english to able to work with jasperReports with Myeclipse because i really found a big problem on findind good pages to explain that topic but i found at search your page and i found some words made me feel that is will help me more but if the language is easier.

    thanks alot to waste your time to read my email
    Christina  回復  更多評論
      
    # re: myeclipse+tomcat 環境下jasperreports sample之webapp例子-轉貼[未登錄] 2007-04-05 10:16 matthew
    Christina,

    Can you tell me what problem with your work? Maybe i can help you.But i do not have time to translate all of it to english,at presently.

    Thank you to pay attention to my blog!  回復  更多評論
      
    # re: myeclipse+tomcat 環境下jasperreports sample之webapp例子-轉貼 2007-08-23 11:06 elsa
    按著你的方法做有問題耶!  回復  更多評論
      
    # re: myeclipse+tomcat 環境下jasperreports sample之webapp例子-轉貼 2008-04-11 16:20 上的
    謝謝 太及時了 哈哈   回復  更多評論
      
    # re: myeclipse+tomcat 環境下jasperreports sample之webapp例子-轉貼 2008-09-05 15:44 zb
    我這里怎么沒有index.html呢?  回復  更多評論
      
    # re: myeclipse+tomcat 環境下jasperreports sample之webapp例子-轉貼[未登錄] 2009-09-24 15:08 123
    feichang hao zuo 做出來了 非常好  回復  更多評論
      
    主站蜘蛛池模板: 亚洲天堂在线播放| 久久黄色免费网站| 国产黄色一级毛片亚洲黄片大全 | 视频免费在线观看| 57pao一国产成视频永久免费| 精品熟女少妇av免费久久| 黄色三级三级免费看| a级毛片免费在线观看| 蜜桃成人无码区免费视频网站| 无遮挡a级毛片免费看| 一级午夜免费视频| 亚洲午夜无码久久| 亚洲AV本道一区二区三区四区| 亚洲人成电影网站| 国内成人精品亚洲日本语音| 三级毛片在线免费观看| 一级看片免费视频囗交| 91免费福利精品国产| 亚洲av麻豆aⅴ无码电影| 亚洲国产成人91精品| 国产成人精品无码免费看| 日本免费人成视频播放 | 暖暖在线视频免费视频| 老司机永久免费网站在线观看| 亚洲国产精品一区二区久久| 亚洲国产成人久久精品大牛影视| 小草在线看片免费人成视久网| 亚欧日韩毛片在线看免费网站| 伊人久久亚洲综合影院| 亚洲国产精品99久久久久久| 久久午夜夜伦鲁鲁片无码免费| 亚洲精品一级无码鲁丝片| 亚洲精品国产精品乱码在线观看 | 亚洲日本VA午夜在线影院| 一级**爱片免费视频| 国产免费131美女视频| 久久久久久a亚洲欧洲aⅴ| 99在线免费观看| 亚洲午夜无码久久久久| 亚洲国产精品综合久久20| 成人毛片免费观看视频在线|