ssh+birt

新公司工作一年多,接触最多的就是统计,当然用于统计数据展示的birt了解多了些,虽然对于底层实现认识不深,但是对于birt与ssh集成还是有些感受,尽管这种感受仅是来源于自己重构项目中birt+ssh整合demon,尽管没有实际应用到项目中,确切的说是没有完全应用到项目中。因为我不想一个人单打独斗整个统计模块,也不想把自己纠结在统计模块中,当然我也不一定做得好,但是感受吗——对于过去的总结,无需多量的抱怨的,因为那已经是过去。

        由于ssh整合各种项目各种整合方法,当然谈及整合,java小生还很稚嫩,不在此卖瓜。仅总结birt如何与struts整合,统计数据,希望与大家共同学习进步。


一)应用技术与环境:     

        ssh:struts1.2+spring2.0+hibernate3.0

        birt:birt2.3

        tomcat:tomcat5.5

        dababase:oracle10g

        system:windowsXP


二)birt优点:

        1:birt交互性强,因为birt基本就是个完整的jsp页面,所以不会存在展现上的难题

        2:birt数据源支持更多,jdbc data source ,scripted data source,web service data source,

            xml data  source,procedure

        3:与eclipse集成,开发更方便,效率更快

        4:开源,扩展性更强,免费,使用成本低

三)birt缺点

         1:底层入侵,数据收集与展示剥离后存在诸多问题

         2:大数据量展示容易内存泄露

         4:页面内部嵌入大量外部资源,修改,扩展有难度

四)birt与struts整合

       a 增加代码

               public Object getBean(String name ) {
                   if (ctx == null) {
                       ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());
                   }
                 return ctx.getBean(name);
              }


              protected QueryInfo getQueryInfo(HttpServletRequest request) {
                 QueryInfo info = new QueryInfo();
                 int pageSize = getPageSize(request);
                 int currentPage = getCurrentPage(request);
                 info.setLimit(pageSize);
                 info.setOffset(pageSize * (currentPage - 1));
                 return info;
              }
           /**
            * 获取每页显示的条数
            * @param request 请求对象
            * @return 每页显示的条数
            */
          protected int getPageSize(HttpServletRequest request) {
             int ps = 0;
             String pageSize = request.getParameter(PAGE_SIZE);
             if (!StringUtil.isEmpty(pageSize)) {
                ps = StringUtil.string2Int(pageSize);
             } else {
                ps = DEFAULT_PAGE_SIZE;
             }
            request.setAttribute("pageSize", ps);
            return ps;
        }
         /**
          * 获取当前页数
          * @param request 请求对象
          * @return 当前页数
          */
         protected int getCurrentPage(HttpServletRequest request) {
            int cp = 0;
            String currentPage = getDisplayTagParam(request, REGEX);
            if (!StringUtil.isEmpty(currentPage)) {
               cp = StringUtil.string2Int(currentPage);
            } else {
               cp = DEFAULT_CURRENT_PAGE;
            }
           return cp;
         }


         public String getDisplayTagParam(HttpServletRequest request, String regex) {
             Enumeration en = request.getParameterNames();
             while (en.hasMoreElements()) {
                       String name = (String) en.nextElement();
                       if (name.matches(regex)) {
                           return request.getParameter(name);
                      }
             }
             return null;
          }

      b:修改__getContext 方法

        protected IContext __getContext(HttpServletRequest request,
           HttpServletResponse response)throws BirtException
             {
                BirtReportServiceFactory.getReportService().setContext(
                getServletContext(), null);
                SpInfoManager spInfoManager = (SpInfoManager)getBean("SpInfoManager");
                QueryInfo info = getQueryInfo(request);
                PartialCollection collection = spInfoManager.getWhiteAndBlackInfo("21006", "", info) ;
                List dataList = collection.getRealDataSet() ;
                request.setAttribute("result",dataList );
                return new BirtContext(request, response);
              }         

       c:web。xml修改ViewerServlet 指向的class


         ViewerServletcn.com.superv.netmessage.sp.web.action.ViewerServlet
           

        

       d:web.xml中增加 对于访问ViewerServlet 过滤器

          validateSession/frameset*hibernateFilter/frameset*



        2:增加一个action ,进行数据收集,并跳到birt页面显示容器(birt嵌入到jsp中)

           if(birtName.equals("script_data_source_demon.rptdesign")){
              /*****参数存入request********************/
              request.setAttribute("endTime", endTime) ;  //保存保存参数
           }
             return mapping.findForward("birtPageWindow");//转发到birt容器(嵌入birt的jsp页面)

             

      

      3:birt 嵌入jsp

           a:在jsp中引入

           b:birt标签引入birt页面

                

               

          4:birt中获取参数及数据源

               a:script:open


                  importPackage(Packages.javax.servlet.http);
                  req = reportContext.getHttpServletRequest();
                  list = req.getAttribute("result");
                  spInfo = new Packages.cn.com.superv.netmessage.oam.web.model.WhiteAndBlackInfo();
                  resultArray = list.iterator();


               b:script:fetch

                  if(resultArray.hasNext()==false){
                    return false ; 
                   }
                 spInfo = resultArray.next();   
                 row["name"]=spInfo.getSpName();
                 row["spid"]=spInfo.getSpId();
                 row["spcode"]=spInfo.getSpCode();
                 return true ;


               c:scirpt:close

                 result = null ;
                 spInfo = null ; 

          5:数据展示

               a:Data Set绑定显示列

                    [img]http://dl.iteye.com/upload/attachment/600360/3dcb4e6f-3858-378a-9a9e-b5e4c35f8acb.png" alt="" width="737" height="175[/img]




                    

          6:birt分页自定义

               a:。。。。。。。。。。。

               b:。。。。。。。。。。。


[size=10pt; color: #000000; font-family: 'Courier New';]
四)效果图

     。。。。。。。。。。

[size=10pt; color: #000000;]

     [img]http://dl.iteye.com/upload/attachment/600367/7b9cecf1-9734-3f64-ab29-56f39911e5fc.png" alt="[/img]

[/size]
[/size]


猜你喜欢

转载自zld406504302.iteye.com/blog/1289272