0

<img />次のようにタグでjspページを呼び出してhtmlページに画像を表示しようとしています。動的 Web プロジェクトを作成index.htmlし、webcontent フォルダーのtimeseries.jsp下のwebcontentjspフォルダーの下に追加しました。サーバーでプロジェクトを実行すると、apache tomcat 6.0.18 が同期されますが、URL を入力するlocalhost:8080/jfreeと、ページに hello doctor と画像アイコンのみが表示されますが、画像は表示されません。

私のHTMLは、

<!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">
<title>Insert title here</title>
</head>
<body>
Hello doctor
<img src="/jfree/jsp/Timeseries.jsp" alt="Progress chart" />
</body>
</html>

私のJSPは、

<%@ page import="java.awt.Image" %>
<%@ page import="java.awt.*"%>
<%@ page import="java.text.SimpleDateFormat"%>
<%@ page import="java.awt.BasicStroke"%>
<%@ page import ="org.jfree.ui.ApplicationFrame"%>
<%@ page import="java.io.*" %>
<%@ page import="java.io.File"%>
<%@ page import="org.jfree.chart.*" %>
<%@ page import="org.jfree.chart.axis.*" %>
<%@ page import="org.jfree.chart.entity.*" %>
<%@ page import="org.jfree.chart.labels.*" %>
<%@ page import="org.jfree.chart.plot.*" %>
<%@ page import="org.jfree.chart.renderer.category.*" %>
<%@ page import="org.jfree.chart.urls.*" %>
<%@ page import="org.jfree.data.category.*" %>
<%@ page import="org.jfree.data.general.*" %>
<%@ page import="org.jfree.data.time.Minute"%>
<%@ page import="org.jfree.data.time.Hour"%>
<%@ page import="org.jfree.data.time.TimeSeries"%>
<%@ page import="org.jfree.data.time.TimeSeriesCollection"%>
<%@ page import="org.jfree.data.xy.XYDataset"%>
<%@ page import="org.jfree.chart.plot.XYPlot"%>
<%@ page import="org.jfree.chart.renderer.xy.StandardXYItemRenderer"%>
<%@ page import="org.jfree.chart.renderer.xy.XYItemRenderer"%>
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.DriverManager" %>
<%@ page import="java.sql.SQLException" %>
<%@ page import="java.sql.PreparedStatement" %>
<%@ page import="java.sql.ResultSet" %>
<%@ page import=java.sql.Statement" %>
<%@ page import="javax.servlet.*" %>
<%@ page import="javax.servlet.http.*" %>

<%@ page import="java.awt.image.BufferedImage"%>
<%
try
{
    File image = File.createTempFile("image", "tmp");

    //chart class instance
    Fms fm = new Fms("Graph");

    JFreeChart chart = fm.createChart(fm.dataset);
    ChartUtilities.saveChartAsPNG(image, chart, 500, 400);
    //get input stream
    FileInputStream fileInStream = new FileInputStream(image);
    //output stream foe returning chart as image
    OutputStream outStream = response.getOutputStream(); 
    long fileLength;
    byte[] byteStream;
    fileLength = image.length();
    byteStream = new byte[(int)fileLength];
    //read chart image
    fileInStream.read(byteStream, 0, (int)fileLength);
    //returns chart image whenever called
    response.setContentType("image/png");
    response.setContentLength((int)fileLength);
    response.setHeader("Cache-Control","no-store,no-cache, must-revalidate, post-check=0, pre-check=0");
    response.setHeader("Pragma", "no-cache");
    fileInStream.close();
    outStream.write(byteStream);
    outStream.flush();
    outStream.close();
}
catch (IOException e)
{
    System.err.println("Problem occurred creating chart.");
}
%>
<%!
public class Fms extends ApplicationFrame {
    //Main class
    XYDataset dataset= null;
    public Fms(final String title) {
        super(title);
        dataset= createDataset();
        final JFreeChart chart = createChart(dataset);
        final ChartPanel chartPanel = new ChartPanel(chart);
        chartPanel.setPreferredSize(new java.awt.Dimension(700, 570));
        chartPanel.setMouseZoomable(true, false);
        setContentPane(chartPanel);
    } 
    //chart creation method
    JFreeChart createChart(final XYDataset dataset) {
        final JFreeChart chart = ChartFactory.createTimeSeriesChart(
                                    "Speed Chart",
                                    "Time",
                                    "Speed",
                                    dataset,
                                    true,
                                    true,
                                    false
                                    );
        chart.setBackgroundPaint(Color.white);
        final XYPlot plot = chart.getXYPlot();
        plot.setBackgroundPaint(Color.lightGray);
        plot.setDomainGridlinePaint(Color.white);
        plot.setRangeGridlinePaint(Color.white);
        plot.setDomainCrosshairVisible(true);
        plot.setRangeCrosshairVisible(false);
        final XYItemRenderer renderer = plot.getRenderer();

        if (renderer instanceof StandardXYItemRenderer) {
            final StandardXYItemRenderer rr = (StandardXYItemRenderer) renderer;
            rr.setShapesFilled(true);
            renderer.setSeriesStroke(0, new BasicStroke(1.0f));
            renderer.setSeriesStroke(1, new BasicStroke(1.0f));
        }    
        final DateAxis axis = (DateAxis) plot.getDomainAxis();
        axis.setDateFormatOverride(new SimpleDateFormat("dd:MM")); 
        try{
            final ChartRenderingInfo info = new ChartRenderingInfo
            (new StandardEntityCollection());
            final File file1 = new File("c:/Documents and Settings/accounts/WebApplication2/web/barchart.png");
            ChartUtilities.saveChartAsPNG(file1, chart, 600, 400, info);
        }catch(Exception e){ }

        return chart;
    }
    //data set generation method
    private XYDataset createDataset() {

        final TimeSeriesCollection dataset = new TimeSeriesCollection();
        dataset.setDomainIsPointsInTime(true);

        final TimeSeries s1 = new TimeSeries("Series 1", Minute.class);
        s1.add(new Minute(0, 0, 7, 7, 2003), 10.2);
        s1.add(new Minute(30, 12, 7, 8, 2003), 23.0);
        s1.add(new Minute(15, 14, 7, 9, 2003), 48.0);

        final TimeSeries s2 = new TimeSeries("Series 2", Minute.class);
        s2.add(new Minute(0, 0, 7, 7, 2003), 23.0);
        s2.add(new Minute(30, 12, 7, 8, 2003), 9.0);
        s2.add(new Minute(15, 14, 7, 9, 2003), 36.0);

        dataset.addSeries(s1);
        dataset.addSeries(s2);

        return dataset;
    }
}
%>

jspで画像を表示していませんか?助けはありますか?

4

4 に答える 4

1

これ可能であり、非常に単純でもあります。また、次のタグを使用して、JSP ページの応答タイプを設定できます。

<%@page contentType="image/png" pageEncoding="UTF-8"%>

さらに、これらのグラフをサーバーのファイル システムに保存する必要はありません。これらは、ImageIO クラスを使用して、応答の出力ストリームに直接書き込むことができます。以下は、私が名前を付けた JSP ページの例ですChart.jsp

<%@page import="javax.imageio.*"%>
<%@page import="org.jfree.data.xy.*"%>
<%@page import="org.jfree.chart.*"%>
<%@page import="java.awt.image.*"%>
<%@page contentType="image/png" pageEncoding="UTF-8"%>
<%
    DefaultXYDataset data = new DefaultXYDataset();
    data.addSeries("Set 1", new double[][] {
        {1,  2,  4,  5,  6,  7}, 
        {0, 10, 20, 30, 20, 10}
    });
    JFreeChart chart = ChartFactory.createXYLineChart("Title", "X Label", "Y Label", data);
    BufferedImage bi = chart.createBufferedImage(640, 480);
    ImageIO.write(bi, "png", response.getOutputStream());
%>

そして、index.htmlこれを参照するのは次のとおりです。

<!DOCTYPE html>
<html>
    <head>
        <title></title>
        <style>body { text-align: center; }</style>
    </head>
    <body>
        <h1>A Chart:</h1>
        <img src="Chart.jsp" alt="Chart" />
    </body>
</html>

そして、これは結果です:

チャート

于 2013-09-20T07:02:53.053 に答える
0

以下の行でエラーが発生している可能性があります。

FileInputStream fileInStream = new FileInputStream(image);  

を使用して、まず画像の有無を確認しimage.exist()ます。静止画像では問題なく動作しているため、先に進みます。

于 2013-09-19T07:06:23.180 に答える
0

まず、このステートメントは機能しません。<img src="/jfree/jsp/Timeseries.jsp" alt="Progress chart" />

<img ...ここであなたの思考プロセスは、JSP が画像を返し、その画像を htmlタグで表示できるということだと思います。これは、呼び出し元に何かが返されるメソッド呼び出しとは異なります

/jfree/jsp/Timeseries.jspHTML の場合、読み込まれると、このファイルが jpeg や bmp などの画像形式のファイルであると想定して、ファイルを見つけようとします。実際には、サーバー上で JSP 呼び出しを実行することはありません。

このファイルはいくつかのバイトを含む単純な ascii ファイルであるため (有効な jsp コードであっても、画像バイトではありません); バイトは実際にはイメージを表していません。したがって、HTML は機能しません。

編集 1: 達成したいことは、次のように行うことができます。

  1. 実行時にイメージを構築するサーブレットを作成し、それをサーバーの場所に保存します。

  2. このアプリケーションをテストして、サーブレットが /apps/html/images/yourImage.jpg などのサーバーの場所に画像ファイルを作成しているかどうかを確認します。

  3. 画像の場所が、html がアクセスできる場所であることを確認してください。とりあえずHTMLと同じディレクトリに画像を生成します。

  4. 画像が生成され、画像エディターを使用して画像を開くことができたら、HTML で同じ画像名を (相対位置で) 設定します。

  5. サーブレット コードを編集してリダイレクト コードを追加し、サーブレットがユーザーを html ページにリダイレクトするようにします。

  6. HTML が読み込まれるまでに画像が既に存在するため、HTML は正常に動作するはずです。

これらのステップがあなたの目標を達成することを願っています。

于 2013-09-19T05:08:32.993 に答える