0

ユーザーが送信したフォーム データに基づいて計算を実行するサーブレットがあります。

入力された入力値と計算結果をグラフにプロットし、同じ Web ページにテキストとして表示したいと考えています。

JFreeChart でグラフを作成できますが、OutputStream で使用するとフォーム ページが上書きされます。画像を保存して、JSP に URL をリンクしようとすると、グラフが表示されません。これを達成する方法はありますか?

これは、ブラウザーから送信されたさまざまな重みパラメーターを読み取り、OutputStream を使用してグラフを作成するサーブレットです。

@WebServlet(name = "resultServlet", urlPatterns = {"/results"})
public class resultServlet extends HttpServlet {

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    doPost(request, response);
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    try { 

     List<Double> weightsList = new ArrayList<Double>();
     int listpos = 0;

     DefaultPieDataset myServletPieChart = new DefaultPieDataset();

         double w1 = Double.valueOf(request.getParameter("w1"));
         myServletPieChart.setValue("WEIGHTONE", w1);
         weightsList.add(listpos, w1); 
         listpos++;
         double w2 = Double.valueOf(request.getParameter("w2"));
         myServletPieChart.setValue("WEIGHTTWO", w2);
         weightsList.add(listpos, w2); 
         listpos++;
         double w3 = Double.valueOf(request.getParameter("w3"));
         myServletPieChart.setValue("WEIGHTTHREE", w3);
         weightsList.add(listpos, w3); 
         listpos++;
         double w4 = Double.valueOf(request.getParameter("w4"));
         myServletPieChart.setValue("WEIGHTFOUR", w4);
         weightsList.add(listpos, w4); 

         request.setAttribute("WeightSel", weightsList);  //list of selected weights
         request.setAttribute("WeightSum", weightSum(weightsList)); //sum of selected weights
         request.setAttribute("CalcResult", resultCalculator(weightsList)); //result of some calculations performed on selected weights

         // set piechart attributes

         JFreeChart inputWeightsPie = ChartFactory.createPieChart("Selected Weights",myServletPieChart,true,true,false);
         response.setContentType("image/png"); /* Set the HTTP Response Type */

         OutputStream out = response.getOutputStream();
         ChartUtilities.writeChartAsPNG(out, inputWeightsPie, 400, 300);/* Write the data to the output stream */
         //or alternatively:
         // ImageIO.write(inputWeightsPie.createBufferedImage(400, 300), "png", out);
         out.close();

        }


    } catch (NumberFormatException nfe) {
        request.setAttribute("errorMessage", "value must be a number!"); 
    }
    ServletContext ctx = this.getServletContext();
    RequestDispatcher dispatcher = ctx.getRequestDispatcher("/index.jsp");
    dispatcher.forward(request, response);
}
4

1 に答える 1

1

現在の (メイン) サーブレットは、html コンテンツのみに使用する必要があります。
チャート用に個別のサーブレットを作成します (使用できる場所writeChartAsPNG)。
JSP ページで <img src="servChart?w1=100&w2=200">は、パラメーターと同様に使用します。

UPDATE
また、同じサーブレットでチャート計算を行うこともできます。JFreeChartオブジェクトをセッションに入れます。そして、servChart?name=myChartサーブレットで、セッションから JFreeChart を (属性名で) 取得し、バイトとして出力します。

于 2013-08-26T23:48:11.607 に答える