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 :

Problème dans l'éxecution d'une JSP à partir d'un Java Bean


Sujet :

Servlets/JSP Java

  1. #1
    Membre du Club
    Inscrit en
    Mars 2010
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 233
    Points : 53
    Points
    53
    Par défaut Problème dans l'éxecution d'une JSP à partir d'un Java Bean
    Bonjour,

    Je veux exécuter une page jsp suivant une architecture MVC,voici donc les 3 codes:
    MonBean.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     package bean;
    public class MonBean {
    public String getMessage() {
    return "Message issu du Bean";
    }
    }
    Controle.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
     package bean;
     
    import bean.MonBean;
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
     
    public class Controle extends HttpServlet {
    protected void doGet(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException {
    MonBean bean = new MonBean();
    req.setAttribute("idbean", bean);
    RequestDispatcher disp = this.getServletContext().getRequestDispatcher("/page.jsp");
    disp.forward(req,res);
    }
    }
    page.jsp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     <%@ page import="bean.MonBean" %>
    <HTML>
    <HEAD><TITLE>Architecture MVC : Java EE</TITLE></HEAD>
    <BODY>
    <% MonBean idbean = (MonBean)request.getAttribute("idbean");%>
    <%= idbean.getMessage() %>
    </BODY>
    </HTML>
    Et voici ce que m'affiche durant l'execution:

    exception

    org.apache.jasper.JasperException: An exception occurred processing JSP page /page.jsp at line 6

    3: <HEAD><TITLE>Architecture MVC : Java EE</TITLE></HEAD>
    4: <BODY>
    5: <% MonBean idbean = (MonBean)request.getAttribute("idbean");%>
    6: <%= idbean.getMessage() %>
    7: </BODY>
    8: </HTML>


    Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:521)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:430)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


    cause mère

    java.lang.NullPointerException
    org.apache.jsp.page_jsp._jspService(page_jsp.java:61)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    Ou est donc le problème?
    Et merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    vu que je ne vois nulle part controle dans la stacktrace, j'en déduis que tu as tappé directement dans ton browser l'url de la jsp et non celle de la servlet

  3. #3
    Membre du Club
    Inscrit en
    Mars 2010
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 233
    Points : 53
    Points
    53
    Par défaut
    J'ai tapé maintenant ça dans le navigateur:http://localhost:8080/Servlet-project/Controle et voici ce que m'a donné comme résultat:

    type Rapport d'état

    message /Servlet-project/Controle

    description La ressource demandée (/Servlet-project/Controle) n'est pas disponible.

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    vous devez lier, dans voter web.xml, votre servlet à une url et utiliser cette url.

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 104
    Points : 102
    Points
    102
    Par défaut
    Salut.

    Après test, ça fonctionne bien chez moi. J'ai juste rajouté l'url-pattern de ma servlet (via annotation et pas via xml) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    @WebServlet(name = "ControleServlet", urlPatterns = {"/Controle"})
    public class ControleServlet extends HttpServlet {
       @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
       }
    }
    Je pense qu'il s'agit de ton principal problème ici. Si tu utilise web.xml, je te laisse chercher comment faire la même chose. (recherche "servlet mapping web.xml" sur google, tu devrais trouver facilement.)

    Autrement si je peux me permettre un commentaire sur ton code.
    1ere chose:
    Tu souhaites suivre un modèle MVC, cela passe déjà par virer tout code Java de tes JSP. Abandonne donc les scriptlets (<%...%>) pour utiliser la librairie JSTL avec les EL. (là encore tu trouvera ton bonheur sur google).

    2eme chose:
    Depuis le jdk 5, les fichiers de conf type web.xml tendent à disparaitre pour laisser place aux annotations. Personnellement, je trouve les annotations sont plus clair et facile d'utilisation.

    3eme chose:
    Ta logique métier (tout ce qui est processus et traitement) est donc gérer dans ta classe MonBean. En JavaEE, on utilise ce qu'on appelle des EJB, alias Session Bean. Je te conseille de regarder comme les utiliser, c'est bien plus propre et structuré.
    Voici un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    package com.test.ejb;
     
    import javax.ejb.Stateless;
    import javax.ejb.LocalBean;
     
    @Stateless
    @LocalBean
    public class MonBean {
     
        public String getMessage() {
            return "Message issu du Bean";
        }
    }
    Puis tu l'utilises depuis ta servlet via "injection" :
    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
     
    @WebServlet(name = "ControleServlet", urlPatterns = {"/Controle"})
    public class ControleServlet extends HttpServlet {
     
        //Injection (revient au même de faire une MonBean bean = new MonBean2();
        @EJB
        private MonBean bean;
     
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
     
            String message = bean.getMessage();
            request.setAttribute("message", message);
            RequestDispatcher disp = this.getServletContext().getRequestDispatcher("/page.jsp");
            disp.forward(request, response);
        }
    Et tu affiches ton message depuis la 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
     
    <%@page import="com.test.servlet.MonBean2"%>
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>JSP Page</title>
        </head>
        <body>
            <h1>Hello World from page.jsp!</h1>
            ${message}
            ou avec la jstl :
            <c:out value="${message}"/>
     
        </body>
    </html>
    Ceci étant dit, ton code fonctionne C'est juste l'organisation qui laisse à désirer pour du MVC.

    En espérant t'avoir aider.

Discussions similaires

  1. Problème dans l'éxecution suivant une architecture MVC
    Par king_soft dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 06/02/2012, 15h32
  2. Afficher du texte dans une JSP à partir d'une classe
    Par Gugelhupf dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 13/01/2012, 17h15
  3. Réponses: 28
    Dernier message: 18/05/2010, 15h14
  4. Réponses: 4
    Dernier message: 03/06/2008, 18h20
  5. Réponses: 3
    Dernier message: 15/07/2005, 17h58

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