TDM12 de Technologie Web: Framework J2EE (Struts 2)

Transcription

TDM12 de Technologie Web: Framework J2EE (Struts 2)
TDM12 de Technologie Web: Framework J2EE (Struts 2)
ASI4 - INSA Rouen
correction
WikiStruts
Le but de cet exercice est de mettre en place un dictionnaire en ligne, utilisant Struts 2.
A partir d’une application vide, ou de n’importe quel autre exemple fourni en cours, vous construirez les
grandes lignes d’un dictionnaire en ligne, style Wikipédia, permettant de faire une requête sur un mot afin d’en
afficher la définition.
Vous développerez aussi bien le code nécessaire à la gestion des requêtes de définition que celui concernant
la saisie de nouveaux mots et de nouvelles définitions.
La page principale de votre application (index.jsp) permettra à l’utilisateur de saisir le terme à rechercher.
Une vérification du champs sera effectuée côté serveur (champs non vide requis).
Vous pourrez utiliser la BD fournie en annexe si vous le souhaitez.
Pensez à bien développer votre application en MVC !
Remarques
1. Les applications J2EE nécessitent un serveur d’application web J2EE (ex : Tomcat ou WildFly/JBoss).
Un tel serveur doit être installé en local sur votre machine en salle de TP, dans le répertoire /tmp.
Au cours de ce TP vous utiliserez WildFly dont vous pourrez récupérer l’archive dans le répertoire
/nfs/uv/asi/. Vérifiez bien que vos variables systèmes $JBOSS_HOME et $JAVA_HOME pointent vers les
bons répertoires.
2. Continuez à vérifier vos pages HTML et CSS sur le site du W3C (http://validator.w3.org/).
3. À l’issu de la séance, vous aurez accès à la correction de ce TDM au format PDF.
4. Déposez votre compte-rendu sur moodle sous la forme d’un fichier PDF de 2p. (1 feuille
recto-verso) nommé TDM12-login.pdf, chez chacune des 2 personnes du binôme.
Correction
1
Déploiement
S t r u t s 2 −Wiki . war
|_ index . j s p
| _ META−INF
| _ WEB_INF
| _ web . xml
|_ l i b
|
| _ s t r u t s 2 −c o r e − 2 . 2 . 1 . j a r , . . .
|_ c l a s s e s
| _ s t r u t s . xml , . . .
|_ w i k i s t r u t s
| _ model
|
| _ E n t i t e . c l a s s , BD. c l a s s
|_ a c t i o n
|_ SaisirTerme . c l a s s
index.jsp
<? xml v e r s i o n=" 1 . 0 " e n c o d i n g="UTF−8" ?>
<%@ t a g l i b p r e f i x =" s " u r i=" / s t r u t s −t a g s " %>
<%@ p a g e l a n g u a g e=" j a v a " c o n t e n t T y p e=" t e x t / h t m l ; c h a r s e t=UTF−8" p a g e E n c o d i n g="UTF−8"%>
< !DOCTYPE html PUBLIC " −//W3C//DTD XHTML 1 . 0 T r a n s i t i o n a l //EN" " h t t p : / /www . w3 . o r g /TR/
x h t m l 1 /DTD/ x h t m l 1 − t r a n s i t i o n a l . d t d ">
<html xmlns=" h t t p : / /www . w3 . o r g /1999/ x h t m l ">
<head>
<meta h t t p −e q u i v=" Content −Type " content=" t e x t / h t m l ; c h a r s e t=UTF−8" />
< t i t l e>R e c h e r c h e d ’ un t e r m e</ t i t l e>
<s : head />
</head>
<body bgcolor="# f f f f f f ">
<h1> S a i s i r l e t e r m e à r e c h e r c h e r</h1>
<s : form a c t i o n=" s a i s i e T e r m e ">
<s : t e x t f i e l d name=" termeBean . t e r m e " l a b e l=" Terme " />
<s : s u b m i t />
</ s : form>
<p><s : p r o p e r t y value=" termeBean " /></p>
</body>
</html>
struts.xml
<?xml version=" 1 . 0 " e n c o d i n g="UTF−8" ?>
< !DOCTYPE s t r u t s PUBLIC " −//Apache S o f t w a r e F o u n d a t i o n //DTD S t r u t s C o n f i g u r a t i o n 2 . 0 / /EN
" " h t t p : // s t r u t s . a p a c h e . o r g / d t d s / s t r u t s − 2 . 0 . d t d ">
< s t r u t s>
<c o n s t a n t name=" s t r u t s . devMode " v a l u e=" t r u e " />
<p a c k a g e name=" b a s i c s t r u t s 2 " e x t e n d s=" s t r u t s − d e f a u l t ">
< !−− I f no c l a s s a t t r i b u t e i s s p e c i f i e d t h e f r a m e w o r k w i l l assume s u c c e s s and r e n d e r
t h e r e s u l t i n d e x . j s p −−>
< !−− I f no name v a l u e f o r t h e r e s u l t node i s s p e c i f i e d t h e s u c c e s s v a l u e i s t h e
d e f a u l t −−>
<a c t i o n name=" i n d e x ">
< r e s u l t>/ i n d e x . j s p</ r e s u l t>
</ a c t i o n>
<a c t i o n name=" s a i s i e T e r m e " c l a s s =" w i k i s t r u t s . a c t i o n . S a i s i r T e r m e " method=" e x e c u t e ">
< r e s u l t name=" i n p u t ">/ i n d e x . j s p</ r e s u l t>
< r e s u l t name=" s u c c e s s ">/ i n d e x . j s p</ r e s u l t>
</ a c t i o n>
<a c t i o n name=" a j o u t T e r m e " c l a s s =" w i k i s t r u t s . a c t i o n . S a i s i r T e r m e " method=" e x e c u t e ">
< r e s u l t name=" i n p u t ">/ a j o u t e r . j s p</ r e s u l t>
< r e s u l t name=" s u c c e s s ">/ a j o u t e r . j s p</ r e s u l t>
</ a c t i o n>
</ p a c k a g e>
</ s t r u t s>
SaisirTerme.java
package w i k i s t r u t s . action ;
i m p o r t com . opensymphony . xw o r k 2 . A c t i o n S u p p o r t ;
i m p o r t w i k i s t r u t s . model . E n t i t e ;
i m p o r t w i k i s t r u t s . model .BD;
p u b l i c c l a s s SaisirTerme extends ActionSupport {
p r i v a t e s t a t i c f i n a l l o n g s e r i a l V e r s i o n U I D = 1L ;
p r i v a t e E n t i t e termeBean ;
p u b l i c E n t i t e getTermeBean ( ) {
r e t u r n t h i s . termeBean ;
}
p u b l i c v o i d setTermeBean ( E n t i t e
entite ) {
2
t h i s . termeBean = e n t i t e ;
}
p u b l i c String execute () throws Exception {
i f ( t h i s . termeBean != n u l l ) {
i f ( t h i s . termeBean . g e t D e f i n i t i o n ( ) . e q u a l s ( " " ) )
t h i s . termeBean . s e t D e f i n i t i o n (BD. g e t D e f i n i t i o n ( t h i s . termeBean . getTerme ( ) ) ) ;
else
BD. s e t D e f i n i t i o n ( t h i s . termeBean . getTerme ( ) , t h i s . termeBean . g e t D e f i n i t i o n ( ) ) ;
r e t u r n SUCCESS ;
} else
r e t u r n INPUT ;
}
public void v a l i d a t e () {
i f ( t h i s . termeBean != n u l l && t h i s . termeBean . getTerme ( ) . l e n g t h ( ) == 0 )
a d d F i e l d E r r o r ( " termeBean . t e r m e " , " V e u i l l e z s a i s i r un Terme . " ) ;
}
}
BD.java
p a c k a g e w i k i s t r u t s . model ;
i m p o r t j a v a . u t i l . HashMap ;
import java . u t i l . I t e r a t o r ;
p u b l i c c l a s s BD {
p r i v a t e s t a t i c HashMap<String , String> l i s t e D e T e r m e s = new HashMap<String , String>( ) ; ;
p u b l i c s t a t i c v o i d s e t D e f i n i t i o n ( S t r i n g terme , S t r i n g d e f i n i t i o n ) {
i f ( t e r m e != n u l l && d e f i n i t i o n != n u l l && ! t e r m e . e q u a l s ( " " ) && ! d e f i n i t i o n . e q u a l s ( " "
))
BD. l i s t e D e T e r m e s . p u t ( terme , d e f i n i t i o n ) ;
}
p u b l i c s t a t i c S t r i n g g e t D e f i n i t i o n ( S t r i n g terme ) {
S t r i n g d e f i n i t i o n = " Terme non t r o u v é " ;
i f (BD. l i s t e D e T e r m e s . c o n t a i n s K e y ( t e r m e ) )
d e f i n i t i o n = BD. l i s t e D e T e r m e s . g e t ( t e r m e ) ;
return d e f i n i t i o n ;
}
}
Entite.java
p a c k a g e w i k i s t r u t s . model ;
public class Entite {
p r i v a t e S t r i n g terme = " " ;
private String definition = " " ;
p u b l i c S t r i n g getTerme ( ) {
r e t u r n t h i s . terme ;
}
public String getDefinition () {
return t h i s . d e f i n i t i o n ;
}
p u b l i c v o i d setTe rme ( S t r i n g t e r m e ) {
t h i s . terme = terme ;
}
public void setDefinition ( String d e f i n i t i o n ) {
this . definition = definition ;
}
public String toString () {
i f ( t h i s . getTerme ( ) . l e n g t h ( ) >0 && t h i s . g e t D e f i n i t i o n ( ) . l e n g t h ( ) >0)
r e t u r n t h i s . getTerme ( ) + " : " + t h i s . g e t D e f i n i t i o n ( ) ;
else
return " " ;
}
}
3