IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Servlets/JSP Java Discussion :

Affichage d'un Jfreechart dans une JSP/Servlet


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Inscrit en
    Août 2010
    Messages
    416
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 416
    Par défaut Affichage d'un Jfreechart dans une JSP/Servlet
    Bonjour, j'ai fait une classe qui se connecte a une base de donnée et qui affiche une courbe. Jusqu'au la tous fonctionne à merveille..
    Sauf que lors de l'affichage dans une JSP, je me suis bloqué, j'ai crée une servlet et tt mais je ne sais pas comment 'afficher.

    merci de me conseiller
    voici ma classe qui trace la courbe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
     
    package marouene;
     
    import java.awt.Color;
    import java.sql.Connection;
    import java.sql.Date;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.sql.Timestamp;
     
    import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartPanel;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.plot.Marker;
    import org.jfree.chart.plot.ValueMarker;
    import org.jfree.chart.plot.XYPlot;
    import org.jfree.chart.renderer.xy.StandardXYItemRenderer;
    import org.jfree.chart.renderer.xy.XYItemRenderer;
    //import org.jfree.data.time.Hour;
    //import org.jfree.data.time.Minute;
    import org.jfree.data.time.Minute;
    //import org.jfree.data.time.RegularTimePeriod;
    import org.jfree.data.time.Hour;
    import org.jfree.data.time.Second;
    import org.jfree.data.time.TimeSeries;
    import org.jfree.data.time.TimeSeriesCollection;
    import org.jfree.ui.ApplicationFrame;
    import org.jfree.ui.RefineryUtilities;
     
    import com.sun.org.apache.xpath.internal.operations.Minus;
     
    public class TimeSeriesDemoTest extends ApplicationFrame {
     
     
    	private static final long serialVersionUID = 1L;
     
     
        public TimeSeriesDemoTest(final String title) throws SQLException {
     
        	super(title);
        	String url = "jdbc:mysql://localhost:3306/newdata";
        	String username = "root";
        	String password = "root" ;
        	try{
            		Class.forName("com.mysql.jdbc.Driver");
            	}
            	catch (ClassNotFoundException e){
            		System.out.println("Pilote non retrouvé");
            	}
     
            	Statement stmt = null;
    			try {
     
         	       Connection con = DriverManager.getConnection(url,username,password);
         	       stmt = con.createStatement();
         	    }
         	    catch (SQLException sqle){System.out.println("Erreur de requete");}	
     
         	    ResultSet rs = (ResultSet) stmt.executeQuery("select heure,ftp from ftptable order by heure ;");	
     
     
     
     
     
            final TimeSeries series = new TimeSeries("Minute", Minute.class);
     
            while(rs.next()){
     
               	Timestamp v1 = rs.getTimestamp("heure");
     	    	double v2=rs.getDouble("ftp");
     
     	    	series.addOrUpdate( new Second(v1), v2);
     
     	    }
     	    rs.close();
     
     
            final TimeSeriesCollection dataset = new TimeSeriesCollection(series);
            dataset.addSeries(series);
     
     
            dataset.setDomainIsPointsInTime(true);
     
     
            // create a title with Unicode characters (currency symbols in this case)...
            final String chartTitle = "Evolution du transfert Ftp";
            final JFreeChart chart = ChartFactory.createTimeSeriesChart(
                chartTitle,
                "Time", 
                "Débit en Ko/s",
                dataset,
                true,
                true,
                false
            );
     
            final XYPlot plot = chart.getXYPlot();
      //      plot.setInsets(new Insets(0, 0, 0, 20));
            final Marker marker = new ValueMarker(0.0);
            marker.setPaint(Color.blue);
            marker.setAlpha(0.8f);
            plot.addRangeMarker(marker);
            plot.setBackgroundPaint(null);
     
            final XYItemRenderer renderer = plot.getRenderer();
            if (renderer instanceof StandardXYItemRenderer) {
                final StandardXYItemRenderer r = (StandardXYItemRenderer) renderer;
                //r.setPlotShapes(true);
                r.setShapesFilled(true);
            }
            final ChartPanel chartPanel = new ChartPanel(chart);
            chartPanel.setPreferredSize(new java.awt.Dimension(700, 400));
            chartPanel.setMouseZoomable(true, false);
            setContentPane(chartPanel);
     
        }
     
        public void tracer () throws SQLException {
     
            final TimeSeriesDemoTest demo = new TimeSeriesDemoTest("Ftp ");
            demo.pack();
            RefineryUtilities.centerFrameOnScreen(demo);
            demo.setVisible(true);
     
        }
     
    }
    Servlet :je ne suis pas sur d'ailleurs quelle fonctionne a 100%
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
     
    package metier;
     
    import java.io.IOException;
    import java.io.OutputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.sql.Timestamp;
     
    import javax.servlet.ServletException;
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartUtilities;
    import org.jfree.chart.JFreeChart;
    import org.jfree.data.time.Minute;
    import org.jfree.data.time.TimeSeries;
    import org.jfree.data.time.TimeSeriesCollection;
     
     
    public class tracage extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
     
      /**
         * 
         */
        private static final long serialVersionUID = 1L;
     
        ServletOutputStream outb;
        Connection connection;
        Statement statmt;
        ResultSet rs;
        String url = "jdbc:mysql://localhost:3306/newdata;";
        String username = "root";
        String password = "root" ;
        String driver ="com.mysql.jdbc.Driver";
     
        //Initialiser les variables globales
     
        public void init() throws ServletException {
            try{
                Class.forName(driver);
            }
            catch (ClassNotFoundException e){
                System.out.println("Pilote non retrouvé");
            }
            try{
                connection = DriverManager.getConnection(url,username,password);
            }
            catch(SQLException sqle){System.out.println("Erreur lors de la connexion à la base de données");
            destroy();}
      }
     
      //Traiter la requête HTTP Get
     
      public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
     
     
        outb = res.getOutputStream();
     
     
        String requete = "select heure,ftp from ftptable order by heure ;";
     
        final TimeSeries series = new TimeSeries("Minute", Minute.class);
     
        try {
            statmt = connection.createStatement();
            rs = statmt.executeQuery(requete);
     
            while(rs.next()){
     
                Timestamp v1 = rs.getTimestamp("heure");
                double v2=rs.getDouble("ftp");
                series.addOrUpdate( new Minute(v1), v2);
            } 
            rs.close();
        }
        catch (SQLException sqle){System.out.println("Erreur de requete");}
     
        final TimeSeriesCollection dataset = new TimeSeriesCollection(series);
        dataset.addSeries(series);
        final String chartTitle = "Evolution du transfert Ftp";
        final JFreeChart chart = ChartFactory.createTimeSeriesChart(
                chartTitle,
                "Time", 
                "Débit en Ko/s",
                dataset,
                true,
                true,
                false
            );
     
        OutputStream out = res.getOutputStream(); 
        res.setContentType("image/png"); 
        ChartUtilities.writeChartAsPNG(out, chart, 600, 500);
     
      }
     
      //Nettoyer les ressources
      public void destroy() {
        try {
               connection.close();
               }
               catch (SQLException sqle){System.out.println("Erreur de fermeture de connexion à la base de données");}
     
        }
     
    }
    Partie JSP pour l'affichage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <div class="entry">
    			    <img src="metier/tracage"/>
    				</div>

  2. #2
    Membre émérite Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Par défaut
    au final ton image tu enregistres ton image sur le disque ? ou tu veux juste la renvoyer au navigateur ?

  3. #3
    Membre chevronné
    Inscrit en
    Août 2010
    Messages
    416
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 416
    Par défaut
    Non je veux juste la renvoyer au naviguateur, desolé si mon code servlet est un peu desagreable a voir, mais je suis debutant dans els servlet , j'ai fait le tour du forum pour faire une chose pareille

  4. #4
    Membre émérite Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Par défaut
    regarde du côté de la classe ImageIO avec la méthode createImageOutputStream et tu trouveras facilement sur le net comment renvoyer un fichier une image au navigateur

    Sinon autre solution tu écris ton image dans un fichier et tu envois à ta JSP le chemin du fichier

  5. #5
    Membre chevronné
    Inscrit en
    Août 2010
    Messages
    416
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 416
    Par défaut
    Citation Envoyé par isma4 Voir le message
    regarde du côté de la classe ImageIO avec la méthode createImageOutputStream et tu trouveras facilement sur le net comment renvoyer un fichier une image au navigateur

    Sinon autre solution tu écris ton image dans un fichier et tu envois à ta JSP le chemin du fichier
    J'opte plutot pour la 2eme solutin j'ai ajouté ce bout de code mais l'image ne s'est pas crée comment lancer la servlet en JSP !! ?? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     ChartFrame frame = new ChartFrame("First", chart);
        frame.pack();
        frame.setVisible(true);
        BufferedImage myImage = new BufferedImage(600, 300,BufferedImage.TYPE_INT_RGB);
        Graphics2D graph = myImage.createGraphics();
        frame.getChartPanel().paint(graph);
        try {
            OutputStream out = new FileOutputStream("ftp");
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
            encoder.encode(myImage);
            out.close();
     
          } catch (Exception e) {
     
          }
    mais le problème c'est que ma courbe prend ses valeurs d'une base de donnée d'une facon continue (chaque 20 min elle ajoute une valeurs)
    je pense que si je l'affiche en tant qu'image simple, je ne pourrai plus alors etre a jour (quand il y'a un nouveau point dans ma base)

  6. #6
    Membre émérite Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Par défaut
    Un des problèmes est que tu écris ton code métier dans ta servlet.
    Tu devrais créer une classe métier qui va créer ton image à partir des infos de ta base de données.
    Disons que tu appelles cette classe ChartService.Cette classe va te construire tes images et te les enregistrer. Elle va bien sûr renvoyer un Objet qui va t'indiquer où se trouve ton fichier.

    Ensuite tu as ta servlet ChartServlet qui va appeler ta classe ChartService et qui va renvoyer le chemin de l'image à afficher dans ta JSP

    Et enfin pour le rafraichissement, c'est juste une idée comme ça mais tu peux créer un thread qui se réveille toutes les 20 minutes pour mettre à jour tes images.

    Mais je te conseille d'abord de créer ta classe ChartService avec les méthodes qui vont bien et après on verra ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Intégrer un graphe JFreeChart dans une JSP avec Struts 2
    Par eiketchi-san dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 24/08/2012, 13h35
  2. Affichage d'objets complexe dans une JSP
    Par seyar666 dans le forum Taglibs
    Réponses: 2
    Dernier message: 12/06/2012, 11h56
  3. Affichage liste de String dans une jsp
    Par Annsen dans le forum Struts 1
    Réponses: 1
    Dernier message: 25/10/2011, 15h43
  4. Différence d'affichage des objets null dans une JSP
    Par marinew dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 26/08/2008, 09h03
  5. Affichage Blob (objet binaire) dans une jsp
    Par kokumbo dans le forum Struts 1
    Réponses: 2
    Dernier message: 19/02/2008, 16h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo