OVH Cloud OVH Cloud

web.xml et appel jsp

3 réponses
Avatar
Téo
Bonjour,

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 !

Merci de vos lumières !

3 réponses

Avatar
Laurent Nel
Bonjour,

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.


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 :-)

Laurent

--
Laurent NEL, Associé-Gérant

www.leuville.com / Conseil - Ingénierie - Formation
Java - J2EE - UML

Offres d'emploi: http://www.leuville.com/entry_servlet?screenÊrrieres

Avatar
Téo
Merci, effectivement, c'est asser vicieux !
Avatar
Vincent Brabant
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