A voir également:
- Appel d'une servlet dans une jsp
- Nommez une application d'appel vidéo ou de visioconférence - Guide
- Appel privé - Guide
- Double appel - Guide
- Je peux appeler mais pas recevoir d'appel sur mon portable - Forum Téléphones & tablettes Android
- Comment reecouter un appel sur iphone - Forum Huawei
7 réponses
Bonjour
"Cette jsp doit executer automatiquement une servlet"
Ce n'est pas à la JSP d'exécuter quoi que ce soit ! La JSP doit uniquement afficher le résultat des données transmises par la servlet. Si tu a besoin de transmettre une ArrayList<Reservation> à ta JSP, alors calcule la dans ta classe d'action pour la rendre accessible à ta JSP.
Exemple : L'action HelloWorld
Regarde comment est passé le String message à la JSP.
"Cette jsp doit executer automatiquement une servlet"
Ce n'est pas à la JSP d'exécuter quoi que ce soit ! La JSP doit uniquement afficher le résultat des données transmises par la servlet. Si tu a besoin de transmettre une ArrayList<Reservation> à ta JSP, alors calcule la dans ta classe d'action pour la rendre accessible à ta JSP.
Exemple : L'action HelloWorld
Regarde comment est passé le String message à la JSP.
Quand tu cliques sur "mes réservations", fais en sorte que le lien correspondant soit ton action struts et pas ta jsp.
Le code de ton action struts sera alors exécuté et la jsp s'affichera (les éléments calculés par ton action seront dispo).
Entre struts 1 et struts 2, il n'y a pas fondamentalement beaucoup de différences. Le principe reste le même (idem pour un autre framework mvc comme spring mvc par exemple).
D'une manière générale, il est préférable d'éviter l'utilisation de code avec % car cela revient à mettre du code Java "pur" dans les jsp. Les taglibs sont faites pour ça. Elles facilitent l'écriture des jsp car il s'agit de balises, comme en html.
Le code de ton action struts sera alors exécuté et la jsp s'affichera (les éléments calculés par ton action seront dispo).
Entre struts 1 et struts 2, il n'y a pas fondamentalement beaucoup de différences. Le principe reste le même (idem pour un autre framework mvc comme spring mvc par exemple).
D'une manière générale, il est préférable d'éviter l'utilisation de code avec % car cela revient à mettre du code Java "pur" dans les jsp. Les taglibs sont faites pour ça. Elles facilitent l'écriture des jsp car il s'agit de balises, comme en html.
C'est ce que mon prof m'a dit.. Et c'est pour cela qu'il ajoute des points si l'on utilise des taglibs..
J'ai précisé que je travaille avec un architecture page unique également.. Et donc je ne peux pas changer le chemin d'accés rien que pour cette option du menu
On envoie à l'index que la page sera 'lesReservations.jsp'
Il va donc lancer cette page .. sans executer la servlet avant. Si je veux que la servlet soit executer, il faut que je rajoute un bouton 'Voir mes réservations', ce qui fait un peu con..
J'ai précisé que je travaille avec un architecture page unique également.. Et donc je ne peux pas changer le chemin d'accés rien que pour cette option du menu
<ul id="cssmenu1">
<li><a href="index.jsp?page=accueil.jsp&menu=menuConnect.jsp"><span>ACCUEIL</span></a></li>
<li><a href="index.jsp?page=reservation.jsp&menu=menuConnect.jsp"><span>RESERVATION</span></a></li>
<li><a href="index.jsp?page=lesReservations.jsp&menu=menuConnect.jsp"><span>MES RESERVATIONS</span></a></li>
<li><a href="index.jsp?page=desidentification.jsp&menu=menuConnect.jsp"><span>SE DECONNECTER</span></a></li>
</ul>
On envoie à l'index que la page sera 'lesReservations.jsp'
Il va donc lancer cette page .. sans executer la servlet avant. Si je veux que la servlet soit executer, il faut que je rajoute un bouton 'Voir mes réservations', ce qui fait un peu con..
Vraiment ? x)
C'est le seul moyen que j'ai trouvé pour faire mon architecture en page unique..
Avoir un index et changer la variable "PAGE"
Voilà un petit peu en gros, ce que je fais pour changer le contenu de mon site internet.. Je ne sais pas du tout si c'est correct mais en tout cas cela fonctionne..
C'est le seul moyen que j'ai trouvé pour faire mon architecture en page unique..
Avoir un index et changer la variable "PAGE"
<div id="contenu">
<% if(request.getParameter("page") != null) {
String modulePath = "page/"+request.getParameter("page");
fileURL = pageContext.getServletContext().getResource(modulePath);
if(fileURL == null) { %>
<%@include file="page/problemeErreur.jsp"%>
<% }
else { %>
<jsp:include page="<%=modulePath%>"/>
<%}
}
else { %> <%@include file="page/accueil.jsp"%> <% } %>
</div>
Voilà un petit peu en gros, ce que je fais pour changer le contenu de mon site internet.. Je ne sais pas du tout si c'est correct mais en tout cas cela fonctionne..
Fonctionner ne veut pas dire que c'est correct.
Avec Struts tu ne devrais JAMAIS avoir de <% %> !!
En gros là tu n'as pas d'architecture Struts, ni au sens contrôleur struts.xml, ni au sens vue au sens taglibs (vu que tu les court-circuite avec des scriptlets)
J'espère que tu as encore un peu de temps pour faire ton projet. Car sans vouloir te faire peur, si l'objectif c'est utiliser Struts, pour l'instant c'est hors sujet !
Avec Struts tu ne devrais JAMAIS avoir de <% %> !!
En gros là tu n'as pas d'architecture Struts, ni au sens contrôleur struts.xml, ni au sens vue au sens taglibs (vu que tu les court-circuite avec des scriptlets)
J'espère que tu as encore un peu de temps pour faire ton projet. Car sans vouloir te faire peur, si l'objectif c'est utiliser Struts, pour l'instant c'est hors sujet !
J'ai encore le temps quelques jours..
L'index est le truc le plus dur pour moi.. (ça, je l'ai fait avant de commencer mon site et avant de savoir que l'on devait utiliser les taglibs etc) Je vais la changer à la fin avec les balises Struts..
Sinon mes jsp ne contiennent plus aucunes <% %> ..
Tu as une meilleure solution à me proposer pour utiliser struts dans mon architecture à page unique.. ?
L'index est le truc le plus dur pour moi.. (ça, je l'ai fait avant de commencer mon site et avant de savoir que l'on devait utiliser les taglibs etc) Je vais la changer à la fin avec les balises Struts..
Sinon mes jsp ne contiennent plus aucunes <% %> ..
Tu as une meilleure solution à me proposer pour utiliser struts dans mon architecture à page unique.. ?
En l'état, comment tu affiches tes pages ? Le paramètre "page" faut bien qu'il soit traité.
Change en :
<li><a href="lesReservations.do"><span>MES RESERVATIONS</span></a></li>
Associe ton action lesReservations.do à ta jsp lesReservations.jsp dans ton fichier de configuration struts.
Ça va permettre au clic sur le menu d'exécuter ton action struts puis d'afficher directement ta page jsp.
Change en :
<li><a href="lesReservations.do"><span>MES RESERVATIONS</span></a></li>
Associe ton action lesReservations.do à ta jsp lesReservations.jsp dans ton fichier de configuration struts.
Ça va permettre au clic sur le menu d'exécuter ton action struts puis d'afficher directement ta page jsp.
Le paramètre page ? il change à chaque fois que l'on clique sur un lien.. Donc si l'on clique sur accueil, le parametre page devient : accueil.jsp.. C'est pour cela le href="index.jsp?page=accueil.jsp&menuConnect" (menu connect c'est parce que le menu change en fonction que l'on est connecté sur le site ou pas. Si l'on est pas connecté, on a pas accès au menu reservation etc)
Donc ensuite, je dois changer la configuration du fichier struts.. Celui là ? struts-config.xml ?
Donc ensuite, je dois changer la configuration du fichier struts.. Celui là ? struts-config.xml ?
Je suis d'accord avec KX en l'état l'utilisation qui est faite de struts est loin des bonnes pratiques.
Pour changer le contenu de ta page et avoir l'impression que c'est toujours une page unique, il faut utiliser un moteur de templates comme tiles. Tiles est fortement utilisé avec struts. Il permet d'éviter les bidouilles que tu as pu mettre en place.
Pour changer le contenu de ta page et avoir l'impression que c'est toujours une page unique, il faut utiliser un moteur de templates comme tiles. Tiles est fortement utilisé avec struts. Il permet d'éviter les bidouilles que tu as pu mettre en place.
Je n'ai pas eu de cours sur ce moteur.. Je n'en ai meme pas entendu parler..
Je n'ai su le faire que de cette manière et ici, je n'ai plus assez de temps pour changer quoi que ce soit..
C'est pour cela que je demande si quelqu'un sait comment je dois faire pour faire executer ma servlet avant ma jsp..
Je n'ai su le faire que de cette manière et ici, je n'ai plus assez de temps pour changer quoi que ce soit..
C'est pour cela que je demande si quelqu'un sait comment je dois faire pour faire executer ma servlet avant ma jsp..
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Je comprends, mais l'architecture que tu as choisi va t'empêcher de faire ça ou alors ça va t'obliger à faire de la bidouille et en l'état, même si ça fonctionnera, je ne suis pas sûr que ton prof apprécie.
Bref normalement, la bonne pratique, c'est struts + tiles (dans le monde professionnel en tout cas).
Dans ton cas, au lieu de faire le jsp:include de la page jsp, tu peux faire un include de ton action struts avec s:action. Ça va te permettre d'exécuter l'action avant ta jsp.
Je serai toi, je ferai avec tiles car finalement tu ferais plus que ce qui est demandé et potentiellement, tu pourrais apprendre quelque chose à ton prof ;-)
Bref normalement, la bonne pratique, c'est struts + tiles (dans le monde professionnel en tout cas).
Dans ton cas, au lieu de faire le jsp:include de la page jsp, tu peux faire un include de ton action struts avec s:action. Ça va te permettre d'exécuter l'action avant ta jsp.
Je serai toi, je ferai avec tiles car finalement tu ferais plus que ce qui est demandé et potentiellement, tu pourrais apprendre quelque chose à ton prof ;-)
gigaga, KX
Je viens de changer mon index puisque c'est cela qui posait le plus de problèmes..
Et puis, je suis tranquille une fois qu'il sera correct..
J'ai retiré tout ce que je pouvais de<% %> pour remplacer par des taglibs..
Je viens de changer mon index puisque c'est cela qui posait le plus de problèmes..
Et puis, je suis tranquille une fois qu'il sera correct..
J'ai retiré tout ce que je pouvais de<% %> pour remplacer par des taglibs..
<div id="menu"> <logic:present parameter="menu"> <bean:parameter id="menudem" name="menu"/> </logic:present> <logic:notPresent parameter="menu"> <bean:define id="menudem" value="menuNoConnect.jsp"/> </logic:notPresent> <jsp:include page="/page/${menudem}"/> </div>
<div id="contenu"> <logic:present parameter="page"> <bean:parameter id="pagedem" name="page"/> </logic:present> <logic:notPresent parameter="page"> <bean:define id="pagedem" value="accueil.jsp"/> </logic:notPresent> <jsp:include page="/page/${pagedem}"/> </div>
"J'ai retiré tout ce que je pouvais de<% %>"
Tant qu'il y en aura encore ce n'est pas bon.
Les JSP ne devant faire que de l'affichage tu ne devrais pas avoir d'exception. Les exceptions c'est uniquement dans les actions Struts qu'elles devraient sauter...
"je suis tranquille une fois qu'il sera correct"
Si tu le dis...
Tant qu'il y en aura encore ce n'est pas bon.
Les JSP ne devant faire que de l'affichage tu ne devrais pas avoir d'exception. Les exceptions c'est uniquement dans les actions Struts qu'elles devraient sauter...
"je suis tranquille une fois qu'il sera correct"
Si tu le dis...
J'ai oublié de les retirés les try, ils ne servent à rien car il n'y a pas d'exceptions.
En fait, je n'ai plus le temps pour tout changer et ajouter le reste de struts.. Le prof nous ayant simplement guider sur les taglibs..
Mais pour en revenir à ma question du début, est ce qu'il y a moyen de faire passer la servlet avant la jsp ? Parce qu'encore une fois, je ne connais rien au niveau du fichier struts-config.xml..
Merci pour votre aide en tout cas !
En fait, je n'ai plus le temps pour tout changer et ajouter le reste de struts.. Le prof nous ayant simplement guider sur les taglibs..
Mais pour en revenir à ma question du début, est ce qu'il y a moyen de faire passer la servlet avant la jsp ? Parce qu'encore une fois, je ne connais rien au niveau du fichier struts-config.xml..
Merci pour votre aide en tout cas !
Actuellement dans ton web.xml tu rediriges directement vers une jsp.
Mais tu peux faire un filtre dans ton web.xml qui va envoyer les pages vers une Servlet.
C'est cette Servlet qui redirigera vers la bonne jsp, en faisant tout ce que tu veux avant.
(je fais des copier-coller depuis un exemple simple d'application JSTL, il faut bien sûr adapter)
La servlet va ensuite faire toutes les actions qu'il faut avant de renvoyer vers la bonne jsp.
Mais tu peux faire un filtre dans ton web.xml qui va envoyer les pages vers une Servlet.
C'est cette Servlet qui redirigera vers la bonne jsp, en faisant tout ce que tu veux avant.
(je fais des copier-coller depuis un exemple simple d'application JSTL, il faut bien sûr adapter)
<servlet> <display-name>IndexAction</display-name> <servlet-name>IndexServlet</servlet-name> <servlet-class>ccm.kx.simplecalculator.action.IndexAction</servlet-class> </servlet> <servlet-mapping> <servlet-name>IndexServlet</servlet-name> <url-pattern>/Index</url-pattern> </servlet-mapping>
La servlet va ensuite faire toutes les actions qu'il faut avant de renvoyer vers la bonne jsp.
package ccm.kx.simplecalculator.action; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class IndexAction extends HttpServlet { private static final long serialVersionUID = 1; public IndexAction() { super(); } private void doAction(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Dispatcher RequestDispatcher dispatcher = request.getRequestDispatcher("/index.jsp"); dispatcher.forward(request, response); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doAction(request,response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doAction(request,response); } }
Actuellement dans ton web.xml tu rediriges directement vers une jsp.
Comment ça ? Je dis juste dans mon index que si la variable PAGE est null, alors on lance la page d'accueil.. Le web.xml, je crois n'a rien avoir la dedans..
Je regarde ce fichier depuis tout à l'heure et je ne vois toujours pas comment le modifier..
Voilà un exemple pour l'une de mes servlets
C'est ce que je fais pour chacunes de mes servlets.. J'ai compris que ca sert à dire que lorsque l'on clique sur la servlet ChambreJEE, ca active la servlet qui se trouve dans class du meme nom. Puis le mapping, j'ai compris que ca servait à n'utiliser que le nom de la servlet dans un formulaire par exemple action="chambrejee" au lieu de action="servlets.ChambreJEE"
Je ne vois donc pas ce que je dois faire..
Comment ça ? Je dis juste dans mon index que si la variable PAGE est null, alors on lance la page d'accueil.. Le web.xml, je crois n'a rien avoir la dedans..
Je regarde ce fichier depuis tout à l'heure et je ne vois toujours pas comment le modifier..
Voilà un exemple pour l'une de mes servlets
<servlet>
<servlet-name>ChambreJEE</servlet-name>
<servlet-class>servlets.ChambreJEE</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ChambreJEE</servlet-name>
<url-pattern>/chambrejee</url-pattern>
</servlet-mapping>
C'est ce que je fais pour chacunes de mes servlets.. J'ai compris que ca sert à dire que lorsque l'on clique sur la servlet ChambreJEE, ca active la servlet qui se trouve dans class du meme nom. Puis le mapping, j'ai compris que ca servait à n'utiliser que le nom de la servlet dans un formulaire par exemple action="chambrejee" au lieu de action="servlets.ChambreJEE"
Je ne vois donc pas ce que je dois faire..
Il faut savoir que struts n'est pas du tout fait pour faire du spa (single page application). De toute façon, avec un framework serveur comme struts ça n'a aucun intérêt car de base (toute ta page est rafraîchie).
Avec un moteur comme Tiles on peut organiser, factoriser la page en plusieurs jsp. L'avantage par exemple, c'est qu'on aura ainsi plusieurs pages mais qu'une seule jsp pour gérer le footer, le header, le menu, etc... Mais tu auras potentiellement plusieurs urls...
C'est très curieux que ton prof te demande ça, car n'a pas vraiment de sens de faire ça avec struts. Enfin bref.
As tu essayé de faire avec le tag que je t'ai indiqué s:action ? Normalement ça devrait fonctionner... Au lieu de faire l'inclusion de la jsp (sans action), ça permet d'exécuter l'action avant la jsp (exactement ce que tu veux faire).
Avec un moteur comme Tiles on peut organiser, factoriser la page en plusieurs jsp. L'avantage par exemple, c'est qu'on aura ainsi plusieurs pages mais qu'une seule jsp pour gérer le footer, le header, le menu, etc... Mais tu auras potentiellement plusieurs urls...
C'est très curieux que ton prof te demande ça, car n'a pas vraiment de sens de faire ça avec struts. Enfin bref.
As tu essayé de faire avec le tag que je t'ai indiqué s:action ? Normalement ça devrait fonctionner... Au lieu de faire l'inclusion de la jsp (sans action), ça permet d'exécuter l'action avant la jsp (exactement ce que tu veux faire).
Merci de l'interet que tu porte à ma question..
Et oui, architecture page unique fait parti des critères qui augmentent les points.. Mais je pense pas qu'il veut dire une seule servlet..
Pour ma question de base, non je n'ai pas réussi à faire ce que je voulais..
J'ai donc mis un formulaire avec un bouton voir mes reservations.. (C'est moche) mais ainsi en cliquant dessus, le client voit ses réservations..
Merci en tout cas !
Et oui, architecture page unique fait parti des critères qui augmentent les points.. Mais je pense pas qu'il veut dire une seule servlet..
Pour ma question de base, non je n'ai pas réussi à faire ce que je voulais..
J'ai donc mis un formulaire avec un bouton voir mes reservations.. (C'est moche) mais ainsi en cliquant dessus, le client voit ses réservations..
Merci en tout cas !
Je ne suis pas vraiment un très grand connaisseur de ce langage, vu que nous n'avons appris que les bases.. Et je ne comprend pas trop ce qu'il se passe avec l'exemple que tu m'as montré.
Je sais que la JSP ne doit rien executer et doit se contenter d'afficher ce qu'elle reçoit. Mais par exemple, pour que la servlet s'execute avant la jsp, il n' y a pas une methode du même genre que <load-on-startup> ?
C'est en fait ce que je voudrais faire.. Sauf qu'au lieu qu'elle se lance au démarrage de l'application, je voudrais qu'elle s'execute lors de l'appel à la JSP lesReservations.jsp..
Je ne sais pas si je me suis bien exprimé..
Si tu fais un <load-on-startup> c'est que tu bascules sur ta JSP directement depuis le web.xml, tu ne passes pas par le fichier struts.xml
Si je comprends bien, de Struts tu n'utilises que les taglibs (les balises), pas du tout le reste du framework c'est ça ? Du coup ton code applicatif (base de données etc.) tu le mets entre <% %> ?
Regarde le reste du tutoriel dont je t'ai donné le lien, ne serait-ce que la configuration du web.xml et struts.xml, mais à mon avis tu es encore très loin du modèle Struts.
Les taglibs font partis des critères qui ajoutent des points.
Donc tout ce qui est code applicatif se trouve dans mes servlets.. Mes Jsp ne font qu'afficher les données des servlets..
En fait : Toutes mes servlets sont executées lorsque le client appuie sur le bouton submit d'un formulaire (un bouton s'inscrire, se connecter, reserver, confirmer)
Or ici, il a le menu ("Accueil","Reservation","Mes Reservations", "Aide")
Quand il clique sur MesReservations, j'aimerais que la servlet s'execute directement puis affiche le resultat dans la jsp..
(J'ai réussi afficher les reservations pour ce client mais j'ai du ajouter un formulaire avec un bouton "Voir mes réservations) (Mais je trouve ça un peu con puisqu'il clique sur deux boutons pour avoir une seule action..)
Le fichier web.xml je l'ai compris puisque je l'ai fait ce matin.. Et ici, je suis un peu perdu sur ce que je dois faire pour arriver à executer ma servlet avant la jsp
Regarde le lien que je t'ai donné pour suivre ce que je dis :
Dans ton web.xml, tu dois avoir un filtre Struts sur /* ce qui va donc basculer systématiquement sur le fichier de configuration struts.xml, c'est lui qui va dispatcher les traitements en appelant d'abord l'action Struts, puis basculer selon le résultat sur une jsp ou une autre.
Après vu ce que tu as fait pour l'instant, ça va te changer beaucoup de choses de passer en vrai Struts.