Sunteți pe pagina 1din 30

Chapitre 2

Dveloppement Web
avec les technologies

JSP/Servlets

Sommaire
Architecture dune application Web Installation et configuration du Conteneur Tomcat Les Java Server Pages Les JavaBeans Les servlets HTTP Les bibliothques de balises JSP

JSP/Servlets

M.Romdhani, INSAT, Dcembre 2007

JSP/Servlets

Architecture dune application web

M.Romdhani, INSAT, Dcembre 2007

JSP/Servlets

Contexte
Utiliser lIntranet pour linfrastructure applicative
Protocole standard (HTTP de TCP/IP) Clients lgers : Portabilit Architectures multi-tiers

Les technologies Servlets et JSP (J2EE)


Faciliter le dveloppement et le dploiement ct serveur Embrasser les couches front-end (clients HTML) et back-end (BDD, ) La spcification des API servlets et des JSP sont indpendantes des serveurs dapplications

M.Romdhani, INSAT, Dcembre 2007

JSP/Servlets

Architecture-type dune application web


Couche prsentation Couche applicative (logique mtier)
Conteneur Web
Http

Couche de donnes

JSP

Base de donnes

Navigateur

Servlet
HTML, XML

Composants mtier (JavaBeans)

Les applications web connaissent un engouement ces derniers temps La J2EE Facilite le dveloppement dapplications web

M.Romdhani, INSAT, Dcembre 2007

JSP/Servlets

Structure dune application Web


Une application Web possde dans un repertoire luimme dans webapps une architecture spcifique

*.html, *.jsp

Pages HTML et JSP

/WEB-INF
/WEB-INF/web.xml /WEB-INF/classes/ /WEB-INF/lib/

fichier de configuration (XML) classes des servlets et de beans fichiers jar des servlets et utilitaires

Lensemble des fichiers et rpertoire peut tre mis dans un war (Web Archive) grce la commande jar. Le war est automatiquement djarr sil est plac dans le rpertoire webapps.
M.Romdhani, INSAT, Dcembre 2007

JSP/Servlets

Installation et configuration du conteneur Web Tomcat

M.Romdhani, INSAT, Dcembre 2007

JSP/Servlets

Le conteneur Apache Tomcat


Tomcat 5/6 (Catalina)
Projet Apache (Apache Apache Httpd) Open source Implantation de rfrence de la spcification
Tomcat 5 : Servlet 2.4 et JSP 2.0 (J2EE 1.4) Tomcat 6 : Servlet 2.5 et JSP 2.1 (Java EE 5)

Suite linstallation de Tomcat, positionner les 2 variables denvironnement suivantes : JAVA_HOME : Elle doit pointer le rpertoire
dinstallation du JDK

CATALINA_HOME : Elle doit pointer le rpertoire


dinstallation de Tomcat.

M.Romdhani, INSAT, Dcembre 2007

JSP/Servlets

Arborescence de Tomcat

/bin /common/lib /conf /logs /server/lib /shared/lib /webapps

scripts startup & shutdown jar utiliss par Tomcat (Ant, Servlet, etc.) configuration: server.xml, web.xml, users.xml fichiers de logs fichiers jar propres Tomcat fichiers jar communs toutes les servlets zone de dploiement

M.Romdhani, INSAT, Dcembre 2007

JSP/Servlets

Configuration Tomcat
Le fichier server.xml
Server Racine, spcifie le port de shutdown. Service Associe des connecteurs un engine. Connector Ils correspondent un point daccs un service, soit via un serveur soit en connexion directe. Engine correspond au conteneur de servlet en lui-mme. Logger Ils effectuent la journalisation. Host Dclare o sont stockes les servlets pour un nom de machine. Context Chaque Context reprsente la configuration associe un chemin dans la hirarchie
10

M.Romdhani, INSAT, Dcembre 2007

JSP/Servlets

Configuration Tomcat (2)


Le fichier server.xml (Le nud Connector)
port dcoute Un Connector point daccs utilisable par un client : port="8080" nombre de threads minimum minProcessors="5" maxProcessors="75" nombre de threads maximum enableLookups="true" acceptCount="100" DNS inverse connectionTimeout="20000" nombre de connections pendantes Le conteneur Engine name="Standalone" defaultHost="localhost"

Nom de lhost si pas HTTP 1.1

M.Romdhani, INSAT, Dcembre 2007

11

JSP/Servlets

Configuration Tomcat (3)


Le fichier server.xml (Le nud Context)
Gestion des associations entre un URI et un chemin sur le disque

Un Context reprsente lassociation entre un chemin sur le serveur (URI) et un chemin sur le disque URI daccs path= "/examples" docBase="examples" Chemin daccs des fichiers reloadable="true" (relatif ou absolu par rapport webapps)

Dtection automatique des changements et rechargement si besoin


12

M.Romdhani, INSAT, Dcembre 2007

JSP/Servlets

Les Servlets HTTP

M.Romdhani, INSAT, Dcembre 2007

13

JSP/Servlets

Programmation HTTP en J2EE


J2EE offre une spcification standard d'une API (javax.servlet.http) permettant de programmer HTTP. Les programmes traitant des reqtes HTTP sont appels servlets. Un conteneur standard, open source, et gratuit appel Tomcat est disponible dans le cadre du projet Apache L'objet reprsentant la requte HTTP s'apple HttpServletRequest. La rponse HTTP est reprsente par l'objet HttpServletResponse. Les programmes ct serveur rcuprent leurs entres partir de HttpServletRequest et crivent leurs sorties dans HttpServletResponse Pour retourner du code HTML, on doit dfinir un flt squentiel de caractres partir de l'object HttpServletResponse

Browser Web HttpServletRequest

Tomcat /admin/* /vignette/*.html /examples/*.html servlet 2


14

servlet 1

HttpServletResponse

M.Romdhani, INSAT, Dcembre 2007

Conteneur de Servlets

JSP/Servlets

Rappels concernant HTTP


Hyper Text Transfert Protocol (HTTP) protocole de RPC pour le web, sans tat accs et rcupration de ressources nommage des ressources : URL les donnes transmises sont dcrites au moyen des types MIME messages
HTTP 1.0 : GET, POST, HEAD HTTP 1.1 (depuis juin 1999) : Rajout de PUT, DELETE, OPTIONS, TRACE
Requte(GET )

Rponse Navigateur Serveur

M.Romdhani, INSAT, Dcembre 2007

15

JSP/Servlets

Structure dune requte HTTP


Anatomie dune requte : ligne de requte
commande : GET, POST nom de la ressource version du protocole (ex. HTTP/1.1)

champs den-tte: informations additionnelles concernant la requte et le client (nom:valeur) Ligne vide corps de la requte: informations supplmentaires (plutt pour les POST) Requtes GET
Variables visibles dans l'URL Limitation de la taille (dpend de l'OS) Simplicit d'extraction des donnes Donnes dans le fichier log

Requtes POST
Les variables ne sont pas visibles dans l'URL Les variables sont envoyes dans les enttes HTTP Pas de limitation de la taille Possibilit d'upload
M.Romdhani, INSAT, Dcembre 2007

16

JSP/Servlets

Structure dune rponse HTTP


Anatomie dune rponse : ligne de requte
version du protocole (ex. HTTP/1.0) statut de la rponse (ex. 404) explication du statut (ex. not found)

champs den-tte
informations additionnelle concernant le serveur et le document retourn (syntaxe = nom:valeur)

corps de la requte
la ressource retourne (page HTML)

Statut des rponse 100-199 : informations 200-299 : Requte russie


200 : OK, 204: No Content, 205: Reset Content

300-399 : Requte redirige, ou d'autres actions ncessaires 400-499 : requte incomplte


401 : UnAuthorized, 403: Forbidden, 404 : Not Found, 407: Proxy Authentification Required

500-599 : Rponse incomplte ou errone (erreur du serveur)


500 : Internal Server Error, 501 : Not Implemented
M.Romdhani, INSAT, Dcembre 2007

17

JSP/Servlets

La ServletRequest et la ServletResponse
L'interface ServletRequest permet de rcuprer les paramtres de la requte :
public abstract int getContentLength() public abstract String getContentType() public abstract String getProtocol() public abstract String getScheme() public abstract String getServerName() public abstract int getServerPort() public abstract String getRemoteAddr() public abstract String getRemoteHost() public abstract ServletInputStream getInputStream() throws IOException public abstract String getParameter(String name) public abstract String[] getParameterValues(String name) public abstract Enumeration getParameterNames() public abstract Object getAttribute(String name)

L'interface ServletResponse permet de renvoyer une rponse :


public abstract void setContentLength(int length) public abstract void setContentType(String type) public abstract ServletOutputStream getOutputStream() throws IOException

M.Romdhani, INSAT, Dcembre 2007

18

JSP/Servlets

HTTP : Informations sur la requte


protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/plain"); GET, POST, PUT etc. PrintWriter out= response.getWriter(); out.println("Protocol: " + request.getProtocol()); out.println("Scheme: " + request.getScheme()); out.println("ServerName: " + request.getServerName()); out.println("ServerPort: " + request.getServerPort()); Chemin virtuel complet out.println("RemoteAddr: " + request.getRemoteAddr()); out.println("RemoteHost: " + request.getRemoteHost()); out.println("Method: " + request.getMethod()); out.println("requestuestURI: " + request.getRequestURI()); Chemin de la servlet out.println("ServletPath: " + request.getServletPath()); out.println("PathInfo: " + request.getPathInfo()); out.println("PathTranslated: " + request.getPathTranslated()); Chemin de la out.println("QueryString: " + request.getQueryString()); out.println("RemoteUser: " + request.getRemoteUser()); ressource out.println("AuthType: " + request.getAuthType()); }

Chemin sur le serveur


M.Romdhani, INSAT, Dcembre 2007

19

JSP/Servlets

Descripteur de dploiement
Le fichier web.xml
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">

<web-app> <display-name>Mon application Web</display-name> <servlet> <servlet-name>maServlet</servlet-name> <servlet-class>mRomdhani.MaServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>maServlet</servlet-name> <url-pattern>*.test</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>maServlet</servlet-name> <url-pattern>/toto</url-pattern> </servlet-mapping> </web-app>
M.Romdhani, INSAT, Dcembre 2007

nom de la servlet

URI daccs URI daccs


20

JSP/Servlets

Le cycle de vie dune Servlet


1. la servlet est cre puis initialise init()
Cette mthode nest appele par le serveur quune seule fois lors du chargement en mmoire par le moteur (ou conteneur) de servlet

2. le service du client est implment service()


Cette mthode est appele automatiquement par le serveur chaque requte de client

3. la servlet est dtruite destroy()


Cette mthode nest appele par le serveur quune seule fois la fin permet de librer des ressources (alloues par init() )

M.Romdhani, INSAT, Dcembre 2007

21

JSP/Servlets

Paramtres dinitialisation d'une servlet


Les paramtres sont dclars dans le fichier web.xml
public class InitParamServlet extends HttpServlet { private int count; private String message; public void init(ServletConfig config) throws ServletException { count = Integer.parseInt(config.getInitParameter("count")); message = config.getInitParameter("message"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/plain"); PrintWriter out= response.getWriter(); for(int i=0;i<count;i++) { out.println(message); } } }
Lobjet ServletConfig permet de rcuprer les paramtres

<servlet> <servlet-name>initParam</servlet-name> <servlet-class> mRomdhani.InitParamServlet </servlet-class> <init-param> <param-name>count</param-name> <param-value>5</param-value> </init-param> <init-param> <param-name>message </param-name> <param-value>hello config </param-value> </init-param> </servlet>

M.Romdhani, INSAT, Dcembre 2007

22

JSP/Servlets

Un exemple de Servlet
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html><head><title>Mon adorable Servlet </title> </head>"); out.println("<body><h1>Bienvenue lINSAT </h1>"); out.println("</body>"); out.println("</html>"); } }
23

M.Romdhani, INSAT, Dcembre 2007

JSP/Servlets

Les mthodes doGet() et doPost()


Utiliser les objets HttpServletRequest et HttpServletResponse passs en paramtres de ces mthodes pour implmenter le service :

HttpServletRequest contient les renseignements sur le formulaire HTML initial (utile pour doPost()) - La mthode getParameter() rcupre les paramtres dentre

HttpServletResponse contient le flux de sortie pour la gnration de la page HTML rsultat (getWriter() )

M.Romdhani, INSAT, Dcembre 2007

24

JSP/Servlets

Les Java Server Pages (JSP)

M.Romdhani, INSAT, Dcembre 2007

25

JSP/Servlets

Les JSP (Java Server Pages)


<HTML> <HEAD> <TITLE>Ma toute premire JSP</TITLE> </HEAD> <BODY> <H1> Ceci est ma toute premire JSP </H1> Nous sommes le : <% %> <P> Au revoir et bientt </BODY> </HTML> java.util.Date d = new java.util.Date(); out.println(d.toString());

M.Romdhani, INSAT, Dcembre 2007

26

JSP/Servlets

Balises JSP dans HTML


Trois types de balises: 1 Les scriptlets : du code java 2 Les directives : pour le contrle de la structure 3 Les actions : pour le contrle de la logique lors de l'appel la page

M.Romdhani, INSAT, Dcembre 2007

27

JSP/Servlets

Les scriptlets : Les expressions


Syntaxe : <%= expression %> Exemple : Il est <%= new java.util.Date() %> <P> et votre hostname est <%= request.getRemoteHost() %>

Ceci permet dintgrer des valeurs dans le code HTML Les valeurs sont values, converties en chanes de caractres et affiches Les objets implicites (request, response, session, out, ...) disponibles

M.Romdhani, INSAT, Dcembre 2007

28

JSP/Servlets

Les scriptlets : Les Scriptlets


Syntaxe : <% code Java %> (scriplets) Exemple : <% String nom = request.getParameter("nom"); ... out.println("Nom de l'utilisateur " + nom); %>

Cest un bloc de code Java Il est plac dans _jspService() de la servlet gnre ayant accs :
o aux variables et beans dclars ( <%! %> ) o aux objets implicites

M.Romdhani, INSAT, Dcembre 2007

29

JSP/Servlets

Directives
Syntaxe : <%@ directive attribut1="valeur" attribut2="valeur"... %>

3 directives possibles :

page : informations relatives la page include : fichiers inclure littralement taglib : importer des bibliothques de balises

M.Romdhani, INSAT, Dcembre 2007

30

JSP/Servlets

Actions

- Syntaxe la XML - Permettent de faire des actions au moment o la page est demande par un client
Inclure dynamiquement un fichier Utiliser des JavaBeans Rediriger vers une autre page

M.Romdhani, INSAT, Dcembre 2007

31

JSP/Servlets

Actions (suite)
<jsp:include page="relative URL" flush="true" /> Inclusion au moment o la page est servie, pas au moment o elle est traduite en servlet. <jsp:usebean id="name" class="package.class" /> permet d'instancier un bean depuis une page JSP. associ <jsp:getProperty.../> et <jsp:setProperty.../> <jsp:forward page="/unAutreURI" /> redirige vers un autre URI/URL

<jsp:plugin /> Apple le plugin Java lintrieur du navigateur

M.Romdhani, INSAT, Dcembre 2007

32

JSP/Servlets

Objets implicites
Ce sont des variables prdfinies accessibles dans les scriptlets :

request : le HttpServletRequest response : le HttpServletResponse session : le HttpSession out : flot de sortie (idem response.getWriter()) application : le ServletContext (idem) config : le ServletConfig de la page

M.Romdhani, INSAT, Dcembre 2007

33

JSP/Servlets

Les JavaBeans

M.Romdhani, INSAT, Dcembre 2007

34

JSP/Servlets

Notion de JavaBean
Un JavaBean est un POJO qui dfinit des mthodes qui excuteront la logique mtier afin dcharger la servlet ou la JSP de le faire. Se conformer aux design pattern MVC qui vise la sparation des propos afin de faciliter la maintenance des applications Web Un JavaBean est un composant Java permettant de raliser un traitement mtier spcifique Attributs simples Mthodes set/get permettant lintrospection En simplifiant, on peut voir les JavaBeans comme des classes semblables aux autres, si ce n'est qu'ils proposent des mthodes accesseurs pour accder leurs attributs. Les JavaBeans sont cres automatiquement et gres par le conteneur Les JavaBeans sont dploys sous WEB-INF/classes
35

M.Romdhani, INSAT, Dcembre 2007

JSP/Servlets

JSP et les JavaBeans


Dvelopper le Bean et le dployer sous WEB-INF/classes Rfrencer le Bean dans la JSP avec l'action <jsp:usebean />
package produits; public class Produit { private String marque; private int prix ; public String getMarque() { return marque; } public void setMarque(String marque) { this.marque = marque; } public int getPrix() { return prix; } public void setPrix(int prix) { this.prix = prix; } } <HTML> <HEAD><TITLE>Test du Bean </TITLE></HEAD> <BODY> <jsp:useBean id="MonBean" scope="session" class="produits.Produit" type="produits.Produit"/> Dfinition de la marque et du prix :<P> <jsp:setProperty name="MonBean" property="marque" value="Dell" /> <BR> <jsp:setProperty name="MonBean" property="prix" value="2900" /> <BR> Rcupration de la marque et du prix du produit :<P> La marque est:<jsp:getProperty name="MonBean" property="marque" /> <BR> Le prix est:<jsp:getProperty name="MonBean" property="prix" /> <BR> </BODY> <HTML>

M.Romdhani, INSAT, Dcembre 2007

36

JSP/Servlets

Usebean et getProperty()/getProperty()
Mcanisme trs puissant !
<jsp:usebean id="name" (rfrence l'instance du composant) class="paquetage.class" (nom qualifi de la classe) scope="page|request|session|application" (porte) />

Pour lire une proprit du bean :


<jsp:getProperty name="name" property="property" />

Pour modifier une proprit du bean :


<jsp:setProperty name="name" property="property" value="valeur" />
Pour modifier tous les attributs avec les paramtres HTTP de mme nom :

<jsp:setProperty name="name"
M.Romdhani, INSAT, Dcembre 2007

property= * />
37

JSP/Servlets

Le design pattern MVC2

M.Romdhani, INSAT, Dcembre 2007

38

JSP/Servlets

MVC 1 et MVC 2
MVC Model 1 et MVC Model 2 diffrent essentiellement en ce qui concerne l'entit responsable au traitement de la requte. Dans le Model 1, c'est la JSP qui se charge de la requte Dans le Model 2, c'est une servlet (Controller) qui fait le travail
Un seul contrleur frontal Un ensemble de contrleurs spcialiss

MVC Model 1
M.Romdhani, INSAT, Dcembre 2007

MVC Model 2
39

JSP/Servlets

Application Web selon le MVC2


L architecture MVC (Model-View-Controller) a pour but d organiser une application interactive en sparant :
les donnes -> le modle constitu des objets mtiers la reprsentation des donnes -> la vue qui restitue les informations vers l'utilisateur le comportement de l application -> le contrleur charg de l'acquisition d'informations en provenance de l'utilisateur

Organisation du MVC1 (Model1)


Modle : JavaBeans Vue : Pages JSP Contrleur : Page JSP

Organisation du MVC2 (Model2)


Modle : JavaBeans Vue : Pages JSP Contrleur : Servlet qui dirige les actions effectuer en fonction de la requte
M.Romdhani, INSAT, Dcembre 2007

mise par le client

40

JSP/Servlets

Dynamique du modle MVC2

M.Romdhani, INSAT, Dcembre 2007

41

JSP/Servlets

Les cookies et les sessions HTTP

M.Romdhani, INSAT, Dcembre 2007

42

JSP/Servlets

Les Cookies
Un cookie est constitu des paires cl=valeur envoys par le serveur sous forme dinstructions insres dans lentte de la rponse HTTP Un cookie permet : didentifier des utilisateurs (e-commerce, membres...) dviter la saisie dinformation rptition
o Login, password, adresse, tlphone

Grer des prfrences utilisateur pour les sites portails Cookie et scurit : Jamais interprt ni excut : pas de virus Limit 4KB Ne doit pas concerner des donnes sensibles
M.Romdhani, INSAT, Dcembre 2007

43

JSP/Servlets

Gestion des cookies


Utiliser les fonctions de lAPI des servlets...
Pour crer un cookie : classe Cookie, crire/lire un cookie : addCookie(cookie), getCookies(), positionner des attributs dun cookie : cookie.setXxx(...)

Exemple denvoi dun cookie :


... String nom = request.getParameter ("nom"); Cookie unCookie = new Cookie("nom", nom); ...ici positionner des attributs si on le dsire response.addCookie(unCookie); ...
M.Romdhani, INSAT, Dcembre 2007

44

JSP/Servlets

Suivi de session : Problmatique


Protocole HTTP = protocole Internet dconnect
diffrent de Telnet, Ftp, ... les requtes et les rponses ne sont pas des transactions

Certaines applications Web (e-commerce : caddie) ont besoin de maintenir une "mmoire" entre deux requtes
maintenir une connexion de lutilisateur sur le serveur pour se faire : concept de "suivi de sessions"

Une session = ensemble de transactions apparentes dun mme utilisateur


M.Romdhani, INSAT, Dcembre 2007

45

JSP/Servlets

Suivi de session avec les sevlets Java


But: transfert des donnes gnres par une requte vers les requtes suivantes 4 mthodes
1) utilisation des cookies (dj vu) 2) rcriture d'URL : passage de paramtres 3) utilisation des champs de formulaire "hidden" 4) utilisation du JSDK (HttpSession API)

M.Romdhani, INSAT, Dcembre 2007

46

JSP/Servlets

Serlvet session
Trs simple avec l'API des servlets objet HttpSession

Principe :
Un objet "session" peut tre associ avec chaque requte Il va servir de "container" pour des informations persistantes Dure de vie limite et rglable

M.Romdhani, INSAT, Dcembre 2007

47

JSP/Servlets

Exemple de Sessions
Programmation simplifie avec l'API des servlets (JSDK) objet HttpSession
// Dans le code de doPost() HttpSession session = request.getSession(true); Caddy caddy = (Caddy) session.getValue("caddy"); if(caddy != null) { // le caddy nest pas vide ! afficheLeContenuDuCaddy(caddy); } else { caddy = new Caddy(); ... caddy.ajouterUnAchat(request.getParameter("NoArticle")); session.putValue("caddy", caddy); .... }
M.Romdhani, INSAT, Dcembre 2007

48

JSP/Servlets

Les bibliothques de balises JSP

M.Romdhani, INSAT, Dcembre 2007

49

JSP/Servlets

Les bibliothques de balises


Les bibliothques de balises personnalisables (custom tags Encapsulent des fonctions complexes utiliser dans les JSPs Utilises pour la cration d'un contenu dynamique Ce sont des classes qui implmentent l'interface Tag du Pacakge javax.servlet.jsp.tagext

M.Romdhani, INSAT, Dcembre 2007

50

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

<?xml version = "1.0"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <!-- Fig. 10.30: customTagWelcome.jsp --> <!-- JSP that uses a custom tag to output content. --> <%-- taglib directive --%> <%@ taglib uri = "advjhtp1-taglib.tld" prefix = "advjhtp1" %> <html xmlns = "http://www.w3.org/1999/xhtml"> <head> <title>Simple Custom Tag Example</title> </head> <body> <p>The following text demonstrates a custom tag: </p> <h1> <advjhtp1:welcome /> </h1> </body> </html>

JSP/Servlets

Use taglib directive to taglib Fig. 10.30 library include use tags in tag JSP

Use custom tag welcome welcome to insert text in the JSP

M.Romdhani, INSAT, Dcembre 2007

51

JSP/Servlets

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

// Fig. 10.31: WelcomeTagHandler.java // Custom tag handler that handles a simple tag. package com.deitel.advjhtp1.jsp.taglibrary; // Java core packages import java.io.*; // Java extension packages import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; public class WelcomeTagHandler extends TagSupport { // Method called to begin tag processing public int doStartTag() throws JspException { // attempt tag processing try { // obtain JspWriter to output content JspWriter out = pageContext.getOut(); // output content out.print( "Welcome to JSP Tag Libraries!" ); } // rethrow IOException to JSP container as JspException catch( IOException ioException ) { throw new JspException( ioException.getMessage() ); } return SKIP_BODY; } } // ignore the tag's body

WelcomeTag Class WelcomeTagHandler Handler implements interface Tag by extending class handler. TagSupport

JSP container calls 15-32 Lines method doStartTag when it encounters the starting custom tag Line 20 Use custom tag handlers pageContext to obtain JSPs JspWriter object for outputting text

M.Romdhani, INSAT, Dcembre 2007

52

JSP/Servlets

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

<?xml version = "1.0" encoding = "ISO-8859-1" ?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd"> <!-- a tag library descriptor --> <taglib> <tlibversion>1.0</tlibversion> <jspversion>1.1</jspversion> <shortname>advjhtp1</shortname> <info> A simple tab library for the examples </info> <!-- A simple tag that outputs content --> <tag> <name>welcome</name> <tagclass> com.deitel.advjhtp1.jsp.taglibrary.WelcomeTagHandler </tagclass> <bodycontent>empty</bodycontent> <info> Inserts content welcoming user to tag libraries </info> </tag> </taglib>

Defineadvjhtp1 file custom-tag library descriptor file taglib .tld .

tag element describes Line 18 welcome custom tag Specify custom tag name and class

M.Romdhani, INSAT, Dcembre 2007

53

JSP/Servlets

La JSTL (JSP Standard Tag Library) et le langage EL

M.Romdhani, INSAT, Dcembre 2007

54

JSP/Servlets

JSTL
Depuis la version JSP 1.2 Spcification dvelopp par le groupe dexperts JSR 52 Collection de Tag Librairies personnalises qui implmentent la plus part des fonctions communes aux pages web: Itrations et conditions (core) Formatage des donnes (format) Manipulation de XML (xml) Accs au bases de donnes (sql) Utilisation du langage EL (Expression Language) Avantages Code simple, lisible et facile maintenir Le concepteur de page est libr de code Java vite au dveloppeur dcrire chaque fois les fonctions de bases.

M.Romdhani, INSAT, Dcembre 2007

55

JSP/Servlets

EL: Expression Language


Spcification de EL sous lautorit du groupe dexpert JSR-152 pour JSP 1.3 Le JSR-52 et JSR-152 travail ensemble sur la spcification de lExpression Language En JSTL il est utilis uniquement dans la valeur dun attribut:
<prefix:tag attr1="${ expr }" />

Il est invoqu exclusivement via la syntaxe ${ expr }

M.Romdhani, INSAT, Dcembre 2007

56

EL: Expression Language


objets prdfinies

JSP/Servlets

Un identificateur dans EL fait rfrence une variable retourn par lappel de pageContext.findAttribute(identificateur) et qui est dans la porte (scope): page, request, session ou application. ${ var } = pageContext.getAttribute("var") Objets implicites: pageScope, requestScope, sessionScope, applicationScope Accs au paramtres dune requte HTTP via param (objet de type Map) et paramValue Un objet implicite pageContext qui donne accs aux proprits associs au contexte de la page JSP

M.Romdhani, INSAT, Dcembre 2007

57

JSTL

JSP/Servlets

core tag library

Fonctions de base Affichage <c: out value=" expression " />

<%=

expression %>

Affectation <c:set value="value" var=" varName " scope=" application " /> <% pageContext.setAttribute("varName",value,SCOPE) %> Exception java.lang.Throwable <c:catch [var="varName"] > actions a surveiller </c:catch> <% try{ actions surveiller }catch(Throwable varName){} %>

M.Romdhani, INSAT, Dcembre 2007

58

JSTL

JSP/Servlets

core tag library

Les conditions 1- simple if(cond)

<c:if test="${user.visitCount = = 1}"> <c:out value="Premire visite.Bienvenue!" /> </c:if>

<% if(user.visitCount == 1){ %> <%= "Prmire visite.Bienvenue" %> <% } %>

2-choix multiple if/else


<c:choose> <c:when test="${count == 0}> Pas de visite! </c:when> <c:otherwise> <c:out value="${count}"/> visiteurs. </c:otherwise> </c:choose> <% If(count == 0){ %> <%= Votre compte est vide %> <% }else{ %> <%= count+"visiteurs" %> <% } %>

M.Romdhani, INSAT, Dcembre 2007

59

JSP/Servlets

JSTL

core tag library

Les itrations avec la boucle for/while en JSP


<%@page import="java.util.*" %> <% Member user = null; Collection users = session.getAttribute("members"); Iterator it = %> <%= "nom: <% } %> users.iterator(); while(it.hasNext()){ user = (Member) it.next(); "+user.getName() %>

en JSTL
forEach
<c:forEach var=user items=sessionScope.members [begin] [end] [step]> <c:out value="nom: </c:forEach> 60 ${user.name}" />

M.Romdhani, INSAT, Dcembre 2007

S-ar putea să vă placă și