Utiliser une servlet dans une jsp

Utiliser une servlet dans une jsp - Java - Programmation

Marsh Posté le 29-07-2002 à 11:47:20    

...ou du moins le code qu'il contient...
 
Comment on peut faire separer le HTML inclus dans la servlet pour la faire ressortir dans la jsp, et ainsi separer la presentation du traitement des donnees... ?

Reply

Marsh Posté le 29-07-2002 à 11:47:20   

Reply

Marsh Posté le 29-07-2002 à 12:05:08    

bin la JSP s'occupe de l'affichage et pompe ses infos dans la requeste ou la session que la servlet a préalablement remplis.
 
Typiuqmenet le pattern est le suivant:
 
JSP -> formulaire pour demander les apparts de moins de 500euros dans la région parisienne
Requete à une servlet qui prend les params du formulaires, fais une requete en BD et attache le résultat à la requete. Ensuite cette servlet forward le processing à une autre JSP (JSP2)
JSP2 va pomper les infos dans la requete et affiche le résultat à l'utilisateur.
 
 
Pour l'étape intermédiaire tu devrais utilise des helpers ou des beans. Logiquement le but de la servlet est de router (dispatcher) les infos au bon endroit suivant le type de requete.
 
Est ce clair?


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 29-07-2002 à 12:09:40    

darklord ça marchera pas ton truc

Reply

Marsh Posté le 29-07-2002 à 13:46:05    

ah non? Et pourquoi ça cher ami?


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 29-07-2002 à 13:47:32    

DarkLord a écrit a écrit :

ah non? Et pourquoi ça cher ami?



paske ça existe pas les apparts en dessous de 500? en r.p
 :D

Reply

Marsh Posté le 29-07-2002 à 13:48:51    

DarkLord: oui, ok, mais en fait j'ai deja fait ma servlet (elle genere du HTML elle meme) et maintenant je voudrais separer le html "dynamiquement cree" pour la mettre dnas une jsp (dans la 2eme JSP donc, puisque la 1ere me serivirait que pour appeller ma servlet si j'ai biem compris...)
 
Est-ce que j' ai bon:
 
JSP1 :
 

Code :
  1. <html>
  2. <!--
  3.   Appelle la servlet
  4. -->
  5. <body bgcolor="white">
  6. <%@ page errorPage="error.jsp" %>
  7. <!-- Forward to a servlet -->
  8. <jsp:forward page="/ma_servlet" />
  9. </html>


 
Servlet: Contient la programmation
JSP2: Contient le HTML genere dynamiquement grace aux informations renvoyes par ma servlet...

Reply

Marsh Posté le 29-07-2002 à 13:49:22    

--greg-- a écrit a écrit :

paske ça existe pas les apparts en dessous de 500? en r.p
 :D  



[:tete_de_mort]

Reply

Marsh Posté le 29-07-2002 à 13:52:36    

Tamahome a écrit a écrit :

 [:tete_de_mort]  




 
oh tu tapes pas greg ! pour une fois qu'il est drole !  :D

Reply

Marsh Posté le 29-07-2002 à 13:53:06    

HappyHarry a écrit a écrit :

 
 
oh tu tapes pas greg ! pour une fois qu'il est drole !  :D  



[:tete_de_mort]

Reply

Marsh Posté le 29-07-2002 à 13:54:12    

pourrisez pas mon topic svp  [:shiryu]

Reply

Marsh Posté le 29-07-2002 à 13:54:12   

Reply

Marsh Posté le 29-07-2002 à 13:54:41    

--greg-- a écrit a écrit :

[:tete_de_mort]




 
 :D

Reply

Marsh Posté le 29-07-2002 à 14:02:48    

--greg-- a écrit a écrit :

paske ça existe pas les apparts en dessous de 500? en r.p
 :D  




 
MDR, j'ai cru que tu mettais en doute mon post, petit scarabée :D


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 29-07-2002 à 14:04:47    

Tamahome a écrit a écrit :

DarkLord: oui, ok, mais en fait j'ai deja fait ma servlet (elle genere du HTML elle meme) et maintenant je voudrais separer le html "dynamiquement cree" pour la mettre dnas une jsp (dans la 2eme JSP donc, puisque la 1ere me serivirait que pour appeller ma servlet si j'ai biem compris...)
 
Est-ce que j' ai bon:
 
JSP1 :
 

Code :
  1. <html>
  2. <!--
  3.   Appelle la servlet
  4. -->
  5. <body bgcolor="white">
  6. <%@ page errorPage="error.jsp" %>
  7. <!-- Forward to a servlet -->
  8. <jsp:forward page="/ma_servlet" />
  9. </html>






non. Déjà une servlet ne dois pas en principe générer du html. Ensuite ton code pour appeler ta servlet est faux je dirai. Typiquement si tu es dans le cas d'un formulaire, il te suffit de faire un form classique et passer l'uRL de ta servlet dans le champ action.
 
Les données vont donc etre envoyées à la servlet qui fait te renvoyer 3045848238585 appartements sur paris de - de 500Euros et tu pourras utiliser le requestdispatcher pour forwarder la requete à ta JSP 2.
 
Ca ferait une bonne idée d'article ca tiens, je note :)
 
C'est plus clair ou pas?
Servlet: Contient la programmation
JSP2: Contient le HTML genere dynamiquement grace aux informations renvoyes par ma servlet...


Message édité par darklord le 29-07-2002 à 14:05:07

---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 29-07-2002 à 14:17:43    

DarkLord a écrit a écrit :

 
non. Déjà une servlet ne dois pas en principe générer du html. Ensuite ton code pour appeler ta servlet est faux je dirai. Typiquement si tu es dans le cas d'un formulaire, il te suffit de faire un form classique et passer l'uRL de ta servlet dans le champ action.
 
Les données vont donc etre envoyées à la servlet qui fait te renvoyer 3045848238585 appartements sur paris de - de 500Euros et tu pourras utiliser le requestdispatcher pour forwarder la requete à ta JSP 2.
 
Ca ferait une bonne idée d'article ca tiens, je note :)
 
C'est plus clair ou pas?
Servlet: Contient la programmation
JSP2: Contient le HTML genere dynamiquement grace aux informations renvoyes par ma servlet...
 




 
Hmmmm, je pensais que ca serait plus simple. Prenons un exemple:
 
Admettons que j'ai une servlet toute bete, comme ca:
http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/

Code :
  1. import java.io.*;
  2. import javax.servlet.*;
  3. import javax.servlet.http.*;
  4. public class HelloWWW extends HttpServlet {
  5.   public void doGet(HttpServletRequest request,
  6.                     HttpServletResponse response)
  7.       throws ServletException, IOException {
  8.     response.setContentType("text/html" );
  9.     PrintWriter out = response.getWriter();
  10.     out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " +
  11.                                         "Transitional//EN\">\n" +
  12.                 "<HTML>\n" +
  13.                 "<HEAD><TITLE>Hello WWW</TITLE></HEAD>\n" +
  14.                 "<BODY>\n" +
  15.                 "<H1>Hello WWW</H1>\n" +
  16.                 "</BODY></HTML>" );
  17.   }
  18. }


 
Comment dois je m'y prendre pour virer le HTML de la servlet, afin de la mettre dans une JSP ?
 
En gros, il faudrait que je me retrouve avec ca dans ma servlet:

Code :
  1. import java.io.*;
  2. public class HelloWWW {
  3.  
  4.   public String toto()
  5.   {
  6.      return "Hello World";
  7.   }
  8. }


 
Et ca dans ma JSP:

Code :
  1. <!DOCTYPE HTML PUBLIC "-/W3C/DTD HTML 4.0 Transitional/EN">
  2. <HTML>
  3. <HEAD><TITLE> <%HelloWWW.toto()%> </TITLE></HEAD>
  4. <BODY>
  5. <H1> <%HelloWWW.toto()%> </H1>
  6. <BODY></HTML>


 
Je me doute que le code pour la JSP est faux, mais je pensais qu'on pouvait faire dans ce sens la: appeller une methode d' une classe dans un JSP...


Message édité par Tamahome le 29-07-2002 à 14:20:43
Reply

Marsh Posté le 29-07-2002 à 14:20:48    

on peut, mais dans ce cas ta servlet ne sert a rien.
 

Code :
  1. class Hello
  2. {
  3.   public static String hello()
  4.   {
  5.      return "Hello world";
  6.   }
  7. }


 
et dans la jsp
 

Code :
  1. <%@ page import="Hello" %>
  2. Bonjour : <%= Hello.hello() %>

Reply

Marsh Posté le 29-07-2002 à 14:22:36    

lorill a écrit a écrit :

on peut, mais dans ce cas ta servlet ne sert a rien.
 

Code :
  1. class Hello
  2. {
  3.   public static String hello()
  4.   {
  5.      return "Hello world";
  6.   }
  7. }


 
et dans la jsp
 

Code :
  1. <%@ page import="Hello" %>
  2. Bonjour : <%= Hello.hello() %>






 
Oui enfin non, la servlet sur laquelle je bosse est bien plus complexe, mais vu qu'elle fonctionne bien comme ca, j'ai pas envie de tout casser lors du passage en JSP. Surtout, j'ai pas envie d'utiliser le JSP pour faire du code (scriptlet...). Mon JSP ne doit faire que du HTML en appellant les methodes de mes classes...
 
Merci en tout cas  [:xp1700]

Reply

Marsh Posté le 29-07-2002 à 14:28:49    

bin c'est assez simple
 

Code :
  1. import java.io.*;
  2. import javax.servlet.*;
  3. import javax.servlet.http.*;
  4. private static final msg = "Hello World!";
  5. public class HelloWWW extends HttpServlet {
  6. public void doGet(HttpServletRequest request,
  7.                    HttpServletResponse response)
  8.      throws ServletException, IOException {
  9.      request.setAttribute("msg", msg);
  10.      RequestDispatcher d = request.getRequestDispatcher(/res.jsp" );
  11.      d.forward(request, response);   
  12. }
  13. }


 
et dans res.jsp qui est dans ton répertoire root tu fais
 

Code :
  1. <HTML>
  2. ....
  3. <H1><B><%=request.getAttribute(msg)%></B></H1>


 
un truc du genre. Ensuite tu change cet attribut par des trucs plus complexes comme les résultats d'une recherche, le profil d'un user, etc.
 
(je suis pas sur à 100% du code, faut voir l'api pour confirmer que c'est bon)


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 29-07-2002 à 14:43:16    

DarkLord a écrit a écrit :

bin c'est assez simple
 

Code :
  1. import java.io.*;
  2. import javax.servlet.*;
  3. import javax.servlet.http.*;
  4. private static final msg = "Hello World!";
  5. public class HelloWWW extends HttpServlet {
  6. public void doGet(HttpServletRequest request,
  7.                    HttpServletResponse response)
  8.      throws ServletException, IOException {
  9.      request.setAttribute("msg", msg);
  10.      RequestDispatcher d = request.getRequestDispatcher(/res.jsp" );
  11.      d.forward(request, response);   
  12. }
  13. }


 
et dans res.jsp qui est dans ton répertoire root tu fais
 

Code :
  1. <HTML>
  2. ....
  3. <H1><B><%=request.getAttribute(msg)%></B></H1>


 
un truc du genre. Ensuite tu change cet attribut par des trucs plus complexes comme les résultats d'une recherche, le profil d'un user, etc.
 
(je suis pas sur à 100% du code, faut voir l'api pour confirmer que c'est bon)




 
Mouais mais ca ne me va pas ca :(
On ne peut passer qu'une String avec ca, mais si j'ai un Vector ou une Enumeration par exemple, ben je suis baizou... [:totoz]

Reply

Marsh Posté le 29-07-2002 à 14:44:40    

m'a l'air aussi obtus que celui d'hier soir celui la ...  :sarcastic:

Reply

Marsh Posté le 29-07-2002 à 14:45:31    

HappyHarry a écrit a écrit :

m'a l'air aussi obtus que celui d'hier soir celui la ...  :sarcastic:  




 
moi ?
 
Desole, je posais juste une qst....

Reply

Marsh Posté le 29-07-2002 à 14:49:56    

Tamahome a écrit a écrit :

 
 
moi ?
 
Desole, je posais juste une qst....




 
il t'a dit ça :

Citation :


un truc du genre. Ensuite tu change cet attribut par des trucs plus complexes comme les résultats d'une recherche, le profil d'un user, etc.


 
Donc, tu peux surement tout aussi bien faire un setAttribute avec autre chose qu'une String. regarde ds la doc, tu verra bien...

Reply

Marsh Posté le 29-07-2002 à 14:50:29    

Tamahome a écrit a écrit :

 
 
Mouais mais ca ne me va pas ca :(
On ne peut passer qu'une String avec ca, mais si j'ai un Vector ou une Enumeration par exemple, ben je suis baizou... [:totoz]  




 
Mais punaise. Qu'est ce que vous avez tous a etre aussi chiant bon sang !!!
 

Citation :


un truc du genre. Ensuite tu change cet attribut par des trucs plus complexes comme les résultats d'une recherche, le profil d'un user, etc.  


 
Avant de raconter N'IMPORTE QUOI, va voir la signature de setAttribute, getAttribute. Ca prend un objet en paramètre. Donc tu peux attacher un tableau de clients, un tableau de profils, une énumération de mes couilles.
 
 :gun:  :gun:  :gun:


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 29-07-2002 à 14:52:24    

DarkLord a écrit a écrit :

 
 
Mais punaise. Qu'est ce que vous avez tous a etre aussi chiant bon sang !!!
 

Citation :


un truc du genre. Ensuite tu change cet attribut par des trucs plus complexes comme les résultats d'une recherche, le profil d'un user, etc.  


 
Avant de raconter N'IMPORTE QUOI, va voir la signature de setAttribute, getAttribute. Ca prend un objet en paramètre. Donc tu peux attacher un tableau de clients, un tableau de profils, une énumération de mes couilles.
 
 :gun:  :gun:  :gun:  



chuis pas sur que ça vaille la peine. c'est pas comme si leur nombre variait.
A la limite un agregat "PaireDeCouilles" avec deux membres "Couille", et un ou deux booleen pour définir leur etat..

Reply

Marsh Posté le 29-07-2002 à 14:54:46    

--greg-- a écrit a écrit :

chuis pas sur que ça vaille la peine. c'est pas comme si leur nombre variait.
A la limite un agregat "PaireDeCouilles" avec deux membres "Couille", et un ou deux booleen pour définir leur etat..




:D :D :D

Reply

Marsh Posté le 29-07-2002 à 14:55:10    

daisolaid:)

Reply

Marsh Posté le 29-07-2002 à 14:55:36    

[:rofl]  [:yaisse]


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 29-07-2002 à 14:59:08    

au temps pour mo cul, j'avais mal lu l'API :
 
ServletRequest.html#setAttribute(java.lang.String, java.lang.Object)
 
 :jap:

Reply

Marsh Posté le 29-07-2002 à 14:59:49    

Tamahome a écrit a écrit :

au temps pour mo cul, j'avais mal lu l'API :
 
ServletRequest.html#setAttribute(java.lang.String, java.lang.Object)
 
 :jap:  




 
s/mal/pas/

Reply

Marsh Posté le 29-07-2002 à 15:08:09    

lorill a écrit a écrit :

 
 
s/mal/pas/



plait-il?

Reply

Marsh Posté le 29-07-2002 à 15:09:22    

c une substitution de "mal" par "pas"
 
t nul toi  :D

Reply

Marsh Posté le 29-07-2002 à 15:32:29    

HappyHarry a écrit a écrit :

c une substitution de "mal" par "pas"
 
t nul toi  :D  



spaspas?  :heink:

Reply

Marsh Posté le 30-07-2002 à 14:46:03    

j'obtiens un magnifique "null" en lieu et place du "hello world" attendu  :cry:  :cry:  :cry:  
 
J'ai du mettre mes 2 fichiers .class dans \jakarta-tomcat-4.0.3\common\classes et mon .jsp dans C:\jakarta-tomcat-4.0.3\webapps\root\ pour qu'il trouve bien les class a importer... [:totoz]

Reply

Marsh Posté le 30-07-2002 à 14:47:17    

vérifie comment tu attaches ta String a la requete et vérifie comment tu la récupère dans ta JSP
 
fais gaffe aussi de pas attacher le mesasge a la requete et la prendre dans la session ou l'inverse :D
 
et sinon montre ton code !


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 30-07-2002 à 15:06:51    

voila ma JSP:
 

Code :
  1. <%@ page import="MaClasse" %>
  2. <%@ page errorPage="error.jsp" %>
  3. <html>
  4. <body bgcolor="white">
  5. Test:
  6. <H1><B><%=request.getAttribute("msg" )%></B></H1>
  7. </html>


 
J'ai aussi essaye avec <%=request.getAttribute(msg)%> en mettant un <% String msg; %> (j'ai aussi essaye avec <%! String msg; %> )
 
Pour la servlet, j'ai repris ton code.
T'es sur que faut pas le mettre dans doPost plutot ?

Reply

Marsh Posté le 30-07-2002 à 15:07:33    

euh tu es gentil toi. Tu l'appelle au mois la servlet avant ? Parce que je sais pas si tu es au courant mais c'est la servlet qui intilalise l'attribut "msg"
 
et pour la servlet j'ai dit que il fallait vérifier le code mais si ca compile c'est bon hein :)
 
pour autant que tu y accèdes :D
 
(


Message édité par darklord le 30-07-2002 à 15:08:22

---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 30-07-2002 à 15:08:32    

DarkLord a écrit a écrit :

euh tu es gentil toi. Tu l'appelle au mois la servlet avant ?




 
mdr
tu m'as grillé, mais elle me fait bien rire quand meme celle la

Reply

Marsh Posté le 30-07-2002 à 15:10:03    

Tamahome a écrit a écrit :

Pour la servlet, j'ai repris ton code.
T'es sur que faut pas le mettre dans doPost plutot ?




 
Déjà je n'ai jamais dit que c'était du code a prendre tel quel. J'ai repris ton exemple tout con du début de ce thread. Donc si tu accèdes à la servlet en Post c'est à toi de le changer et pas à me demander "si je suis sur"
 


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 30-07-2002 à 15:11:12    

Par contre dans ma servlet j'ai ca:
 

Code :
  1. public static String TestEV()
  2.     {
  3.         return "Servlet + JSP - V0.3)";
  4.     }


 
et si je met ca dans ma JSP, ca marche:

Code :
  1. <%= MaClasse.TestEV() %>


 
Donc en fait, ils arrivent bien a communiquer entre eux (JSP/Servlet)...
 
C'est le requestDispatcher qui semble pas etre bon...j'ai pas l'impression que ce soit un pbm de path pourtant...


Message édité par Tamahome le 30-07-2002 à 15:17:23
Reply

Marsh Posté le 30-07-2002 à 15:13:55    

DarkLord a écrit a écrit :

euh tu es gentil toi. Tu l'appelle au mois la servlet avant ? Parce que je sais pas si tu es au courant mais c'est la servlet qui intilalise l'attribut "msg"
 
et pour la servlet j'ai dit que il fallait vérifier le code mais si ca compile c'est bon hein :)
 
pour autant que tu y accèdes :D
 
(




 
Ma servlet etant autonome (elle genere deja des pages HTML toute seule) si je l'appelle ca me genere donc les pages HTML, et donc ca me masquerai un eventuel affichage de mon JSP...

Reply

Marsh Posté le 30-07-2002 à 15:15:45    

Dis donc mon ami. Tu es sur que tu es là pour écouter les autres ou pour raconter n'importe quoi.
 
Tu t'avances sur des choses que tu ne maitrise pas et tu le prouve en racontant des conneries
 
Donc retour à la case départ :hello:
 
Edit : la pseudo servlet que j'ai écrite ne génère pas d'HTML. Elle est invoquée, mets le champ msg dans la requete et forwarde la requete à une JSP pour qu'elle s'occupe de l'affichage. C'est comme ca que ca doit fonctionner! et pas avec des statics machin chose!  :fou:


Message édité par darklord le 30-07-2002 à 15:16:44

---------------
Just because you feel good does not make you right
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed