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] Accéder à un objet


Sujet :

Servlets/JSP Java

  1. #1
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut [JSP] Accéder à un objet
    Bonjour

    Voici mon problème. Je me remet doucement à l'univers J2EE.
    Dans une première page JSP, j'ai un formulaire. En cliquant sur le bouton submit, on accède à une servlet. Voici un morceau du code de cette servlet (nommée Process.java) :
    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
     
    public class Process extends HttpServlet {
     
    	public static SimplePCR spcr;
     
    	protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
    		arg1.setContentType("text/html");
    		Parameters params = new Parameters();
    		params.setHashtable(arg0);
    		String[]parameters = params.getParameters();
    		java.io.PrintWriter pw = arg1.getWriter();
    		writeParameters(parameters, pw);
    		SPCR thread = new SPCR(parameters);
    		thread.start();
    		while(thread.isAlive()){
    			try{
    				Thread.sleep(100);
    			}
    			catch(InterruptedException ie){}
    		}
    		this.getServletContext().getRequestDispatcher("/results.jsp").forward(arg0, arg1);
    	}
    }
    Seulement, quand j'arrive à ma page results.jsp, j'ai cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    org.apache.jasper.JasperException: Impossible de compiler la classe pour la JSP
     
    Une erreur s'est produite � la ligne: 12 dans le fichier jsp: /results.jsp
    Erreur de servlet générée:
    Process.spcr cannot be resolved
    Donc, comment pouvoir transmettre un objet ou y accéder facilement dans ce cas là ?

    Merci d'avance de votre aide.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  2. #2
    zev
    zev est déconnecté
    Membre actif
    Inscrit en
    Octobre 2004
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 204
    Points : 220
    Points
    220
    Par défaut
    L'erreur est dans la jsp, non ?
    Faudrait poster le code.

  3. #3
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Oui, pardon
    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
     
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>My company</title>
    </head>
    <body>
    <div align="center"><h1><b><u>PCR</u></b></h1></div>
    <p>
    <%
    out.println("Results:<br />");
    out.println("<br />");
    for (int i=0; i<Process.spcr.numberPair; i++){
            
    }
    %>
    </p>
    </body>
    </html>
    Merci pour l'aide. Apparemment, c'est à ce niveau que ce situe l'erreur : for (int i=0; i<Process.spcr.numberPair; i++).

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  4. #4
    zev
    zev est déconnecté
    Membre actif
    Inscrit en
    Octobre 2004
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 204
    Points : 220
    Points
    220
    Par défaut
    Oui.
    D'où vient Process ?
    Il n'est déclaré nulle part !

  5. #5
    zev
    zev est déconnecté
    Membre actif
    Inscrit en
    Octobre 2004
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 204
    Points : 220
    Points
    220
    Par défaut
    <%@ page import="machin.truc.Process%>

  6. #6
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Hello

    Merci de ton aide.
    D'après l'un de mes posts, ma servlet intermédiaire s'appelle Process. Il y a d'ailleurs son code. Donc, le schéma est le suivant : index.jsp -> Process.java -> results.jsp.
    Merci pour l'aide.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  7. #7
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Hello

    J'ai essayé d'inclure Process (il n'est pas dans un package particulier) de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@ page import="Process" %>
    Mais il m'indique qu'il ne peut le trouver

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 156
    Points : 165
    Points
    165
    Par défaut
    Pourquoi est ce que tu ne stoque pas l'infos en scope application ? (et est ce qu'elle à vraiment besoin d'être globale à l'appli et non pas à la session plutot?) :

    <jsp:useBean id="monBean" scope="application" class="LaClasseDeMonBean"/>

    Si le bean monBean n'existe pas il est créé (donc dans ta servlet Process il sera créé et enregistré en scope application) et s'il existe il est récupéré (donc dans results.java tu peux le récupérer).

  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
    Citation Envoyé par GLDavid
    Hello

    J'ai essayé d'inclure Process (il n'est pas dans un package particulier) de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@ page import="Process" %>
    Mais il m'indique qu'il ne peut le trouver

    @++
    Il faut mettre ta servlet dans un package.
    Modératrice Java - Struts, Servlets/JSP, ...

  10. #10
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Ok, alors :
    @ neuromencien: je ne m'y connais pas trop A peine la base de la base pour J2EE. Peux-tu m'en dire un peu plus sur ce tag ?
    @ c_nvy, j'ai compris, il fait que je mette /Process
    Merci encore de vos conseils. Je vous tiens au courant.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  11. #11
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Euh finalement je me suis planté sur le /Process
    Que dire d'autres que .... Help !

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 156
    Points : 165
    Points
    165
    Par défaut
    Quand tu lances une application J2EE, tu as plusieurs espaces mémoires qui ont chacun des portées différentes. Tout ce que tu stocke dedans possède la portée de l'espace. Il y à : page (c'est le scope par défaut), request (c'est valable sur un couple de deux pages (valable d'une page de départ à une page d'arrivée), session (valable pour toute une session utilisateur) et application (partagée entre toutes les instances de ton appli).

    Le tag <jsp:useBean...> permet d'accéder à une variable dans l'un de ces espaces.

    si tu fais <jsp:useBean id="monBean" scope="application" class="LaClasseDeMonBean"/> tu instancie un bean appellé monBean de la classe LaClasseDeMonBean. Si une instance existais déja, tu la récupère.

    Tu peux ensuite accéder à monBean dans le reste de ta page, donc écrire des infos dedans. Si monBean est dans un scope différent de "page", tu pourras le récupérer dans une autre page avec le même tag.

    Il semble que tu essaye d'accéder à une variable de classe (static) et non pas d'instance. C'est pour ça que je te conseillais un scope application. Si ce n'est pas ce que tu voulais, prend plutot session ou request.

  13. #13
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Donc, dans mon cas, je dois écrire dans results.jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <jsp:useBean id="Process" scope="application" class="Process"/>
    Est-ce bien écrit ?
    Merci pour le renseignement.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  14. #14
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Grrr, en écrivant ainsi, j'obtiens l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    org.apache.jasper.JasperException: Impossible de compiler la classe pour la JSP
     
    Une erreur s'est produite � la ligne: 12 dans le fichier jsp: /results.jsp
    Erreur de servlet générée:
    Cannot instantiate the type Process
    Pfiouuu ! Compliqué !

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 156
    Points : 165
    Points
    165
    Par défaut
    Non non. Process c'est ta servlet. Dans Process.java tu écrit :

    request.getSession.setAttribute("processData", spcr.numberPair);

    et dans results.java

    <jsp:useBean id="processData" class="???" scope="session" />

  16. #16
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Toujours pareil !! Argghhhh !!!!!
    Voici ce que j'ai écrit dans Process.java :
    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
     
    protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
    		arg1.setContentType("text/html");
    		Parameters params = new Parameters();
    		params.setHashtable(arg0);
    		String[]parameters = params.getParameters();
    		java.io.PrintWriter pw = arg1.getWriter();
    		writeParameters(parameters, pw);
    		SPCR thread = new SPCR(parameters);
    		thread.start();
    		while(thread.isAlive()){
    			try{
    				Thread.sleep(100);
    			}
    			catch(InterruptedException ie){}
    		}
    		arg0.getSession().setAttribute("PCR", Process.spcr);
    		this.getServletContext().getRequestDispatcher("/results.jsp").forward(arg0, arg1);
    	}
    Et dans results.jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <jsp:useBean id="PCR" class="SimplePCR" scope="request" />
    <%
    out.println("Results :");
     
    %>
    A l'usure, j'y arriverais !

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  17. #17
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 156
    Points : 165
    Points
    165
    Par défaut
    En fait je réalise que ce que j'ai pu mettre avant était pas très clair. Le tag <jsp:useBean..> peut effectivement instancier un bean mais de toutes façons il sera vide. Donc ne tiens pas compte du fait que ça peut l'instancier s'il existe pas, tiens juste compte du fait que ça le récupère depuis un scope.

    Ca c'est pour la partie JSP. Pour la partie controleur (donc ta servlet entre les deux), il faut passer par request :
    request.setAttribute() ça stoque en scope request
    request.getSession.setAttribute() ca stoque en scope session
    request.getSession.getServletContext() ca stoque en scope application.

    Et coté JSP, c'est <jsp:useBean> avec un des scope précisés. D'ailleurs tout bien réfléchi, si ta page résultat est la seul à utiliser le résultat, utilise plutot un scope request. Le code que je t'ai donné est pour un scope session, mais dans ce cas là c'est inutile.

  18. #18
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Ok, je commence à comprendre.
    Dans Process.java, j'ai écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    arg0.setAttribute("NP", Process.spcr.numberPair);
    Et dans results.jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <jsp:useBean id="NP" class="SimplePCR" scope="request" />
    <%
    out.println("Results :");
    out.println();
    out.println(""+NP+" primers found.");
    %>
    Bon, maintenant, j'ai cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    java.lang.NullPointerException
    	Process.doPost(Process.java:36)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    Cette erreur veut dire que mon application (en fait une librairie C++) ne semble pas avoir tourné.
    Voyons voir ça.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  19. #19
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 156
    Points : 165
    Points
    165
    Par défaut
    Autant pour moi, j'ai écrit une connerie dans le code que je t'ai donné : c'est scope="session" par request. Désolé

  20. #20
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 156
    Points : 165
    Points
    165
    Par défaut
    Bon ben je vois que t'as corrigé de toi même mon erreur en plus.

Discussions similaires

  1. [jsp] Passage d'objet
    Par GLDavid dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 28/07/2006, 13h14
  2. Réponses: 1
    Dernier message: 11/07/2006, 12h17
  3. [JSP] Passer un objet d'une page à une autre
    Par critok dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 07/07/2006, 14h24
  4. Réponses: 2
    Dernier message: 15/04/2006, 20h12
  5. accéder à un objet d'une frame
    Par pekka77 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/11/2005, 10h35

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