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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé 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
    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

  2. #2
    Membre éclairé 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
    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 ....

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

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    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 éclairé 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
    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.

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    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 éclairé 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
    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é

  7. #7
    Membre éclairé 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
    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>

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