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 :

[JSP]Pb passage de paramètres formulaire


Sujet :

Servlets/JSP Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 49
    Points : 28
    Points
    28
    Par défaut [JSP]Pb passage de paramètres formulaire
    Bonjour,

    Mes péripéties continuent...
    Mon but : afficher le contenu d'un fichier chargé par l'utilisateur dans la textarea de msg.jsp.
    Pour le chargement, j'utilise le package FileUpload.

    Voilà ma page importer.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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    <%@ page import="java.io.*" %>
     
    <script language="JavaScript">
        function choixURL(){
                var objForm = document.getElementById('formChargement');
                var boutOnClick=document.getElementById('cache').value;
                if(boutOnClick=="Annuler")
                        objForm.action = "index.jsp";
                return false;
        }
    </script>
     
    <html>
    <head>
    <title>Page de chargement du fichier</title>
        <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
    </head>
    <body>
        <form name="formChargement" action="uploadFormulaire.jsp" method="post" enctype="multipart/form-data" OnSubmit="choixURL()" id="formChargement">
            Choisissez votre fichier dans l'arborescence : <input type="file" name="monFichier"><br/><br/>
            <input type="submit" value="Charger le fichier"/>
            <input type="submit" value="Annuler" onclick="document.getElementById('cache').value=this.value;"/>
            <input type='hidden' id='cache'/>
        </form>
     
        <%
            String fichier = request.getParameter("monFichier");
            pageContext.getSession().setAttribute("fichier", fichier);
        %>
     
    </body>
    </html>
    et la page appelée pour traiter les informations du formulaire : uploadFormulaire.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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    <%@ page import="org.apache.commons.fileupload.*, java.util.List, java.io.File, java.util.Iterator" %>
    <%
       String monFic = (String)request.getParameter("monFichier");
       String vide="";
            boolean isMultipart = FileUpload.isMultipartContent(request);
            if(!isMultipart){
                request.setAttribute("msg", "Request was not multipart!");
                request.getRequestDispatcher("msg.jsp").forward(request, response);
                return;
            }
            DiskFileUpload upload = new DiskFileUpload();
            List items = upload.parseRequest(request);
            Iterator itr = items.iterator();
            while(itr.hasNext()){
                FileItem item = (FileItem) itr.next();
                if(item.isFormField()) {
                    String fieldName = item.getFieldName();
                    if(fieldName.equals("name"))
                        request.setAttribute("msg", "Thank You: " + item.getString());
                } else {
                    File fullFile = new File(item.getName());
                    File savedFile = new File(getServletContext().getRealPath("/")+"/tmp/", fullFile.getName());
                    item.write(savedFile);
                }
            }
            request.getRequestDispatcher("msg.jsp").forward(request, response);
        %>
    et la page msg.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
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    <%@ page import="java.io.*" %>
    <%
        String msg = (String)request.getAttribute("msg");
        if(msg != null) {
            out.println("<font size=+1>" + msg + "</font><br/>");
        }
    %>
        <textarea readonly cols="50" rows="20">
            test de la page
             <%
                String monFichier = (String)getServletContext().getSession().getAttribute("fichier");
                try{
                    BufferedReader in = new BufferedReader (new FileReader (monFichier));
                    String str;
                    while ((str=in.readLine()) != null){
                        out.println(str);
                    }
                    in.close();
                } catch (IOException e){
                    out.println("Erreur d'ouverture du fichier");
                }
             %>
        </textarea>
        Cliquez <a href="importer.jsp">ici</a> pour retourner à la page de chargement de fichier.

    En lisant le forum, j'ai essayé de passer le nom du fichier dans un paramètre de session mais visiblement, cela ne fonctionne pas non plus...

    Bien sûr, à l'éxecution, j'ai une JasperException de la part de Tomcat.

    Si vous voyez où ça cloche.
    A +
    Arnapou

  2. #2
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello,

    Je pense que tu n'as pas bien saisie le principe des JSP/Servlet.

    Une Jsp ne doit pas comporter autant de traitement. Ce genre de chose est réservé à la servlet.

    Pour afficher le contenu d'un fichier dans un textarea, il faut que ta JSP importer.jsp fasse appel à une servlet qui va se charger de lire le contenu du fichier chargé par l'utilisateur, puis le stocker dans l'objet request pour le renvoyer ver la jsp msg.jsp.
    L'objet HTTPSession ne doit conserver que peu d'information.
    Cette objet est persistant en memoire serveur durant tout le temps ou l'utilisateur est connecté. Il ne faut pas qu'il soit trop lourd (en terme d'espace mémoire).
    Cette dernière se chargera d'affichier le message dans le textaréa.

    Le chargement du fichier peut se faire à partir de la JSP importer.jsp.

    J'espere que cela t'aidera, si tu as des questions n'hesite pas!
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 49
    Points : 28
    Points
    28
    Par défaut
    Non, effectivement... pour moi servlet et JSP même combat... surtout qu'à la compilation une JSP devient une servlet ... alors...

    Mais, si je fais une servlet, qu'est-ce qui va changer dans le code... j'ai bien envie de faire un copier coller de l'un à l'autre... est-ce que je peux générer juste un petit bout d'HTML avec la servlet ? tous les exemples que j'ai pu lire contiennent les balises de début de page HTML <html> <body> et cie...

    A +
    Arnapou

  4. #4
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello,

    Un modele bien connu permet en fait de faire la distinction entre la JSP et Servlet... MVC (2).

    Je suis d'accord avec toi a terme les deux seront servlet.
    Par contre, tu remarqueras qu'il est plus aisé de codé, et maintenir, du code dans un servlet que dans un JSP.
    Dans la JSP, cela devient vite confu entre le code HTML et les scriptlets..

    Pour revenir au modele MVC : Modele Vue Controler.
    Il existe aussi le modele MVC2 unifiant le controler.
    Un framework assez célébre se base sur le modele MVC2 : Struts

    La jsp doit être utilisée pour tout les aspects IHM, on doit y trouvé essentiellement du code HTML, Javascript, eventuellement (mais le moins possible ) du code Java.
    La servlet s'apparete au controler. Elle réceptionne les requetes du client. Elle se charge d'appeler les services qu'il lui sont mis à disposition preparer les données et les revoyer à la JSP .

    En respectant se genre de concept tu obtiens une separation des couches et d'autres choses encore que je ne vais pas détailler ici.

    J'espere que cela te permettra de faire une différence en les JSP et servlets.
    Si tu as des questions n'hesite pas.
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


  5. #5
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 49
    Points : 28
    Points
    28
    Par défaut
    Merci... oui effectivement, il y a une différence théorique... je suis tout à fait d'accord.

    Je vais essayer d'écrire la servlet effectuant le traitement du fichier, sauf que mon problème va être récurrent.. je n'arrive pas à récupérer le nom d fichier chargé... alors comment faire depuis ma servlet ?

    A +
    Arnapou

  6. #6
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello,

    En utilisant FileUpload ... cela ne devrait pas poser de problème pour récupérer le nom des fichiers.

    Est ce que tu pourrais montrer a trace de l'exception levée?
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


  7. #7
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 49
    Points : 28
    Points
    28
    Par défaut
    Ben là, avec le code tel qu'au dessus, voilà ce que cela lève comme exception :

    org.apache.jasper.JasperException: Impossible de compiler la classe pour la JSP
    Une erreur s'est produite à la ligne: 10 dans le fichier jsp: /msg.jsp
    Erreur de servlet générée:
    C:\Documents and Settings\Propriétaire\.netbeans\5.0\jakarta-tomcat-5.5.9_base\work\Catalina\localhost\Interface\org\apache\jsp\msg_jsp.java:55: cannot find symbol
    symbol : method getSession()
    location: interface javax.servlet.ServletContext
    String monFichier = (String)getServletContext().getSession().getAttribute("fichier");
    ^
    1 error
    enfin, apparemment, il ne connaît pas getAttribute ... je l'ai rajouté avec un import mais cela ne change rien... je désespère avec ce langage...

    A +
    Arnapou

  8. #8
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello,

    En fait, je crois que c'est getSession qui ne lui plait pas!


    Cette méthode n'existe pas sur l'interface Interface ServletContext
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


  9. #9
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Manifestement, tu as un problème de scope.

    Si tu mets ton objet dans la session via un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    session.setAttribute("tonObjet",tonObjet);
    il faut le récupérer via un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    session.getAttribute("tonObjet");
    Modératrice Java - Struts, Servlets/JSP, ...

  10. #10
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 49
    Points : 28
    Points
    28
    Par défaut
    @ c_nvy : j'ai essayé avec ta méthode, et c'est pareil...

    A +
    Arnapou

  11. #11
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Quelle erreur obtiens-tu ?
    Modératrice Java - Struts, Servlets/JSP, ...

  12. #12
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 49
    Points : 28
    Points
    28
    Par défaut
    Comme souvent, celle-là :

    org.apache.jasper.JasperException
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:370)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)
    org.apache.jsp.uploadFormulaire_jsp._jspService(uploadFormulaire_jsp.java:75)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)
    si ela peut permettre de trouver l'erreur...
    A +
    Arnapou

  13. #13
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Le message d'erreur que tu donnes n'est pas complet.
    Peux-tu nous donner la cause mère (root cause) ?
    Modératrice Java - Struts, Servlets/JSP, ...

  14. #14
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 49
    Points : 28
    Points
    28
    Par défaut
    lol.... oui effectivement :

    cause mère
    java.lang.NullPointerException
    java.io.FileInputStream.<init>(FileInputStream.java:103)
    java.io.FileInputStream.<init>(FileInputStream.java:66)
    java.io.FileReader.<init>(FileReader.java:41)
    org.apache.jsp.msg_jsp._jspService(msg_jsp.java:60)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)
    org.apache.jsp.uploadFormulaire_jsp._jspService(uploadFormulaire_jsp.java:75)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)

  15. #15
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 49
    Points : 28
    Points
    28
    Par défaut
    Bon, ben la ja cale sérieusement... est-ce que vous auriez un tit bout de code qui me permettrait de récupérer la valeur du champs file (le path du fichier), de le stocker et de le renvoyer à une autre page, pour, par la suite, afficher le contenu du fichier uploadé ?

    ou si vous avez une autre méthode pour afficher en live le fichier téléchargé par le user ?

    A + et merci d'avance
    Arnapou

  16. #16
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello,

    As tu identifié la ligne exacte ou tu as ce nullpointerException?
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


  17. #17
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 49
    Points : 28
    Points
    28
    Par défaut
    ben, c'est quand je récupère (enfin voudrais récupérer) le nom du fichier uploader, comme ça ne fonctionne pas, j'ai null dans la variable... et là, impossible d'ouvrir le fichier null donc nullpointerexception !

    mon pb est vraiment de récupérer le nom du fichier téléchargé.

    A +
    Arnapou

  18. #18
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello,

    Je crois que la méthode getRealPath n'est pas adapté à ta problématique.
    En regardant la JavaDoc :

    getRealPath

    public java.lang.String getRealPath(java.lang.String path)

    Returns a String containing the real path for a given virtual path. For example, the path "/index.html" returns the absolute file path on the server's filesystem would be served by a request for "http://host/contextPath/index.html", where contextPath is the context path of this ServletContext.

    The real path returned will be in a form appropriate to the computer and operating system on which the servlet container is running, including the proper path separators. This method returns null if the servlet container cannot translate the virtual path to a real path for any reason (such as when the content is being made available from a .war archive).

    Parameters:
    path - a String specifying a virtual path
    Returns:
    a String specifying the real path, or null if the translation cannot be performed


    Dans ton cas le fichier n'existe pas encore donc la méthode doit surement te renvoyer null!

    Essayes de mettre ton chemin en dur, à la place de l'utilisation du servletContext.
    Aussi je te conseille d'utiliser la propriété systeme FileSeparator.

    J'espere que cela t'aidera.
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


  19. #19
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 49
    Points : 28
    Points
    28
    Par défaut
    je viens d'essayer et cela ne change rien... j'ai l'impression qu'il ne rentre même pas dans les boucles... et puis, le code, je l'ai copié du site web jakarta (FileUpload) alors, il devrait fonctionner partout.

    pfiuuu... que ne donnerais-je pas pour changer de techno...

    A +
    Arnapou

  20. #20
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello,

    Je ne pense pas que ce soit la techno qui soit en cause!
    Tu dis avoir fait un copier/coller mais est ce que tu as essayé de comprendre ce que realisait ce code ?
    Il faudrait que tu utilises correctement la techno! Comme expliquer ci dessus! Modele MVC...

    Tu dis que tu as l'impression que cela ne rentre pas dans la boucle!
    Tu pourrais essayer de mettre des logs histoire de voir exactement ce qu'il se passe au niveau du traitement.

    Quand tu auras mis des logs, pourrais tu mettres en ligne le nouveau code + la trace?

    Courage!
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


Discussions similaires

  1. Réponses: 3
    Dernier message: 10/08/2007, 16h07
  2. [JSP-Servlet] Passage de paramètre d'un servlet à lui même
    Par Invité dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 02/05/2007, 10h12
  3. [jsp] passage de paramètres impossible
    Par Raylemon dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 18/03/2005, 20h45
  4. [JSP] Problème passage paramètre
    Par besco dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 13/09/2004, 10h15
  5. [jsp][servlet]passage de paramètre entre deux frames
    Par alexandra_ape dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 29/06/2004, 11h14

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