SSH框架通过JFreeChart实现柱状图和获取项目路径

获取项目路径:String url= ServletActionContext.getRequest().getRealPath("/upload");

一.直接生成的图片输出到jsp页面

1.jsp页面

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <%@ taglib prefix="s" uri="/struts-tags" %>  
  4. <%    
  5. String path = request.getContextPath();    
  6. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";    
  7. %>   
  8. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  9. <html>  
  10. <head>  
  11. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  12. <base href="<%=basePath%>">  
  13. <title>Insert title here</title>  
  14. </head>  
  15. <body>  
  16.  <!--img src='D:\temp\chart.jpg' width="680" height="700" οnlοad="alert('图片存在');"  οnerrοr="alert('无此图片');"/-->  
  17.  <img alt="统计图" src="<%=basePath%>/chart2.action">     
  18. </body>  
  19. </html>  
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%  
String path = request.getContextPath();  
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<base href="<%=basePath%>">
<title>Insert title here</title>
</head>
<body>
 <!--img src='D:\temp\chart.jpg' width="680" height="700" οnlοad="alert('图片存在');"  οnerrοr="alert('无此图片');"/-->
 <img alt="统计图" src="<%=basePath%>/chart2.action">   
</body>
</html>

2.action类

  1. public String execute() throws Exception{  
  2.  //添加数据  
  3.         DefaultCategoryDataset dataset = new DefaultCategoryDataset();  
  4.         dataset.addValue(42000"月份" , "1月");  
  5.         dataset.addValue(40000 , "月份" , "2月");  
  6.         dataset.addValue(34000 , "月份" , "3月");  
  7.         dataset.addValue(18000 , "月份" , "4月");  
  8.         dataset.addValue(26000 , "月份" , "5月");  
  9.         dataset.addValue(42000 , "月份" , "6月");  
  10.         dataset.addValue(40000 , "月份" , "7月");  
  11.         dataset.addValue(34000 , "月份" , "8月");  
  12.         dataset.addValue(18000 , "月份" , "9月");  
  13.         dataset.addValue(26000 , "月份" , "10月");  
  14.         dataset.addValue(45000 , "月份" , "11月");  
  15.         dataset.addValue(38000 , "月份" , "12月");  
  16.           
  17.         //创建一个柱状图  
  18.         JFreeChart chart = ChartFactory.createBarChart3D("年度人口统计图""人口""数量",dataset,PlotOrientation.VERTICAL, truefalsefalse);  
  19.         chart.setTitle(new TextTitle("年度人口统计图"new Font("黑体", Font.ITALIC,22)));  
  20.         LegendTitle legend = chart.getLegend(0);  
  21.         legend.setItemFont(new Font("宋体", Font.BOLD, 14));  
  22.         CategoryPlot plot = (CategoryPlot) chart.getPlot();  
  23.         CategoryAxis categoryAxis = plot.getDomainAxis();  
  24.         categoryAxis.setLabelFont(new Font("宋体", Font.BOLD, 22));  
  25.         categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);  
  26.         categoryAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 18));  
  27.         NumberAxis numberAxis = (NumberAxis) plot.getRangeAxis();  
  28.         numberAxis.setLabelFont(new Font("宋体", Font.BOLD, 22));  
  29.   
  30.         HttpServletResponse response=ServletActionContext.getResponse();  
  31.         response.setContentType("image/");  
  32.         ChartUtilities.writeChartAsJPEG(response.getOutputStream(), 1, chart, 900600null);  
  33.         response.getOutputStream().close();  
  34.           
  35.         return null;  
  36. }  
    public String execute() throws Exception{
     //添加数据
            DefaultCategoryDataset dataset = new DefaultCategoryDataset();
            dataset.addValue(42000, "月份" , "1月");
            dataset.addValue(40000 , "月份" , "2月");
            dataset.addValue(34000 , "月份" , "3月");
            dataset.addValue(18000 , "月份" , "4月");
            dataset.addValue(26000 , "月份" , "5月");
            dataset.addValue(42000 , "月份" , "6月");
            dataset.addValue(40000 , "月份" , "7月");
            dataset.addValue(34000 , "月份" , "8月");
            dataset.addValue(18000 , "月份" , "9月");
            dataset.addValue(26000 , "月份" , "10月");
            dataset.addValue(45000 , "月份" , "11月");
            dataset.addValue(38000 , "月份" , "12月");
            
            //创建一个柱状图
            JFreeChart chart = ChartFactory.createBarChart3D("年度人口统计图", "人口", "数量",dataset,PlotOrientation.VERTICAL, true, false, false);
            chart.setTitle(new TextTitle("年度人口统计图", new Font("黑体", Font.ITALIC,22)));
            LegendTitle legend = chart.getLegend(0);
            legend.setItemFont(new Font("宋体", Font.BOLD, 14));
            CategoryPlot plot = (CategoryPlot) chart.getPlot();
            CategoryAxis categoryAxis = plot.getDomainAxis();
            categoryAxis.setLabelFont(new Font("宋体", Font.BOLD, 22));
            categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);
            categoryAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 18));
            NumberAxis numberAxis = (NumberAxis) plot.getRangeAxis();
            numberAxis.setLabelFont(new Font("宋体", Font.BOLD, 22));
    
            HttpServletResponse response=ServletActionContext.getResponse();
            response.setContentType("image/");
            ChartUtilities.writeChartAsJPEG(response.getOutputStream(), 1, chart, 900, 600, null);
            response.getOutputStream().close();
            
            return null;
    }
    
3.struts.xml配置

  1. <action name="chart2" class="Char2tAction">  
  2. <result name="success">/Chart.jsp</result>  
  3. </action>  
      <action name="chart2" class="Char2tAction">
      <result name="success">/Chart.jsp</result>
      </action>

Tip:参考的别的文章包一定得继承两个类,或者修改源码,实践正确配置如下:

<!-- 柱状图 -->
<package name="struts2" extends="struts-default,jfreechart-default">
<action name="chart2" class="com.ssh.app.web.action.CreateChartBar">
<result name="success">/tLiveStatistics.jsp</result>
</action>
</package>

4.效果图



二.生成图片保存到本地:

1.生成图片

  1.     public void createChart() {  
  2.         // TODO Auto-generated method stub        
  3.         DefaultCategoryDataset dataset = new DefaultCategoryDataset();   
  4.         dataset.addValue(1001"1""A");     
  5.         dataset.addValue(800"2""A");          
  6.         dataset.addValue(150"3""A");      
  7.         dataset.addValue(150"1""B");  
  8.         dataset.addValue(150"2""B");      
  9.         dataset.addValue(250"3""B");      
  10.         dataset.addValue(150"1""C");      
  11.         dataset.addValue(33"2""C");   
  12.         dataset.addValue(900"3""C");      
  13. //      JFreeChart chart = ChartFactory.createBarChart3D(   
  14. //                                          "", // 图表标题   
  15. //                                          "", // 目录轴的显示标签   
  16. //                                          "产量", // 数值轴的显示标签   
  17. //                                          dataset, // 数据集   
  18. //                                          PlotOrientation.VERTICAL , // 图表方向:垂直   
  19. //                                          true, // 是否显示图例(对于简单的柱状图必须是false)   
  20. //                                          false, // 是否生成工具   
  21. //                                          false // 是否生成URL链接   
  22. //                                  );   
  23.         //JFreeChart chart = ChartFactory.createBarChart3D("","","产量",dataset,PlotOrientation.VERTICAL,true,false,false);  
  24.         JFreeChart chart = ChartFactory.createBarChart3D("销量统计图""种类""产量", dataset, PlotOrientation.VERTICAL, truefalsefalse);  
  25.                   
  26.         //重新设置图标标题,改变字体   
  27.         chart.setTitle(new TextTitle("销量统计图"new Font("黑体", Font.ITALIC , 22)));   
  28.                 //取得统计图标的第一个图例   
  29.                 LegendTitle legend = chart.getLegend(0);   
  30.                 //修改图例的字体   
  31.                 legend.setItemFont(new Font("宋体", Font.BOLD, 14));   
  32.                 //legend.setItemFont(new Font("宋体", Font.TRUETYPE_FONT, 14));   
  33.                 CategoryPlot plot = (CategoryPlot)chart.getPlot();   
  34.                   
  35.                 chart.setBackgroundPaint(ChartColor.WHITE);   
  36.   
  37.                 //设置柱状图到图片上端的距离  
  38.                 ValueAxis rangeAxis = plot.getRangeAxis();  
  39.                 rangeAxis.setUpperMargin(0.5);  
  40.                   
  41.                 //取得横轴   
  42.                 CategoryAxis categoryAxis = plot.getDomainAxis();   
  43.                 //设置横轴显示标签的字体   
  44.                 categoryAxis.setLabelFont(new Font("宋体" , Font.BOLD , 22));   
  45.                 //分类标签以45度角倾斜   
  46. //              categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);   
  47.                 categoryAxis.setTickLabelFont(new Font("宋体" , Font.BOLD , 18));   
  48.                   
  49.                 //取得纵轴   
  50.                 NumberAxis numberAxis = (NumberAxis)plot.getRangeAxis();   
  51.                 //设置纵轴显示标签的字体   
  52.                 numberAxis.setLabelFont(new Font("宋体" , Font.BOLD , 22));   
  53.   
  54.                 //在柱体的上面显示数据  
  55.                 BarRenderer custombarrenderer3d = new BarRenderer();  
  56.                 custombarrenderer3d.setBaseItemLabelPaint(Color.BLACK);//数据字体的颜色  
  57.                 custombarrenderer3d.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());  
  58.                 custombarrenderer3d.setBaseItemLabelsVisible(true);  
  59.                 plot.setRenderer(custombarrenderer3d);  
  60.                 //HttpServletRequest request = null;  
  61.                 //request.getSession().getServletContext().getRealPath("/");  
  62.                 //URL a = Thread.currentThread().getContextClassLoader().getResource("");  
  63.                 //URL a = Thread.currentThread().getContextClassLoader().getResource("");       
  64.                 //System.out.println(a);  
  65.                 FileOutputStream fos = null;    
  66.                 //String imagePath = "D:\\chart.jpg";  
  67.                 String imagePath = "D:\\temp\\chart.jpg";  
  68.                 ChartRenderingInfo info = new ChartRenderingInfo();   
  69.                 try {  
  70.                     fos = new FileOutputStream(imagePath);  
  71.                     //将统计图标输出成JPG文件   
  72.                     ChartUtilities.writeChartAsJPEG(   
  73.                         fos, //输出到哪个输出流   
  74.                         1//JPEG图片的质量,0~1之间   
  75.                         chart, //统计图标对象   
  76.                         800//宽   
  77.                         600,//高  
  78.                         info //ChartRenderingInfo 信息   
  79.                     );  
  80.                     fos.close();  
  81.                 } catch (FileNotFoundException e) {  
  82.                     // TODO Auto-generated catch block  
  83.                     e.printStackTrace();  
  84.                 } catch (IOException e) {  
  85.                     // TODO Auto-generated catch block  
  86.                       
  87.                     e.printStackTrace();  
  88.                 }  
  89.           
  90.     }  
  public void createChart() {
        // TODO Auto-generated method stub      
        DefaultCategoryDataset dataset = new DefaultCategoryDataset(); 
        dataset.addValue(1001, "1", "A");   
        dataset.addValue(800, "2", "A");        
        dataset.addValue(150, "3", "A");    
        dataset.addValue(150, "1", "B");
        dataset.addValue(150, "2", "B");    
        dataset.addValue(250, "3", "B");    
        dataset.addValue(150, "1", "C");    
        dataset.addValue(33, "2", "C"); 
        dataset.addValue(900, "3", "C");    
//      JFreeChart chart = ChartFactory.createBarChart3D( 
//                                          "", // 图表标题 
//                                          "", // 目录轴的显示标签 
//                                          "产量", // 数值轴的显示标签 
//                                          dataset, // 数据集 
//                                          PlotOrientation.VERTICAL , // 图表方向:垂直 
//                                          true, // 是否显示图例(对于简单的柱状图必须是false) 
//                                          false, // 是否生成工具 
//                                          false // 是否生成URL链接 
//                                  ); 
        //JFreeChart chart = ChartFactory.createBarChart3D("","","产量",dataset,PlotOrientation.VERTICAL,true,false,false);
        JFreeChart chart = ChartFactory.createBarChart3D("销量统计图", "种类", "产量", dataset, PlotOrientation.VERTICAL, true, false, false);
                
        //重新设置图标标题,改变字体 
        chart.setTitle(new TextTitle("销量统计图", new Font("黑体", Font.ITALIC , 22))); 
                //取得统计图标的第一个图例 
                LegendTitle legend = chart.getLegend(0); 
                //修改图例的字体 
                legend.setItemFont(new Font("宋体", Font.BOLD, 14)); 
                //legend.setItemFont(new Font("宋体", Font.TRUETYPE_FONT, 14)); 
                CategoryPlot plot = (CategoryPlot)chart.getPlot(); 
                
                chart.setBackgroundPaint(ChartColor.WHITE); 

                //设置柱状图到图片上端的距离
                ValueAxis rangeAxis = plot.getRangeAxis();
                rangeAxis.setUpperMargin(0.5);
                
                //取得横轴 
                CategoryAxis categoryAxis = plot.getDomainAxis(); 
                //设置横轴显示标签的字体 
                categoryAxis.setLabelFont(new Font("宋体" , Font.BOLD , 22)); 
                //分类标签以45度角倾斜 
//              categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); 
                categoryAxis.setTickLabelFont(new Font("宋体" , Font.BOLD , 18)); 
                
                //取得纵轴 
                NumberAxis numberAxis = (NumberAxis)plot.getRangeAxis(); 
                //设置纵轴显示标签的字体 
                numberAxis.setLabelFont(new Font("宋体" , Font.BOLD , 22)); 

                //在柱体的上面显示数据
                BarRenderer custombarrenderer3d = new BarRenderer();
                custombarrenderer3d.setBaseItemLabelPaint(Color.BLACK);//数据字体的颜色
                custombarrenderer3d.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
                custombarrenderer3d.setBaseItemLabelsVisible(true);
                plot.setRenderer(custombarrenderer3d);
                //HttpServletRequest request = null;
                //request.getSession().getServletContext().getRealPath("/");
                //URL a = Thread.currentThread().getContextClassLoader().getResource("");
                //URL a = Thread.currentThread().getContextClassLoader().getResource("");     
                //System.out.println(a);
                FileOutputStream fos = null;  
                //String imagePath = "D:\\chart.jpg";
                String imagePath = "D:\\temp\\chart.jpg";
                ChartRenderingInfo info = new ChartRenderingInfo(); 
                try {
                    fos = new FileOutputStream(imagePath);
                    //将统计图标输出成JPG文件 
                    ChartUtilities.writeChartAsJPEG( 
                        fos, //输出到哪个输出流 
                        1, //JPEG图片的质量,0~1之间 
                        chart, //统计图标对象 
                        800, //宽 
                        600,//高
                        info //ChartRenderingInfo 信息 
                    );
                    fos.close();
                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    
                    e.printStackTrace();
                }
        
    }

2.显示到jsp:     

  1. try{  
  2.       
  3.     String impath = "D:\\temp\\chart.jpg";//此处的图路径,是上面所示代码中生成柱状图的存储路径  
  4.     File file = new File(impath);  
  5.           
  6.     InputStream inputStream = null;  
  7.     if(file.exists()){  
  8.         try {  
  9.             inputStream = new FileInputStream(file);  
  10.                       
  11.         } catch (FileNotFoundException e) {  
  12.                   
  13.         }  
  14.     }  
  15.   
  16.     int i = inputStream.available();   
  17.          byte data[] = new byte[i];  
  18.          inputStream.read(data);  
  19.               
  20.          HttpServletResponse response = ServletActionContext.getResponse();  
  21.          ServletOutputStream out = response.getOutputStream();  
  22.               
  23.          response.setContentType("image/jpeg");  
  24.               
  25.          out.write(data);   
  26.          out.flush();        
  27.          out.close();   
  28.               
  29. }catch(IOException e){  
  30.          e.printStackTrace();   
  31. }  
      try{
            
            String impath = "D:\\temp\\chart.jpg";//此处的图路径,是上面所示代码中生成柱状图的存储路径
            File file = new File(impath);
                
            InputStream inputStream = null;
            if(file.exists()){
                try {
                    inputStream = new FileInputStream(file);
                            
                } catch (FileNotFoundException e) {
                        
                }
            }

            int i = inputStream.available(); 
                 byte data[] = new byte[i];
                 inputStream.read(data);
                    
                 HttpServletResponse response = ServletActionContext.getResponse();
                 ServletOutputStream out = response.getOutputStream();
                    
                 response.setContentType("image/jpeg");
                    
                 out.write(data); 
                 out.flush();      
                 out.close(); 
                    
        }catch(IOException e){
                 e.printStackTrace(); 
        }
















转载于:https://www.cnblogs.com/jpfss/p/7404946.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值