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 :

Depuis une servlet; générer le contenu d'un email grâce à une JSP


Sujet :

Servlets/JSP Java

  1. #1
    Membre habitué Avatar de remyli
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 270
    Points : 151
    Points
    151
    Par défaut Depuis une servlet; générer le contenu d'un email grâce à une JSP
    Depuis une servlet; générer le contenu d'un email grâce à une JSP

    Bonjour à tous,

    Je cherche à générer du html dans ma servlet pour l'envoyer par email.
    J'ai donc pensé aux JSP. mais je ne sais pas comment récupérer le html généré..

    Je voudrais quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    String message = "";
    JSP maJSP = new JSP("chemin/de/ma JSP");
    maJSP.addParam("key", valeur);
    ....
    maJSP.addParam("key", valeur);
    message = maJSP.toHTML();
    (Je viens du monde php ... ça explique ma façon de penser souvent incompatible avec le java. (Ici c'est un fonctionnement similaire à un template que je voudrais reproduire. (rien à voir avec ça ! http://www-igm.univ-mlv.fr/~forax/ja...emplate/paper/)))

    Merci pour votre aide
    Orthographe => Message Privé constructif svp

  2. #2
    Membre habitué Avatar de remyli
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 270
    Points : 151
    Points
    151
    Par défaut
    Actuellement j'utilise ça pour renvoyer du html en réponse à une requete HTTP

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     
    response.setContentType("text/html");
    String token = "foo";
    request.setAttribute("token", token);
    this.getServletContext().getRequestDispatcher("/merci.jsp" ).include(request, response);
    response.flushBuffer();
     
    }
    Le problème est que à aucun moment je peux mettre le HTML généré dans une variable java ....
    Orthographe => Message Privé constructif svp

  3. #3
    Membre confirmé
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Points : 642
    Points
    642
    Par défaut
    si j'ai bien compris tu veux envoyer un mail au fomat html.

    Tu peux créer une variable de type StringBuffer qui contiendra le code html de ton email.

    passé par un fichier htm/html que tu place dans une variable de type String puis remplacer certaine clées du corps du message [objet message], [nom] ect...

  4. #4
    Membre habitué Avatar de remyli
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 270
    Points : 151
    Points
    151
    Par défaut Merci à link256
    Citation Envoyé par link256 Voir le message
    si j'ai bien compris tu veux envoyer un mail au fomat html.
    oui

    J'utilise pour ça la librairie commons-email-1.1.jar (org.apache.commons.mail)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    String message = ""; // La je veux pouvoir utiliser une jsp
     
    MultiPartEmail email = new MultiPartEmail();			email.setHostName(conf.getProperty("mail.hostName"));			email.addBcc(conf.getProperty("mail.backupAddress"));
    email.addTo(this.email, this.nom+" "+this.prenom);	
    email.setFrom(conf.getProperty("mail.from.email"), conf.getProperty("mail.from.name"));
    email.setSubject(conf.getProperty("mail.subject")+" "+conf.getProperty("mail.finTraitement.subject"));
    email.setMsg(message);					
    email.send();
    Citation Envoyé par link256 Voir le message
    Tu peux créer une variable de type StringBuffer qui contiendra le code html de ton email.

    passé par un fichier htm/html que tu place dans une variable de type String puis remplacer certaine clées du corps du message [objet message], [nom] ect...
    C'est une solution.... qui n'utilise pas la puissance des JSP .... mais ça peut marcher. je vais voir ça.
    Orthographe => Message Privé constructif svp

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    C'est un peu surprenant comme besoin mais bon, la seule solution que je vois, c'est d'encapsuler le corps de ta page dans un Tag (étendant BodyTagSupport) et dans la méthode doEndTag récupérer le contenu du corps pour l'envoyer (par le tag).
    La page aurait cette forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <html>
    <body>
     
    <taBibliothequeTag:leTag>
     
       ... le reste des balises html et/ou jsp ...
     
    </taBibliothequeTag:leTag>
     
    </body>
     
    </html>
    Le code du Tag pourrait s'inspirer de ceci
    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
     
     
    public class BodyContentTag extends BodyTagSupport
    {
        private static final long serialVersionUID = 1;
     
        @Override
        public int doEndTag() throws JspException
        {
            String body = getBodyContent().getString();
            StringBuilder sb = new StringBuilder(body);
            int p = 0;
            while ((p=sb.indexOf("<BR>")) != -1)
            {
                sb.replace(p, p+4, "\n");
            }
            System.out.println(sb.toString());
            return super.doEndTag();
        }  
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre habitué Avatar de remyli
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 270
    Points : 151
    Points
    151
    Par défaut replace
    Citation Envoyé par OButterlin Voir le message
    C'est un peu surprenant comme besoin
    ha ... heu moi je trouve ça surprenant que l'on trouve ça surprenant.

    J'ai utilisé la technique proposée par link256 et ça donne :

    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
     
    String templatePath = conf.getProperty("mail.finTraitement.htmlFilePath");
    // Fichier : cf http://www.developpez.net/forums/d17740/java/general-java/apis/io/fichier-lire-contenu-fichier/
    Fichier template = new Fichier(templatePath);
    String templateString = template.lire();
    templateString = templateString.replace("[nom_fichier]", "replacement");
    templateString = templateString.replace("[non_conforme]", "replacement");
    templateString = templateString.replace("[nom_scenario]", "replacement");
    templateString = templateString.replace("[lienAcquittement]", "replacement");
    templateString = templateString.replace("[lienCertificat]", "replacement");
     
    if(!isValide)	{	
    int p1 = templateString.indexOf("[paragrapheCertificatStart]");
    int p2 = templateString.indexOf("[paragrapheCertificatStop]");
    String paragrapheCertificat = (String) templateString.subSequence(p1, p2);
    templateString.replace(paragrapheCertificat,"");
    }
     
    message = templateString;
     
    HtmlEmail email = new HtmlEmail();
    email.setHtmlMsg(message);
    ....
    email.send();
    Mais je trouve ça un pneu sale et pas très puissant.
    (pour la puissance ça passe pour cette foie, mes besoins ne sont pas très importants ici)

    Mais doit quand même y avoir un truc que j'ai mal expliqué
    Orthographe => Message Privé constructif svp

  7. #7
    Membre habitué Avatar de remyli
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 270
    Points : 151
    Points
    151
    Par défaut <taBibliothequeTag:leTag>
    Citation Envoyé par OButterlin Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <html>
    <body>
    <taBibliothequeTag:leTag>
       ... le reste des balises html et/ou jsp ...
    </taBibliothequeTag:leTag>
    </body>
    </html>
    Pour répondre à mon besoins il faudrait faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <taBibliothequeTag:leTag>
    <html>
    <body>
       ... Mon Html qui ne sera pas envoyé au navigateur 
       car je veux le mettre dans un email ... 
       Mais je souhaite bénéficier de la puissance de JSP pour générer, 
       par exemple, des tableaux avec mes beans ...
    </body>
    </html>
    </taBibliothequeTag:leTag>
    Orthographe => Message Privé constructif svp

  8. #8
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Je me suis mal exprimé, ce n'est pas le besoin d'envoyer un mail qui est surprenant, c'est plutôt d'utiliser une JSP pour formater le message qui me surprend... mais pourquoi pas après tout

    Pour la solution du tag, elle conviendrait tout à fait... au détail près qu'il faudrait tout de même renvoyer quelque chose à l'utilisateur... ça pourrait très bien être un message d'achèvement...
    J'aurais donc tendance à faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <html>
    <body>
    <taBibliothequeTag:leTag>
    ... Mon Html qui ne sera pas envoyé au navigateur 
    car je veux le mettre dans un email ... 
    Mais je souhaite bénéficier de la puissance de JSP pour générer, 
    par exemple, des tableaux avec mes beans ...
     
    Et j'utiliserais la méthode doEndTag pour mettre à la place le message d'achèvement :yaisse2:
    </taBibliothequeTag:leTag>
    </body>
    </html>
    la méthode getBodyContent().getString() te permet de récupérer le corps du tag (tout ce qui entre la balise ouvrante et fermante) et tu peux écrire un contenu à la place via getPreviousOut().write(...)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre confirmé
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Points : 642
    Points
    642
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    Je me suis mal exprimé, ce n'est pas le besoin d'envoyer un mail qui est surprenant, c'est plutôt d'utiliser une JSP pour formater le message qui me surprend... mais pourquoi pas après tout
    Même chose pour moi je ne voyais pas l'interet d'utiliser les JPS pour ça ^^
    Venir d'un autre mode php pour toi, fait voir les choses différements et parfois de manière interessante .

    par rapport à la proposition que je te faisais qui te laisse sur document figé dans son enssemble qui ne te permet pas de beaucoup moduler le corps de l'email.

    J'ai pas encore totalement saisie ce que tu veux faire, je ne connais pas grand chose au Template voir rien du tout ^^

    mais une solution comme Apache_Velocity pourra peut être répondre à tes besoins.


    note : peut être que je me pose mal les questions mais coupler HTTPClient avec l'appelle d'une JSP pour en récupérer le code HTML génére pourrait être une solution simple à mettre en place ?

  10. #10
    Membre habitué Avatar de remyli
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 270
    Points : 151
    Points
    151
    Par défaut
    Citation Envoyé par link256 Voir le message
    note : peut être que je me pose mal les questions mais coupler HTTPClient avec l'appelle d'une JSP pour en récupérer le code HTML génére pourrait être une solution simple à mettre en place ?
    C'est une idée,, simple, je sais pas.

    Pour expliquer le point de vue php :

    en php pour générer du html on utilise un moteur de template (exemple : smarties)

    ça marche comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $tpl = new Template("mon/fichier/html.tpl");
    $tpl.setVar("titre", "le titre de la page");
    $tpl.setVar("data", $monTableauDeDonneesResultaDuneReqSQLParExemple);
    $html = $tpl->parse();
     
    echo $html;
    Avantages :
    Permet de séparer la logique métier de l'affichage.
    Puissance

    ----
    Pour moi ça ressemble à une jsp.
    Orthographe => Message Privé constructif svp

  11. #11
    Membre confirmé
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Points : 642
    Points
    642
    Par défaut
    Que voudrais tu faires comme JSP pour générer le code html ?
    tu as déjà le code ou juste les idées pour le moment ?

  12. #12
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Pour les templates, on utilise Tiles dans "le monde java"
    Mais le problème n'est pas spécialement dans les templates (ou j'ai mal compris ?)

    Peux-tu préciser comment tu appelles l'envoi du mail ?

    Page + click sur un bouton -> servlet -> JSP -> envoi mail -> ? (on affiche quoi)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/05/2011, 19h20
  2. Réponses: 10
    Dernier message: 27/02/2008, 14h21
  3. Réponses: 1
    Dernier message: 12/02/2008, 13h47
  4. [Servlet]pdf sur le disque, l'afficher avec une servlet
    Par canou94 dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 08/12/2005, 15h11
  5. [Upload]Telechargement grâce à une servlet : nom du fichier
    Par xtremax3 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 23/11/2005, 22h25

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