Graphe en JSP

nasix
Graphe en JSP

Salut,

Pourriez-vous m'aider à faire des graphes en JSP, je cherche une solution telle que JPGRAPH sous php. qui me permet de générer des images à partir des valeurs dynamiques.

Merci d'avance.

Niroken

Hello Nasix,

En fait si je ne me trompe pas, JPGRAGH fonctionne de la manière suivante à peu de chose près :

Ta page qui veut afficher des graphes va contenir des balises HTML:

<img src="http://unserveur/monGrapique.php" width="x" height="y" />

Et quand ton navigatuer recevra ses balises, il ira éxécuter les scripts php ici "monGraphique.php" qui lui renvera une image.

Pour faire la mme chose en java, il suffirait à mon avis que ta jsp fasse pointer les sources de tes images sur des servlets qui créeront les images, ca donnerait :

<img src="http://unserveur/maServletGrapique" width="x" height="y" />

Bon la il reste donc le plus gros du boulot à faire, trouver une librairie java qui fait des graphes:) (pour l instant aucune idée), et puis ensuite ne pas oublier de setter correctement les content type pour ton objet httpServletResponse me semble t il.....

Voici des header qui vont bien :

"Content-type: image/png"; 
"Content-type: image/jpeg"; 

J espère t'avoir aidé.

Bonne chance,
Niroken

nasix

Hello Niroken,

Je te remercie pour ton aide.

Voila, j'ai trouvé ce qui manquait dans ton aide, en fait, il y'a JFreeChart qui peut générer des images (il les exporte carrément : http://www.jfree.org/jfreechart/faq.html#FAQ9), il suffit donc de créer une servlet ImgGenServlet qui génère une image et l'intégrer dans une balise img :

<img src="http://unserveur/ImgGenServlet" width="x" height="y" /> 

Une fois je termine le code de ma servlet, je vous en ferai part.

Merci beaucoup.

nasix

Hello,

Super j'y suis arrivé.

Avant de présenter mon code qui utilise la librairie JFreeChart, je dirais en quelques mots de quoi s'agit-il.

JFreeChart est une librairie gratuite d'édition de graphique pour la plateforme Java. elle est conçue pour être inclue dans des applications, applets, servlets et JSP.

Elle permet de faire beaucoup de types de graphics, Histogrammes, graphes, camembert, ... etc

Pour l'utiliser, il est préférable de visiter son site officiel pour voir le "Comment installer ? ".

Une fois tout est prêt, vous pouvez tester mon code qui marche à merveil.

Voici donc ma servlet GraphicServlet :

import javax.servlet.*;
import javax.servlet.http.*;

import java.io.*;

import java.awt.*;
import java.awt.image.BufferedImage;

import com.sun.image.codec.jpeg.*;
import java.util.logging.*;

import org.jfree.chart.*;
import org.jfree.data.general.DefaultPieDataset;

public class GraphicServlet extends HttpServlet {

    public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {

        DefaultPieDataset data = new DefaultPieDataset();
        data.setValue("Première Catégorie", 43.2);
        data.setValue("Deuxième Caégorie", 27.9);
        data.setValue("Troisième Caégorie", 79.5);
        // create a chart...
        JFreeChart chart = ChartFactory.createPieChart(
                "Exemple de graphe en Camembert",
                data,
                true, // legend?
                true, // tooltips?
                false // URLs?
                );
        // create and display a frame...
        ChartFrame frame = new ChartFrame("First", chart);
        frame.pack();
        
        res.setContentType("image/jpeg");
        res.setHeader("Content-disposition", "inline; filename=circle.jpg");
        
        this.genereEtAffichreJPEG(frame.getChartPanel(), res.getOutputStream());

    }

    public void genereEtAffichreJPEG(Component myComponent, OutputStream out) {
        try {
            Dimension size = myComponent.getSize();
            BufferedImage myImage = new BufferedImage(size.width, size.height, BufferedImage.TYPE_INT_RGB);
            Graphics2D graph = myImage.createGraphics();
            myComponent.paint(graph);
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
            encoder.encode(myImage);
            out.close();
        } catch (IOException ex) {
            Logger.getLogger(GraphicServlet.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ImageFormatException ex) {
            Logger.getLogger(GraphicServlet.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

Cette servlet m'affiche un graphic dans le navigateur.

Je peux donc intégrer ce graphic dans une page JSP via la balise img comme suit :

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Exemple de graphic</title>
    </head>
    <body>
        <h2>Ceci est un test de graphic en JSP !!</h2>
        
        <img src="http://Serveur:port/WebApplication/GraphicServlet" />
    </body>
</html>

Merci Niroken.

Bonne chance à tout le monde.

fredericmazue

Quote:
JFreeChart est une librairie gratuite d'édition de graphique pour la plateforme Java. elle est conçue pour être inclue dans des applications, applets, servlets et JSP.

Tous ceux qui ont lu Programmez! 101 le savent bien ;) Tu ne l'as pas lu ?

Quote:
Pour l'utiliser, il est préférable de visiter son site officiel pour voir le "Comment installer ? ".

Et il est encore plus préférable de lire Programmez! 101 ;)

nasix

Ah oui,

En fait, je l'ai fait juste pour que ce sujet donne presque tout ce dont on au ra besoin pour tester ma solution.

Sinon, pas tous les visiteurs du forum lisent les magazines.

Mais je ne peux pas nier que ça donne plus de détail et de référencement sur la librairie.

Merci.
Bonne journée.

fredericmazue

Quote:
Sinon, pas tous les visiteurs du forum lisent les magazines.

Ils ont tort !!! :D

Quote:
Mais je ne peux pas nier que ça donne plus de détail et de référencement sur la librairie.

Merci :) A bientôt nasix

cotede2

bonjour à tous.
J'ai testé la servlet et la jsp qui l'appelle j'ai une page avec une croix à la place de l'image.
Ca ne semble pas marché.

Ma page jsp s'appelle par le lien suivant
http://localhost:8084/badgeuse/image.jsp

et l'image je l'appelle comme ceci : <img src="http://localhost:8084/badgeuse/GraphicServlet" />

Pourquoi ? merci