J'avais posé la question il y a quelques temps, mais peut-être pas asser
clairement, donc je retente un coup:
J'ai récupéré un site développé par une tierce personne.
J'ai une page jsp nommée test.jsp et qui contient l'instruction:
response.sendRedirect("servletTest.jsp")
Dans le fichier web.xml, j'ai:
<servlet><servlet-name>servletTest</servlet-name><servlet-class>test.servlet
Test</servlet-class></servlet>
<servlet-mapping><servlet-name>servletTest</servlet-name><url-pattern>servle
tTest.jsp</url-pattern></servlet-mapping>
Or, j'ai bien dans web-inf/classes/test la servlet servletTest, mais pas le
fichier servletTest.jsp.
On m'avait répondu que le développeur avait dû "pré-compiler" les fichiers
jsp en servlet.
D'accord, mais même si c'est le cas, je ne comprends pas comment le site
pourrait fonctionner tel quel, c'est à dire avec l'appel en dur
*response.sendRedirect("servletTest.jsp")* dans un fichier jsp.
A moins que la balise url-pattern dans web.xml n'indique que pour tout appel
à servletTest.jsp, on charge à la place la servlet servletTest ??
Ca me parait bizarre, d'autant que quand je reproduis avec un petit exemple,
j'obtiens ce à quoi je m'attendais, c'est à dire HTTP-400, not found !
Or, j'ai bien dans web-inf/classes/test la servlet servletTest, mais pas le
fichier servletTest.jsp.
La balise <servlet-mapping> associe un composant web (servlet ici) à un pattern url. Cela veut dire que toute url arrivant sur l'application et correspondant au pattern url déclenchera l'exécution du composant correspondant.
Ici, une url de type http://www.monsite.com/servletTest.jsp déclenchera l'éxécition de la servlet dont le nom logique (<servlet-name>) est servletTest. La classe associée à ce nom est test.servletTest (balise <servlet>). C'est donc cette servlet qui sera exécutée alors que l'url pouvait laisser à penser qu'il s'agissait d'un appel à une page JSP. On aurait pu faire plus vicieux et associer un pattern url se terminant par .asp pour invoquer une servlet :-)
Or, j'ai bien dans web-inf/classes/test la servlet servletTest, mais pas
le
fichier servletTest.jsp.
La balise <servlet-mapping> associe un composant web (servlet ici) à un
pattern url.
Cela veut dire que toute url arrivant sur l'application et correspondant au
pattern url déclenchera l'exécution du composant correspondant.
Ici, une url de type http://www.monsite.com/servletTest.jsp déclenchera
l'éxécition de la servlet dont le nom logique (<servlet-name>) est
servletTest.
La classe associée à ce nom est test.servletTest (balise <servlet>). C'est
donc cette servlet qui sera exécutée alors que l'url pouvait laisser à
penser qu'il s'agissait d'un appel à une page JSP.
On aurait pu faire plus vicieux et associer un pattern url se terminant par
.asp pour invoquer une servlet :-)
Or, j'ai bien dans web-inf/classes/test la servlet servletTest, mais pas le
fichier servletTest.jsp.
La balise <servlet-mapping> associe un composant web (servlet ici) à un pattern url. Cela veut dire que toute url arrivant sur l'application et correspondant au pattern url déclenchera l'exécution du composant correspondant.
Ici, une url de type http://www.monsite.com/servletTest.jsp déclenchera l'éxécition de la servlet dont le nom logique (<servlet-name>) est servletTest. La classe associée à ce nom est test.servletTest (balise <servlet>). C'est donc cette servlet qui sera exécutée alors que l'url pouvait laisser à penser qu'il s'agissait d'un appel à une page JSP. On aurait pu faire plus vicieux et associer un pattern url se terminant par .asp pour invoquer une servlet :-)
On devait afficher des camemberts à l'écran réprésentant des données stockées au niveau de la session. On avait une page JSP qui affiche les données sous forme te tableau et qui contenait une balise image avec comme référence camembert.jpg
Et dans le web.xml, camembert.jsp était mappé à une servlet qui récupérait les données de la session, construisait grâce à jfreechart une image jpeg à la volée que l'on mettait dans la hhtpResponse. Conséquence: chaque utilisateur voyait son propre camembert.
Le problème est que j'avais mis 1 heure pour comprendre tout ce cheminement.
-- Vincent Brabant ---------------- http://www.netbeans.org/index_fr.html http://vbrabant-fr.skynetblogs.be
Merci, effectivement, c'est asser vicieux !
Mais quelques fois pratique.
On devait afficher des camemberts à l'écran réprésentant des données
stockées au niveau de la session.
On avait une page JSP qui affiche les données sous forme te tableau et
qui contenait une balise image avec comme référence camembert.jpg
Et dans le web.xml, camembert.jsp était mappé à une servlet qui
récupérait les données de la session, construisait grâce à jfreechart
une image jpeg à la volée que l'on mettait dans la hhtpResponse.
Conséquence: chaque utilisateur voyait son propre camembert.
Le problème est que j'avais mis 1 heure pour comprendre tout ce cheminement.
--
Vincent Brabant
----------------
http://www.netbeans.org/index_fr.html
http://vbrabant-fr.skynetblogs.be
On devait afficher des camemberts à l'écran réprésentant des données stockées au niveau de la session. On avait une page JSP qui affiche les données sous forme te tableau et qui contenait une balise image avec comme référence camembert.jpg
Et dans le web.xml, camembert.jsp était mappé à une servlet qui récupérait les données de la session, construisait grâce à jfreechart une image jpeg à la volée que l'on mettait dans la hhtpResponse. Conséquence: chaque utilisateur voyait son propre camembert.
Le problème est que j'avais mis 1 heure pour comprendre tout ce cheminement.
-- Vincent Brabant ---------------- http://www.netbeans.org/index_fr.html http://vbrabant-fr.skynetblogs.be