Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

jfreechartによるグラフ表示

いつもお世話になっております。

現在jfreechartでグラフの出力を行っています。
今現在のやり方としては、servletでグラフデータを画像に変換→画像を指定フォルダに保存→jspにてパス指定を行い画像を表示しています。

今回悩んでいるのは、この画像ファイルを指定フォルダに
保存している部分なんですけど、これがグラフを出力する度に、どんどん画像が増えていき、膨大な容量になってしまうというところです。

解決策として、ファイルを表示したら、画像を削除するなども考えたのですが…。

そこで、jfreechartのグラフ出力は、画像を保存しなくてもデータで画像の情報を押さえ、それをjspで表示するという事は可能でしょうか?

よろしくお願いします。


【環境】
java1.6
tomcat6
apache2.2
eclipse3.2


*現在のソース

【servlet】

//グラフに必要な数値データの取得
KeikakushoJigyoshoPrintBean graphBean = new KeikakushoJigyoshoPrintBean();
            
graphBean.setIpAddress(aRequest.getRemoteAddr());
graphBean.setRiyoId(riyoId);
graphBean.setKeikakuNo(keikakuNo);
graphBean.setPatternNo(patternNo);
            
Vector<String[]> graphData = graphBean.getGraphData();
                
//グラフデータの取得
String  x = BarChart2(graphData);
            
String graphURL = aRequest.getContextPath() + "/servlet/DisplayChart?filename=" + x;
            
//セッションに格納
session.setAttribute("x", x);


/**
* 棒グラフ
*/
private static String BarChart2(Vector<String[]> graphData){
        
    String x = "";
        
    // カテゴリーの設定
    String category1 = "";
        
    //日本語が文字化けをしないように設定
    ChartFactory.setChartTheme(StandardChartTheme.createLegacyTheme()); 
       
    DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        
    for(int i=0; i<graphData.size(); i++){
        dataset.addValue(Integer.parseInt(((String[])graphData.get(i))[1],10), ((String[])graphData.get(i))[0], category1);
    }
    
    // JFreeChartオブジェクトの生成(タイトル、項目名など)
    JFreeChart chart = ChartFactory.createStackedBarChart("", null, "", dataset, PlotOrientation.VERTICAL, true, true, false);
       
    CategoryPlot plot = chart.getCategoryPlot();
 
    // 透明度の設定
    plot.setForegroundAlpha(0.8f);  
    plot.setBackgroundAlpha(0.5f);        
        
    try {
        x = ServletUtilities.saveChartAsPNG(chart, 200, 620, null);
    } catch (Exception e) {
        e.printStackTrace();
    }
   
    return x;
}    


【jsp】
<img src="./chart/<%= x %>" usemap="#test" border="0"/>

2

回答

6577

閲覧

2件の回答

評価

0

OutStreamの種類を変更してサーブレット出力するといい

評価

0

ご回答ありがとうございます。

xをファイル名Stringではなく、データとして取得する
って事ですよね?
それをsessionにいれてjspで表示でしょうか?

その、データとして取得する部分の書き方がわかりません!

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。