BIRT学习日志之一(与项目集成) 从项目要用到BIRT工具开始在坛子里泡了好久,从0开始慢慢琢磨现在终于可以把BIRT集成到项目中来运行了,当中的过程还真有点艰难,但这也是每个学习BIRT工具的人都遇到的,现在把中间的些许过程贴出来,希望对初次学习BIRT的人有些帮助。 一、BIRT与工程的集成。 1、从eclipse官网下载birt的运行包(地址:http://www./birt/),解压缩,先拷贝WebViewerExample\WEB-INF下如下文件到工程的WEB-INF目录下: jrun.web.xml server-config.wsdd viewer.properties 2、将WebViewerExample\WEB-INF\tlds下的birt.tld文件拷贝到工程的\WEB-INF\tlds下。 3、在工程的WEB-INF下建立report-engine的文件夹,在report-engine下新建如下四个文件夹 documents images logs scriptlib 4、将WebViewerExample\ webcontent文件夹拷贝到要集成的WEB应用的根目录下(如果工程的web目录也叫WebContent的话会很奇怪,可以将webcontent改名,改名方法另开贴说明)。 5、在web应用的根目录下建立reportFiles文件夹,用来存放报表文件。 6、将web.xml中的如下内容拷贝到工程的web.xml中: <display-name>Eclipse BIRT Report Viewer</display-name> <!-- Default locale setting. --> <context-param> <param-name>BIRT_VIEWER_LOCALE</param-name> <param-value>en-US</param-value> </context-param> <!-- Default timezone setting. Examples: "Europe/Paris", "GMT+1". Defaults to the container's timezone. --> <context-param> <param-name>BIRT_VIEWER_TIMEZONE</param-name> <param-value></param-value> </context-param> <!-- Report resources directory for preview. Defaults to ${birt home} --> <context-param> <param-name>BIRT_VIEWER_WORKING_FOLDER</param-name> <param-value></param-value> </context-param> <!-- Temporary document files directory. Defaults to ${birt home}/documents --> <context-param> <param-name>BIRT_VIEWER_DOCUMENT_FOLDER</param-name> <param-value></param-value> </context-param> <!-- Flag whether the report resources can only be accessed under the working folder. Defaults to true --> <context-param> <param-name>WORKING_FOLDER_ACCESS_ONLY</param-name> <param-value>true</param-value> </context-param> <!-- Settings for how to deal with the url report path. e.g. "http://host/repo/test.rptdesign". Following values are supported: <all> - All paths. <domain> - Only the paths with host matches current domain. Note the comparison is literal, "127.0.0.1" and "localhost" are considered as different hosts. <none> - URL paths are not supported. Defaults to "domain". --> <context-param> <param-name>URL_REPORT_PATH_POLICY</param-name> <param-value>domain</param-value> </context-param> <!-- Temporary image/chart directory. Defaults to ${birt home}/report/images --> <context-param> <param-name>BIRT_VIEWER_IMAGE_DIR</param-name> <param-value></param-value> </context-param> <!-- Engine log directory. Defaults to ${birt home}/logs --> <context-param> <param-name>BIRT_VIEWER_LOG_DIR</param-name> <param-value></param-value> </context-param> <!-- Report engine log level --> <context-param> <param-name>BIRT_VIEWER_LOG_LEVEL</param-name> <param-value>WARNING</param-value> </context-param> <!-- Directory where to store all the birt report script libraries (JARs). Defaults to ${birt home}/scriptlib --> <context-param> <param-name>BIRT_VIEWER_SCRIPTLIB_DIR</param-name> <param-value></param-value> </context-param> <!-- Resource location directory. Defaults to ${birt home} --> <context-param> <param-name>BIRT_RESOURCE_PATH</param-name> <param-value></param-value> </context-param> <!-- Preview report rows limit. An empty value means no limit. --> <context-param> <param-name>BIRT_VIEWER_MAX_ROWS</param-name> <param-value></param-value> </context-param> <!-- Max cube fetch levels limit for report preview (Only used when previewing a report design file using the preview pattern) --> <context-param> <param-name>BIRT_VIEWER_MAX_CUBE_ROWLEVELS</param-name> <param-value></param-value> </context-param> <context-param> <param-name>BIRT_VIEWER_MAX_CUBE_COLUMNLEVELS</param-name> <param-value></param-value> </context-param> <!-- Memory size in MB for creating a cube. --> <context-param> <param-name>BIRT_VIEWER_CUBE_MEMORY_SIZE</param-name> <param-value></param-value> </context-param> <!-- Defines the BIRT viewer configuration file --> <context-param> <param-name>BIRT_VIEWER_CONFIG_FILE</param-name> <param-value>WEB-INF/viewer.properties</param-value> </context-param> <!-- Flag whether to allow server-side printing. Possible values are "ON" and "OFF". Defaults to "ON". --> <context-param> <param-name>BIRT_VIEWER_PRINT_SERVERSIDE</param-name> <param-value>ON</param-value> </context-param> <!-- Flag whether to force browser-optimized HTML output. Defaults to true --> <context-param> <param-name>HTML_ENABLE_AGENTSTYLE_ENGINE</param-name> <param-value>true</param-value> </context-param> <!-- Filename generator class/factory to use for the exported reports. --> <context-param> <param-name>BIRT_FILENAME_GENERATOR_CLASS</param-name> <param-value>org.eclipse.birt.report.utility.filename.DefaultFilenameGenerator</param-value> </context-param> <!-- Viewer Filter used to set the request character encoding to UTF-8. --> <filter> <filter-name>ViewerFilter</filter-name> <filter-class>org.eclipse.birt.report.filter.ViewerFilter</filter-class> </filter> <filter-mapping> <filter-name>ViewerFilter</filter-name> <servlet-name>ViewerServlet</servlet-name> </filter-mapping> <filter-mapping> <filter-name>ViewerFilter</filter-name> <servlet-name>EngineServlet</servlet-name> </filter-mapping> <!-- Viewer Servlet Context Listener --> <listener> <listener-class>org.eclipse.birt.report.listener.ViewerServletContextListener</listener-class> </listener> <!-- Viewer HttpSession Listener --> <listener> <listener-class>org.eclipse.birt.report.listener.ViewerHttpSessionListener</listener-class> </listener> <!-- Viewer Servlet, Supports SOAP --> <servlet> <servlet-name>ViewerServlet</servlet-name> <servlet-class>org.eclipse.birt.report.servlet.ViewerServlet</servlet-class> </servlet> <!-- Engine Servlet --> <servlet> <servlet-name>EngineServlet</servlet-name> <servlet-class>org.eclipse.birt.report.servlet.BirtEngineServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ViewerServlet</servlet-name> <url-pattern>/frameset</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>ViewerServlet</servlet-name> <url-pattern>/run</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>EngineServlet</servlet-name> <url-pattern>/preview</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>EngineServlet</servlet-name> <url-pattern>/download</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>EngineServlet</servlet-name> <url-pattern>/parameter</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>EngineServlet</servlet-name> <url-pattern>/document</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>EngineServlet</servlet-name> <url-pattern>/output</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>EngineServlet</servlet-name> <url-pattern>/extract</url-pattern> </servlet-mapping> <jsp-config> <taglib> <taglib-uri>/birt.tld</taglib-uri> <taglib-location>/WEB-INF/tlds/birt.tld</taglib-location> </taglib> </jsp-config> 其中web.xml文件需做如下修改: a、修改BIRT_VIEWER_WORKING_FOLDER项的值为reportFiles; b、修改BIRT_VIEWER_DOCUMENT_FOLDER项的值为WEB-INF/report-engine/documents; c、修改BIRT_VIEWER_IMAGE_DIR项的值为WEB-INF/report-engine/images; d、修改BIRT_VIEWER_LOG_DIR项的值为WEB-INF/report-engine/logs; e、修改BIRT_VIEWER_SCRIPTLIB_DIR项的值为WEB-INF/report-engine/scriptlib; f、如果需调整日志级别可修改BIRT_VIEWER_LOG_LEVEL的值为ALL; 可选的值有:ALL|SEVERE|WARNING|INFO|CONFIG|FINE|FINER|FINEST|OFF。级别由高到低。 7、拷贝jar包,这一步放最后是因为我对示例工程中的jar包进行了清理。 我用的是最新版的BIRT 4.2.2,从官网下的部署包,论坛里的大部分人的集成方法是将“WebViewerExample\WEB-INF\lib”中的jar包全部拷到工程的lib目录下,说实话,这里的包实在是太多了,4.2.2 runtime下的jar包有86个47.8兆,这么多的jar包全部拷贝到工程下的话造成工程里面有很多冗余的jar包,也造成了工程的庞大,相信中也是很多人在项目中遇到的问题,工程中有很多冗余的jar包,但是有不敢删除。 我用最土的办法将birt集成到项目中的办法就是,先将配置文件配置好,不拷贝jar包到工程,然后每次启动,根据启动日志的错误提示信息找到缺失的类所在的jar包,然后将对应的jar包拷贝到工程中,再次启动,以此类推,知道工程启动和报表展示没有错误为止,得到的运行birt所必须的jar清单如下: axis.jar com.ibm.icu_4.4.2.v20110823.jar com.lowagie.text_2.1.7.v201004222200.jar commons-cli-1.0.jar commons-discovery-0.2.jar jaxrpc.jar js.jar org.apache.batik.css_1.6.0.v201011041432.jar org.apache.batik.util_1.6.0.v201011041432.jar org.apache.xerces_2.9.0.v201101211617.jar org.eclipse.birt.runtime_4.2.2.v20130216-1152.jar org.eclipse.core.runtime_3.8.0.v20120912-155025.jar org.eclipse.datatools.connectivity.oda.consumer_3.2.5.v201109151100.jar org.eclipse.datatools.connectivity.oda_3.3.4.v201212070447.jar org.eclipse.datatools.connectivity_1.2.7.v201302060508.jar org.eclipse.equinox.common_3.6.100.v20120522-1841.jar org.eclipse.equinox.registry_3.5.200.v20120522-1841.jar org.eclipse.osgi_3.8.2.v20130124-134944.jar org.w3c.css.sac_1.3.0.v200805290154.jar Tidy.jar viewservlets.jar derby.jar 从86个精简到22个,工程下不用到那么多无用的jar包了,其中derby.jar这个包单独拿出来是因为这个包可要可不要,因为这个是示例工程中的数据源,但我们的项目中一般都不需要用到示例工程中的报表数据源,所以我没有拷贝这个jar包。 至此通过如上步骤已经将birt报表集成到我们的项目中来了。 |
|