1 Objectif : 2 Installation de Tomcat 3 Exemples de Servlets et JSP 4

Transcription

1 Objectif : 2 Installation de Tomcat 3 Exemples de Servlets et JSP 4
TD GTR, printemps 2006.
1
4
CRÉATION D'UNE APPLICATION WEB
Objectif :
Ce td/tp a pour objectif de découvrir :
un environnement serveur, appelé aussi container : (Tomcat),
les JSP,
essayer une Servlet,
les Beans.
2
Installation de Tomcat
Cette partie est à faire uniquement si votre poste ne dispose pas de Tomcat.
1. récupérer sur http://tomcat.apache.org/download-55.cgi :
Core 5.5.16, windows
Administration Web Application 5.5.16, zip
2. décompresser les deux archives dans votre répertoire de travail,
3. lancer l'exécutable ./bin/startup.bat. Normalement vous devriez avoir sur http://localhost:8080
la page d'accueil de Tomcat,
4. lisez la page d'accueil et suivez les instructions pour créer un compte administrateur (rôles
admin ET manager). Dans le chier ./conf/tomcat-users.xml, assurez vous que :
vous avez déclaré le role manager et admin,
vous avez déclaré les mots de passe.
3
Exemples de Servlets et JSP
Tout au long de ce td, il est fortement conseillé de consulter les aides sur :
http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Servlets.html
http://java.sun.com/j2ee/1.4/docs/tutorial/doc/
1. Dans les sections JSP Examples et Servlet Examples , exécutez les deux premiers
JSP et regardez le code source. De même, pour les deux premières Servlets.
2. Expliquez la diérence principale entre une page JSP et une Servlet.
4
Création d'une application Web
Nous allons créer un nouveau répertoire dans l'arborescence de Tomcat contenant notre nouvelle
application Web.
1. Dans le répertoire ./webapps, créez un répertoire test. Dans ce répertoire, placez un chier
Essai1.jsp contenant quelques lignes HTML,
<html>
<head>
<title>JSP Test</title>
</head>
<body>
....
</body>
</html>
1
TD GTR, printemps 2006.
4
CRÉATION D'UNE APPLICATION WEB
2. à chaque application Web, est associé un chier de déploiement web.xml. Il contient les
informations liées à son environnement et tout autre information (titre, ressources . . .).
Écrivez un descripteur de déploiement. Pour ce faire :
Créez le répertoire WEB-INF dans ./webapps/test. En vous inspirant de celui donné cidessous, créez votre propre descripteur.
Par exemple :
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name> ... </display-name>
<description>
...
</description>
</web-app>
3. faites connaître votre application via http://localhost:8080/manager/,
4. votre page doit être visible sur http://localhost:8080/test/Essai1.jsp
2
TD GTR, printemps 2006.
4
CRÉATION D'UNE APPLICATION WEB
4.1 JSP
1. Testez votre script JSP : modiez le pour qu'il ache les chires de 1 à 5 à l'aide d'une
boucle. Par exemple on souhaite avoir :
JSP Test
1
2
3
4
5
2. Cherchez le code source Java de la servlet correspondant à votre JSP (dans le répertoire
./work/) et consulter-le. Retrouver la partie de votre code JSP, expliquer.
4.2 Servlet
Créer une servlet nommée Essai2.java dont le but est de :
1. lire un paramètre de requête HTTP, (utilisation de request.getParameter("..."))
2. le convertir en entier et le multiplier par 2,
3. modier votre JSP Essai1.jsp qui faisait une boucle en Essai2.jsp pour qu'elle accepte
une borne supérieure pour la boucle en paramètre,
4. le transmettre à Essai2.jsp (utilisation de request.setAttribute("...")) et (utilisation
de getServletContext().getRequestDispatcher("...").forward(request, response) ;,
5. compilez votre servlet et placez là dans le répertoire ./WEB-INF/classes/ de votre application
Web. Pour compiler n'oubliez pas de mettre à jour le CLASSPATH avec ./common/lib/servlet.jar.
6. Mettez à jour le chier web.xml de telle sorte que votre servlet soit mappée sur run/Essai2.
Il doit ressembler à :
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>Mon appli Web</display-name>
<description>
Mon appli Web - TP Servlet/JSP
</description>
<servlet>
...
</servlet>
<servlet-mapping>
...
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
7. créer un formulaire index.html pour invoquer votre servlet,
8. recharger votre site via le manager, et tester.
3
TD GTR, printemps 2006.
5
5
BEAN ET LES FORMULAIRES
bean et les formulaires
L'une des utilisations des bean est celle liée au traitement des formulaires. Cette section s'intéresse
à la mise en place d'un bean an de recueillir des informations et montrer les notions de session.
5.1 Le formulaire
Faire un formulaire demandant, le nom, l'email, et l'âge :
<HTML>
<BODY>
<FORM METHOD=POST ACTION="SaveName.jsp">
...
<INPUT TYPE=SUBMIT>
</FORM>
</BODY>
</HTML>
5.2 La bean
1. Créer un classe Java bean liée aux informations du formulaire. Si une donnée est absente,
la remplacer par une valeur par défaut.
1
2
3
4
5
6
7
8
package beans ;
public c l a s s UserData {
S t r i n g username ;
String email ;
int age ;
}
// d é c l a r e r l e s s e t t e r e t g e t t e r ,
// ex : p u b l i c v o i d setAge ( i n t v a l u e )
2. compiler la, et la placer dans ./WEB-INF/classes/beans/
5.3 La page pour sauver les informations
Créer une page SaveName.jsp qui va appeler la bean, et proposer un lien pour continuer sur la
page NextPage.jsp On rappelle la déclaration de l'utilsation d'une bean :
<jsp:useBean id="user" class="UserData" scope="session"/>
<jsp:setProperty name="user" property="*"/>
5.4 La page pour acher le contenu de la bean
Créer la page NextPage.jsp qui ache le contenu de la bean.
1. tester votre formulaire,
2. ouvrir un autre onglet (ou réentrer l'adresse dans le même buttineur) et ouvrir la page
http://localhost:8080/test/NextPage.jsp. Expliquer les résultats observés,
3. fermer votre buttineur, ou ouvrez en un autre puis aller à http://localhost:8080/test/
NextPage.jsp. Expliquer
4
TD GTR, printemps 2006.
6
6
CORRECTION
Correction
1. RS,
2. Une servlet est un programme Java qui -en général- peut contenir des instructions pour
écrire du code HTML ; une page JSP est un document HTML qui embarque du code Java ;
une page JSP sera transformée en servlet (code Java) puis compilée à la volée par le serveur
Web.
3. Essai1.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>JSP Test</title>
</head>
<body>
<h1>JSP Test</h1>
<%int n=((Integer) request.getAttribute("ageDuCapitaine")).intValue();
for (int i=1; i<n; i++) {%>
<p><%=i%></p>
<%}%>
<hr>
<address><a href="mailto:[email protected]">Philippe Poulard</a></addr
<!-- Created: Fri Nov 12 17:58:06 MET 2004 -->
<!-- hhmts start -->
Last modified: Fri Nov 12 17:58:43 MET 2004
<!-- hhmts end -->
</body>
</html>
4. Essai2.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/∗
∗ Essai2 . j a v a
∗
∗ Created on November 13 , 2004 , 3:24 PM
∗/
import j a v a x . s e r v l e t . ∗ ;
import j a v a x . s e r v l e t . h t t p . ∗ ;
/ ∗∗
∗ Reads a r e q u e s t parameter
∗
∗ @author P h i l i p p e Poulard
∗/
public c l a s s E s s a i 2 extends H t t p S e r v l e t {
/ ∗∗ Handles t h e HTTP <code>GET</code> method .
∗ @param r e q u e s t s e r v l e t r e q u e s t
∗ @param response s e r v l e t response
∗/
protected void doGet ( H t t p S e r v l e t R e q u e s t r e q u e s t , H t t p S e r v l e t R e s p o n s e r e s p o n s e )
throws S e r v l e t E x c e p t i o n , j a v a . i o . IOException {
// reads t h e r e q u e s t parameter and p a r s e s as i n t
I n t e g e r captainAge = new I n t e g e r ( 2 ∗ I n t e g e r . p a r s e I n t ( r e q u e s t . getParameter ( " age −du− c a p i t a i n e " ) ) ) ;
// s e t t h e c a p t a i n age
r e q u e s t . s e t A t t r i b u t e ( " ageDuCapitaine " , captainAge ) ;
// forward t h e HTTP r e q u e s t t o t h e JSP
}
t h i s . g e t S e r v l e t C o n t e x t ( ) . g e t R e q u e s t D i s p a t c h e r ( "/ E s s a i 1 . j s p " ) . f o r w a r d ( r e q u e s t , r e s p o n s e ) ;
/ ∗∗ Returns a s h o r t d e s c r i p t i o n o f t h e s e r v l e t .
∗/
public S t r i n g g e t S e r v l e t I n f o ( ) {
return " Reads a r e q u e s t parameter " ;
}
}
5
TD GTR, printemps 2006.
6
CORRECTION
5. web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>Mon appli Web</display-name>
<description>
Mon appli Web - TP Servlet/JSP
</description>
<servlet>
<servlet-name>MonEssai</servlet-name>
<display-name>Mon essai de mon appli Web</display-name>
<description>Mon essai de servlet - TP Servlet/JSP</description>
<servlet-class>Essai2</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>MonEssai</servlet-name>
<url-pattern>/run/Essai2</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
6. index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Mon appli Web</title>
</head>
<body>
<h1>Mon appli Web</h1>
<p>Entrez l'âge du capitaine :</p>
<form method="get" action="run/Essai2">
<input type="text" name="age-du-capitaine" />
<input type="submit" name="Go" value="Vas-y" />
</form>
</body>
</html>
6.1 BEAN
1. GetName.html
<HTML>
<BODY>
<FORM METHOD=POST ACTION="SaveName.jsp">
What's your name? <INPUT TYPE=TEXT NAME=username SIZE=20><BR>
What's your e-mail address? <INPUT TYPE=TEXT NAME=email SIZE=20><BR>
6
TD GTR, printemps 2006.
6
What's your age? <INPUT TYPE=TEXT NAME=age SIZE=4>
<P><INPUT TYPE=SUBMIT>
</FORM>
</BODY>
</HTML>
2. UserName.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
p a c k a g e s beans ;
public c l a s s UserData {
S t r i n g username ;
String email ;
int age ;
public void setUsername ( S t r i n g v a l u e )
{
}
username = v a l u e ;
public void s e t E m a i l ( S t r i n g v a l u e )
{
}
email = value ;
public void setAge ( int v a l u e )
{
}
}
age = v a l u e ;
public S t r i n g getUsername ( ) { return username ; }
public S t r i n g getEmail ( ) { return e m a i l ; }
public int getAge ( ) { return age ; }
3. SaveName.jsp
<jsp:useBean id="user" class="UserData" scope="session"/>
<jsp:setProperty name="user" property="*"/>
<HTML>
<BODY>
<A HREF="NextPage.jsp">Continue</A>
</BODY>
</HTML>
4. NextPage.jsp
<jsp:useBean id="user" class="UserData" scope="session"/>
<HTML>
<BODY>
You entered<BR>
Name: <%= user.getUsername() %><BR>
Email: <%= user.getEmail() %><BR>
Age: <%= user.getAge() %><BR>
</BODY>
</HTML>
7
CORRECTION