Vous êtes sur la page 1sur 60

La FAQ Java EE

Date de publication : 17 mai 2003 Dernire mise jour : 26 avril 2013

Cette faq a t ralise partir des questions frquemment poses sur les forums de www.developpez.com et de l'exprience personnelle des auteurs. Nous tenons souligner que cette faq ne garantit en aucun cas que les informations qu'elle propose sont correctes. Les auteurs font leur maximum, mais l'erreur est humaine. Cette faq ne prtend pas non plus tre complte. Si vous trouvez une erreur, ou que vous souhaitez nous aider en devenant rdacteur, lisez ceci. Sur ce, nous vous souhaitons une bonne lecture. L'quipe Java

Ont contribu cette FAQ :

L'quipe Java - Stessy - adiGuba - bahamouth christopheJ - lunatix - syj - Righetto Dominique draken - SnorkyBZH - Didier - vedaer - duj - request SEMPERE Benjamin - Jaxofun - willy78 - Sniper37 - Xplode : Mike Franois - paquerette - ceddup - Baptiste Wicht - Jack Huser - fabszn - v1nc3kr0 - link256 - zag

La FAQ Java EE

1. Informations gnrales (5) ..................................................................................................................................... 4 2. Dfinitions (14) ....................................................................................................................................................... 6 3. Java EE (3) .......................................................................................................................................................... 12 3.1. Gnralits (3) ............................................................................................................................................. 13 4. Servlets (23) ......................................................................................................................................................... 14 4.1. Gnralits (20) ........................................................................................................................................... 15 4.2. Session (3) ...................................................................................................................................................31 5. JSP (28) ............................................................................................................................................................... 33 5.1. Gnralits (8) ............................................................................................................................................. 34 5.2. JSTL (Java Standard Tag Library) (2) ......................................................................................................... 38 5.2.1. Librairie de base (1) ............................................................................................................................ 39 5.3. JSP Taglibs (18) .......................................................................................................................................... 40 5.3.1. Taglibs 1.1 (11) .................................................................................................................................... 41 5.3.2. Taglibs 1.2 (6) ......................................................................................................................................50 6. Frameworks Web (2) ............................................................................................................................................55 7. Conteneurs Web et Serveurs d'Application (8) ....................................................................................................56 7.1. Tomcat (8) .................................................................................................................................................... 57

-3Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

Sommaire > Informations gnrales Comment bien utiliser cette faq ?


Auteur : L'quipe Java Le but : Cette faq a t conue pour tre la plus simple possible d'utilisation. Elle tente d'apporter des rponses simples et compltes aux questions auxquelles sont confronts tous les dbutants (et les autres). L'organisation : Les questions sont organises par thme, les thmes pouvant eux-mme contenir des sous-thmes. Lorsqu'une question porte sur plusieurs thmes, celle-ci est insre dans chacun des thmes rendant la recherche plus facile. Les rponses : Les rponses contiennent des explications et des codes sources. Certaines sont compltes de fichier tlcharger contenant un programme de dmonstration. Ces programmes sont volontairement trs simples afin qu'il soit ais de localiser le code intressant. Les rponses peuvent galement tre compltes de liens vers d'autres rponses, vers la documentation en ligne de Sun ou vers un autre site en rapport. Nouveauts et mises jour : Lors de l'ajout ou de la modification d'une question/rponse, un indicateur est plac cot du titre de la question. Cet indicateur reste visible pour une dure de 15 jours afin de vous permettre de voir rapidement les modifications apportes. J'espre que cette faq pourra rpondre vos questions. N'hsitez pas nous faire part de tous commentaires/remarques/critiques. lien : Comment participer cette faq ?

Comment participer cette faq ?


Auteur : L'quipe Java Cette faq est ouverte toute collaboration. Pour viter la multiplication des versions, il serait prfrable que toutes collaborations soient transmises aux administrateurs de la faq. Plusieurs comptences sont actuellement recherches pour amliorer cette faq : Rdacteur : Bien videmment, toute nouvelle question/rponse est la bienvenue. Web designer : Toute personne capable de faire une meilleure mise en page, une feuille de style ou de belles images... Correcteur : Malgr nos efforts, des fautes d'orthographe ou de grammaire peuvent subsister. Merci de contacter les administrateurs si vous en dbusquez une... Idem pour les liens errons. lien : Quels sont les droits de reproduction de cette faq ?

Quels sont les droits de reproduction de cette FAQ ?


Auteur : L'quipe Java Les codes sources prsents sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs.

-4Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

Copyright 2009 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. Cette page est dpose la SACD.

O trouver d'autres sources d'information ?


Auteur : L'quipe Java Les cours et didacticiels Java Web Les forums Java de Developpez.com La FAQ Struts La FAQ Gnral Java La FAQ JDBC La Javadoc : toutes les informations utiles sur les classes, leurs mthodes ... toujours avoir sous la main. Les didacticiels de Sun La FAQ de JGuru, beaucoup plus complte que celle-ci ...

Remerciements
Auteur : L'quipe Java Un grand merci tous ceux qui ont pris de leur temps pour la ralisation de cette FAQ. C'est dire : Aux rdacteurs qui ont rdig les questions de cette FAQ. Aux correcteurs qui ont contribu supprimmer un maximum de fautes de franais sur cette FAQ. Aux visiteurs qui ont visit cette page et qui, par leurs remarques, ont contribu l'amlioration de cette page.

-5Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

Sommaire > Dfinitions Qu'est ce que Java EE ?


Auteur : Stessy La plateforme Java entreprise (Java EE) est un ensemble de spcifications coordonnes et pratiques qui permettent ensemble des solutions pour le dveloppement, le dploiement, et de la gestion des applications multitiers centralises sur un serveur. Construit sur la plateforme de Java 2 dition standard (Java SE), la plateforme Java EE ajoute les possibilits ncessaires pour fournir une plateforme complte, stable, scurise, et rapide de Java au niveau entreprise. La plateforme entreprise fournit un ensemble de services permettant aux composants de dialoguer entre eux: HTTP et HTTPS Java Transaction API (JTA) Remote Method Invocation/Internet Inter-ORB Protocol (RMI/IIOP) Java Interface Definition Language (Java IDL) Java DataBase Connectivity (JDBC) Java Message Service (JMS) Java Naming and Directory Interface (JNDI) API JavaMail et JAF (JavaBeans Activation Framework) Java API for XML Processing (JAXP) Java EE Connector Architecture Gestionnaires de ressources Entreprise Java Beans (EJB) Java Server Pages (JSP) Servlet Java API for XML Web Services (JAX-WS, anciennement JAX-RPC) SOAP with Attachments API for Java (SAAJ) Java API for XML Registries (JAXR)

Si vous souhaitez en savoir plus sur Java EE, suivez ces liens: Java EE Home Java EE 5 Tutorial

Que sont les EJB ?


Auteur : Stessy Un composant Entreprise JavaBeans (EJB) est une classe ayant des champs et des mthodes pour mettre en application des modules de la logique mtier (Business logic). Vous pouvez penser un entreprise bean comme un module pouvant tre employ seul ou avec d'autres entreprise bean pour excuter la logique mtier sur le serveur Java EE. Il existe actuellement trois types d'entreprise bean : les bean session (Session Bean) les bean entit (Entity Bean) les bean contrls par message (Message Driven Bean)

Les entreprise bean interagissent le plus souvent avec des bases de donnes.

-6Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

Si vous souhaitez en savoir plus sur les EJB, suivez ces liens : EJB Home EJB (J2EE 1.4 tutorial) EJB Spcifications

Que sont les Servlet ?


Auteur : Stessy Techonologie Java utilise pour effectuer des traitements cot serveur en rponse aux requtes provenant en gnral de poste clients distants. Bien que les servlets puissent rpondre n'importe quel type de requte, elles sont gnralement employes pour rpondre des requtes de type HTTP et qui permettent de retourner dynamiquement des pages html. Si vous souhaitez en savoir plus sur les Servlets, suivez ces liens: Servlets Home Servlets (Java EE 5 Tutorial) Servlets implmentations et spcifications

Que sont les JSP ?


Auteur : Stessy Les JavaServerPages (JSP) vous permet d'insrer des petits bouts de code Java (scriptlets) directement dans du code html. Une page JSP est un document qui contient deux types de texte: des donnes statiques (qui peuvent tre exprimes en n'importe quel format texte tel que le HTML, le WML, et le XML) des lments de JSP, qui dterminent comment la page construit le contenu dynamique.

Pour plus d'informations sur les JSP, vous pouvez suivre ces liens : JSP home JSP (Java EE 5 Tutorial) JSP Spcifications et implmentation

Que sont les connecteurs JCA ?


Auteur : willy78 Les connecteurs JCA sont des modules qui se dploient sur les serveurs d'application. Ils permettent de connecter un serveur JavaEE un systme propritaire ("legacy system"), et de normaliser les accs et interactions avec ce systeme. L'api JCA dfini un contrat entre le serveur d'application et le systeme, via des interfaces comme le fait jdbc. JCA est une gnralisation de JDBC.
-7Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

JCA 1.0 permet d'envoyer des messages vers le systme propritaire uniquement. JCA 1.5 permet, en plus, de recevoir des messages qui seront traits par un "Message Listener", gnralement un Message Driven Bean

Qu'est ce que JAXP ?


Auteur : vedaer JAXP (Java API for XML Processing) est l'API "standard" (appartenant au JDK) pour la manipulation du format XML. Cette API met la disposition du dveloppeur trois ensembles de fonctionnalits : la modlisation, le parsing et la transformation. Elle est compose de quatre packages principaux. javax.xml.parsers : Ce package contient un ensemble d'interfaces devant tre implmentes par les diffrents parseurs (SAX ou DOM). Ce package fournit aussi un ensemble de factory permettant l'accs aux parseurs. org.w3c.dom : Ce package contient l'ensemble des classes et interfaces ncessaires pour travailler avec DOM (modlisation). org.xml.sax : Ce package contient l'ensemble des classes et interfaces ncessaires pour travailler avec SAX (parsing). javax.xml.transform : Ce package contient l'ensemble des classes et interfaces ncessaires pour travailler avec XSLT (transformation).

Attention, JAXP n'est pas limite SAX, DOM, XSLT et ces quatre packages. Elle offre bien plus de fonctionnalits. Pour savoir ce que sont exactement SAX, DOM, XSLT et en savoir plus sur l'utilisation de JAXP, regardez la partie XML de la FAQ Java. Il est aussi important de noter que, mme si au dpart JAXP fut cre comme une API Java EE, elle est dsormais intgre au J2SDK standard. Pour plus d'informations sur XML, vous pouvez visiter la rubrique XML de developpez.com : xml.developpez.com/. http://

Qu'est ce que JAX-RPC ?


Auteur : vedaer JAX-RPC (Java API for XML-based Remote Procedure Call) est une API permettant de crer des services et clients Web bass XML et RPC. RPC (Remote Procedure Calls), ou appels de procdures distance, est un systme permettant des clients d'excuter des procdures sur des systmes distants. Ces appels de procdures et les rponses retournes se font grce au protocole HTTP et SOAP (messages XML). Attention ! Aujourd'hui remplac par JAX-WS.

Qu'est ce que JAX-WS ?


Auteur : X-plode : Mike Franois JAX-WS (Java API for XML Web Services) est la nouvelle appellation de JAX-RPC.
-8Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

JAX-WS est une technologie pour des raliser des services web et clients en utilisant le language XML. JAX-WS permet d'crire en orient message tout autant que des services web orient RPC. Pourquoi ce changement de nom ? JAX-RPC ne convient plus l'ensemble des concepts couverts. Cet acronyme donne l'impression qu'il s'agit uniquement de technologies synchrones, relatives l'appel de procdure distance et non aux services web. De plus l'intgration de JAXB 2.0, pose de nombreux problmes de compatibilit avec JAX-RPC 1.1. C'est ainsi l'occasion pour Sun de repenser, mettre jour, amliorer et surtout rationaliser cette brique logicielle en utilisant les dernires nouveauts du langage lui-mme, ainsi que les technologies dveloppes en parallle dans d'autres groupes de travail. Pour plus d'informations sur JAX-WS ( anciennement JAX-RPC ), vous pouvez suivre ces liens : Introduction de JAX-WS JAX-WS (Java EE 5 Tutorial) XML-RPC spcification

Qu'est ce que JDBC ?


Auteur : vedaer JDBC est une API (Application Programming Interface) java disponible depuis la version 1.1 du JDK. Pour note, JDBC est un nom dpos et non un acronyme, mme si en gnral on lui donne la dfinition suivante : Java DataBase Connectivity. Cette API est constitue d'un ensemble d'interfaces et de classes qui permettent l'accs, partir de programmes java, des donnes tabulaires (i.e. tries sous forme de table ou de tableur). Par donnes tabulaires, on entends gnralement des bases de donnes contenues dans des SGBD relationnels. Mais, JDBC n'est pas restreinte ce type de source de donnes. On peux aussi accder des sources de donnes sous forme de fichiers (fichiers XML par exemple).

Qu'est ce que JAAS ?


Auteur : duj Java Authentication and Authorisation Service. Il s'agit d'un package fournissant des services d'authentification (login) et d'autorisation (verification de permissions pour l'execution de mthodes). JAAS fait partie de la distribution de base du SDK depuis la version 1.4 . http://java.sun.com/products/jaas/ JAAS est hautement configurable, et permet aux dveloppeurs d'crire leurs propres modules.

-9Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

Une libraire fournissant quelques implmentation, dont une permettant une interaction avec Windows NT et Windows 2000 pour l'authentification : http://free.tagish.net/jaas/index.jsp

Qu'est ce que JAXB ?


Auteur : vedaer JAXB (Java Architecture for XML Binding) offre les outils et API ncessaires pour "lier" des objets java des documents XML. JAXB utilise des schmas (W3C XML Schema) pour faire ce lien. Une fois ce lien cr (grce un compilateur qui va gnrer les packages correspondant un schma donn), vous pouvez facilement srialiser/desrialiser les objet java sous un format XML. Pour plus d'informations sur JAXB, vous pouvez suivre ces liens : JAXB home JAXB (Java Web Services Tutorial)

Pour le moment, JAXB permet juste de partir d'un Schma XML pour gnrer les classes correspondantes (interfaces implmenter). JAXB 2.0 devrait palier cette limitation en permettant de crer des schmas partir de classes Java dj dfinies. Pour plus d'informations, regardez la JSR 222 : http://www.jcp.org/ en/jsr/detail?id=222

Qu'est ce que SAAJ ?


Auteur : vedaer SAAJ (SOAP with Attachments API for Java) est une API Java permettant l'envoi et la rception de messages XML sur le rseau. Ces messages obissent la spcification SOAP (Simple Object Access Protocol) 1.1. SAAJ est souvent utilise par des API de plus haut niveau comme JAXR et JAX-RPC. Mais, elle peut tout fait tre utilise de manire indpendante. Pour plus d'informations, vous pouvez suivre ces liens : SAAJ home SAAJ (Java EE 5 Tutorial) SAAJ documentation http://www.w3.org/TR/soap/ .

Vous pouvez trouver la spcification de SOAP cette adresse :

Qu'est ce que JAXR ?


Auteur : vedaer JAXR (Java API for XML Registries) est une API intgre Java EE qui permet l'accs diffrents types de registres XML. Ces registres XML sont une infrastucture permettant la construction, le dploiement et la dcouverte de Web services. JAXR permet l'interaction avec plusieurs standards, dont UDDI (Universal Description, Discovery, and Integration) et ebXML Registry and Repository standard. Pour connatre les versions supportes de ces standards et les diffrentes implmentations fournisseur disponibles pour JAXR, suivez les liens cidessous.
- 10 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

Java API for XML Registries (JAXR) JAXR (Chap. 10 du Java EE Tutorial) XML Downloads & Specifications Java Technology & Web Services

Pour note, JAXR est intgr au JWSDP (Java Web Services Developer Pack), mais vous pouvez aussi le tlchager sparment (voir liens).

Que sont les Frameworks Web ?


Auteur : X-plode : Mike Franois Un framework Web permet de pouvoir abstraire les problmes rencontrs au quotidien lors du developpement d'une application Web. Tout autant, il permet de pouvoir avoir un design rutilisable pour un dveloppement donn. Le rsultat est un meilleur code, plus lisible et ainsi plus facilement maintenable. Les Frameworks Web peuvent se distinguent en deux types : Orient Requte Orient Composant

- 11 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

Sommaire > Java EE

- 12 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

Sommaire > Java EE > Gnralits Comment faire pour ne pas afficher l'arborescence de l'application lorque l'utilisateur entre simplement le contexte de l'application dans l'URL ?
Auteur : Stessy Pour que l'utilisateur ne puisse pas voir l'arborescence de l'application lorqu'il indique uniquement le contexte de l'application dans l'URL, il suffit simplement d'ajouter un lment dans le fichier web.xml qui s'il existe, sera utilis par le conteneur comme page par dfaut.
<welcome-file-list> <welcome-file>welcome.jsp</welcome-file> </welcome-file-list>

Quelles sont les diffrentes portes existantes ?


Auteur : Stessy Les objets crs que ce soit dans les JSP ou les Servlets ont une certaine porte, c'est--dire une certaine dure de vie. Les diffrentes portes existantes sont: page : les objets ne sont accessibles que dans la page o ils sont dfinis request : les objest sont accessibles pendant toute la dure de la requte session : les objets sont accessibles pendant toute la dure de la session application : les objest sont accessibles pendant toute la dure de vie de l'application et dans l'application complte

Quelles sont les differences entre un serveur web et un serveur d'application ?


Auteur : adiGuba Un serveur d'application a pour objectif de facilit la cration d'application serveur sans se soucier de l'aspect rseau (toute la couche rseau est laisse au serveur d'application). Un serveur web peut grer plusieurs sites indpendemment, il peut utiliser plusieurs langages/technologies diffrents (ASP, PHP, JavaEE), gre les transactions scuriss... La confusion vient du fait que la plupart du temps les applications JavaEE sont des applications Web, pour la simple raison que cela permet de ne pas distribuer d'application cliente (un navigateur suffit).

- 13 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

Sommaire > Servlets

- 14 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

Sommaire > Servlets > Gnralits Pourquoi n'y a-t-il pas de constructeur dans une servlet ?
Auteur : Stessy Une servlet est un peu comme un applet par le fait qu'elle possde une mthode init() qui agit en tant que constructeur. Puisque l'environnement de servlet prend soin d'instancier la servlet, un constructeur explicite n'est pas ncessaire. N'importe quel code d'initialisation que vous devez utiliser devrait tre plac dans la mthode init() puisque cette mthode est appele lorsque le servlet est charge par le conteneur de servlet.

Quelle est la diffrence entre les mthodes doGet() et doPost() ?


Auteur : Stessy doGet() est appele la suite d'une requte de type HTTP GET. Cela se passe gnralement lorsqu'un utilisateur clique sur un lien ou lorsque celui-ci entre une URL dans la barre d'adresse du navigateur. La mthode doPost() est appele en rponse d'une requte HTTP POST. Les 2 mthodes sont appeles partir de l'implmentation par dfaut de la mthode service() se trouvant dans la classe de base HttpServlet Fondamentalement le navigateur demande toujours des pages par l'intermdiaire de GET et peut envoyer des donnes sous les 2 formes GET et POST. Les 2 seules diffrences rsident dans le fait que : GET est restreint au niveau de la taille des paramtres envoys au serveur. Cela veut dire qu'il est, la plupart du temps, prfrable d'envoyer des donnes avec la mthode POST. En envoyant des donnes par l'intermdiaire de GET voque galement une question concernant la scurit puisqu'elles sont ajoutes la suite de l'URL. Pour cette raison il est plus prudent d'utiliser la mthode POST pour envoyer des donnes au serveur.

Comment grer les caractres spciaux dans une servlet ?


Auteurs : link256 - X-plode : Mike Franois Les caractres spciaux sont souvent une cause de problme lors de l'utilisation des servlets. Mme si nous dclarons (l'UTF-8 par exemple) dans nos pages servlets et jsps, on peut voir apparatre les caractres spciaux non grer. Pour ce faire, il suffit de faire une vrification comme suit :
String encoding = request.getCharacterEncoding(); if (encoding == null || !encoding.equals("UTF-8")) { try { request.setCharacterEncoding("UTF-8"); } catch (UnsupportedEncodingException e) { System.err.println("HttpMultipartRequest - : " + e); } }

Une autre faon de faire est de configurer l'encodage au niveau du fichier web.xml au moyen d'un Filter :

- 15 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

<filter> <filter-name>Character Encoding</filter-name> <filter-class>chemin.de.ton.package.CharsetFilter</filter-class> </filter> <filter-mapping> <filter-name>Character Encoding</filter-name> <servlet-name>action</servlet-name> </filter-mapping>

Puis d'implmenter un filtre UTF-8 :


/** * Filtre sur les requetes pour les encoder en UTF-8 */ public class CharsetFilter implements Filter{ @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding("UTF-8"); chain.doFilter(request,response); } @Override public void init(FilterConfig arg0) throws ServletException {} @Override public void destroy() {}

Comment connaitre la version de l'API servlet utilise par un moteur de servlet ?


Auteur : Stessy L'interface ServletContext inclut les mthodes getMajorVersion() et getMinorVersion() pour vous indiquer quelle version de l'API Servlet est utilise. Un petit exemple :
//Si le moteur de servlet implmente la spec 2.4 de l'API servlet //majorVersion est gal 2 int majorVersion = getServletContext().getMajorVersion(); //minorVersion est gal 4 int minorVersion = getServletContext().getMinorVersion();

Comment accder un JavaBean depuis une servlet ?


Auteur : Stessy Pour pouvoir partager des variables entre vos pages JSP et vos servlets, vous devez savoir comment crer et accder ces variables depuis vos servlets. Les diffrents exemples qui vont suivre dpendent de la porte, ou si vous prferez, la dure de vie de vos objets. Pour en savoir plus sur les diffrentes portes existantes, reportez vous la section suivante : sont les diffrentes portes existantes ? Quelles

- 16 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

page :

Dans cet exemple, le Bean est instanci comme une variable locale est n'est donc pas partageable entre diffrentes servlets.
com.developpez.beans.MyBean myBean = new com.developpez.beans.MyBean();

request :

Dans cet exemple, le Bean instanci sera accessible pendant toute la dure de la requte
com.developpez.beans.MyBean myBean = (com.developpez.beans.MyBean) request.getAttribute("myBean"); if (myBean == null) { myBean = new com.developpez.beans.MyBean(); request.setAttribute("myBean", myBean); }

session :

Dans cet exemple, lorsque le Bean est instanci il est plac dans la session actuelle.
HttpSession session = request.getSession(true); com.developpez.beans.MyBean myBean = (com.developpez.beans.MyBean) session.getAttribute("myBean"); if (myBean == null) { myBean = new com.developpez.beans.MyBean(); session.setAttribute("myBean", myBean); }

application :

Dans ce dernier exemple, lorsque le Bean est instanci il est plac dans le contexte de la servlet.
com.developpez.beans.MyBean myBean = (com.developpez.beans.MyBean) getServletContext().getAttribute("myBean"); if (myBean == null) { myBean = new com.developpez.beans.MyBean(); getServletContext().setAttribute("counter", counter); }

Quel est l'objet ServletConfig et quelle est son utilit ?


Auteur : Stessy L'objet ServletConfig est une interface. Cette interface contient les 4 mthodes suivantes getInitParameter(java.lang.String name) : Cette mthode retourne un String contenant le paramtre d'initialisation de la servlet correspondant au paramtre name getInitParameterNames() : Cette mthode retourne un objet Enumration contenant les paramtres d'initialisation de la servlet getServletContext() : Cette mthode retourne une rfrence de l'interface ServletContext C'est la mthode la plus valable car elle permet de partager l'information travers l'application

- 17 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

getServletName() : Cette mthode retourne un String contenant le nom de l'instance de la servlet

Comment modifier le Time Out par dfaut de session ?


Auteur : bahamouth Dans le fichier web.xml situ dans le rpertoire WEB-INF de l'application, il suffit d'ajouter les lignes suivantes :
<session-config> <session-timeout>60</session-timeout> </session-config>

Comment modifier le Time Out par de session par programmation ?


Auteur : Jaxofun Il suffit d'accder la session voulue et de la modifier comme ceci :
request.getSession().setMaxInactiveInterval(int);

Comment connatre le navigateur utilis par un utilisateur


Auteur : Didier Cette information peut tre retrouve dans le header de la requte:
String browser = request.getHeader("user-agent");

Comment placer et rcuprer un paramtre d'initialisation d'une servlet ?


Auteur : Righetto Dominique Placer la dfinition <init-param> dans la description de votre servlet dans le fichier web.xml comme ceci
<servlet> <servlet-name>maServlet</servlet-name> <display-name>Ma Servlet</display-name> <description>Ce que fait ma servlet</description> <servlet-class>com.servlet.MaServlet</servlet-class> <init-param> <param-name>MON_PARAM</param-name> <param-value>Bonjour</param-value> </init-param> </servlet>

Puis dans le code de votre servlet, utilisez ceci pour rcuprer la valeur de MON_PARAM
getInitParameter("MON_PARAM");

Si vous dsirez mettre plus de paramtres, il suffit d'ajouter des dclarations <init-param> comme ceci

- 18 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

<servlet> <servlet-name>maServlet</servlet-name> <display-name>Ma Servlet</display-name> <description>Ma Servlet</description> <servlet-class>com.servlet.MaServlet</servlet-class> <init-param> <param-name>MON_PARAM</param-name> <param-value>Bonjour</param-value> </init-param> <init-param> <param-name>MON_PARAM_2</param-name> <param-value>Bonjour</param-value> </init-param> </servlet>

Si vous dsirez mettre des paramtres de manire globale afin de pouvoir les rcuprer dans toutes les servlets, il suffit d'ajouter <context-param> comme ceci
<webapp> ... <context-param> <param-name>Author</param-name> <param-value>X-plode</param-value> </context-param> </webapp>

Puis dans le code de votre servlet, il faut rcuprer le contexte de la servlet et appeler la mthode getInitParameter comme la manire prcdente pour rcuprer la valeur de Author
getServletContext().getInitParameter("MON_PARAM");

Comment uploader un fichier depuis une applet vers une servlet ?


Auteur : SnorkyBZH Cot applet :
URL urlservlet = new URL("http://localhost:8080/imed/ImageMapServlet"); HttpURLConnection connExtension = (HttpURLConnection)urlservlet.openConnection(); FileInputStream in = new FileInputStream(image); in.read(tableauImage); in.close(); HttpURLConnection connImage = (HttpURLConnection)urlservlet.openConnection(); connImage.setDoInput(true); connImage.setDoOutput(true); connImage.setUseCaches(false); connImage.setRequestProperty("Content-Type","application/octet-stream"); DataOutputStream out = new DataOutputStream(connImage.getOutputStream()); out.write(tableauImage, 0, tableauImage.length); out.flush(); out.close();

Cot servlet
// Rcupration du flux entrant java.io.DataInputStream dis = new java.io.DataInputStream(request.getInputStream()); dis.readFully(temp); dis.close();

- 19 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

// Ecriture du fichier image sur le serveur File cibleServeur = new File("/repertoire/nomfichier"); FileOutputStream fos = new FileOutputStream(cibleServeur); fos.write(temp); fos.close();

Comment tlcharger un fichier depuis une servlet ?


Auteur : Stessy Voici un exemple de code permettant de tlcharger un fichier depuis le serveur vers le poste client
response.setContentType("application/download"); response.setHeader("Content-Disposition", "attachment;filename=\"" + filename + "\""); ServletOutputStream out = response.getOutputStream(); File file = null; BufferedInputStream from = null; try { file = new File(filepath); response.setContentLength((int) file.length()); int bufferSize = 64 * 1024; from = new BufferedInputStream(new FileInputStream(file), bufferSize * 2); byte[] bufferFile = new byte[bufferSize]; for (int i = 0; ; i++) { int len = from.read(bufferFile); if (len < 0) { break; } out.write(bufferFile, 0, len); } out.flush(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (from != null) { try { from.close(); } catch (Exception e) { e.printStackTrace(); } } if (out != null) { try { out.close(); } catch (Exception e) { e.printStackTrace(); } } if (file != null) { try { file.delete(); } catch (Exception e) { e.printStackTrace(); }
- 20 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

Comment faire pour grer des actions effectuer lors de la cration ou suppression de session ?
Auteur : Righetto Dominique En implmentant l'interface HttpSessionListener comme ceci
package com.dvp.faq.javaee; import javax.servlet.http.HttpSessionListener; import javax.servlet.http.HttpSessionEvent; public class MyHttpSessionListener implements HttpSessionListener { /** Cette mthode est appele lors de la cration de session */ public void sessionCreated(HttpSessionEvent hse){ } System.out.println("Une session vient d'tre cre");

/** Cette mthode est appele lors de la destruction de session*/ public void sessionDestroyed(HttpSessionEvent hse) { } System.out.println("Une session vient d'tre dtruite");

Ensuite, il suffit de rfrencer le listener dans le fichier web.xml (sous la balise racine)
<web-app> <listener> <listener-class> com.dvp.faq.javaee.MyHttpSessionListener </listener-class </listener> </web-app>

Comment faire pour grer des actions effectuer lors du dmarrage ou de l'arrt de l'application ?
Auteur : Righetto Dominique En implmentant l'interface ServletContextListener comme ceci
package com.dvp.faq.javaee; import javax.servlet.ServletContextListener; import javax.servlet.ServletContextEvent; public class MyHttpServletContextListener implements ServletContextListener { /** Cette mthode appele lors du dmarrage de l'application*/ public void contextInitialized(ServletContextEvent sce) { } System.out.println("L'application vient de dmarrer");

- 21 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

/** Cette mthode appele lors de l'arret de l'application*/ public void contextDestroyed(ServletContextEvent sce) { } System.out.println("L'application vient de s'arreter");

Ensuite, il suffit de rfrencer le listener dans le fichier web.xml (sous la balise racine)
<web-app> <listener> <listener-class> com.dvp.faq.javaee.MyHttpServletContextListener </listener-class> </listener> </web-app>

Comment rcuprer le nom associ au contexte d'une application Web ?


Auteur : SEMPERE Benjamin A l'aide de l'interface HttpServletRequest
String contextPath = request.getContextPath();

Comment faire apparatre un fichier (PDF, XLS, CSV, ...) dans mon navigateur ?
Auteurs : ceddup - Baptiste Wicht De base, le navigateur va tenter d'afficher la page directement selon le flux de donnes qu'il reoit. Dans le cas d'un fichier PDF par exemple, les donnes ne sont pas du tout affichables en l'tat par le navigateur. C'est pourquoi, il faut indiquer au navigateur le type de fichier qu'on lui envoie. Pour cela, il faut modifier le content-type de la rponse :
response.setContentType("application/pdf");

Dans ce cas-l, le navigateur comprendra que le fichier retourn est un fichier PDF et agira en consquence. Il est galement possible de modifier le nom du fichier en ajoutant une entte la rponse :
response.setHeader("Content-disposition", "filename=monNomDeFichier");

Comment accder une ressource dans l'arborescence d'une application web depuis une servlet ?
Auteur : fabszn Pour accder une ressource depuis une servlet, il faut passer par l'interface ServletContext. Plus exactement la methode : getRealPath(String relativePath). Cette methode recherche depuis la racine de l'application web le fichier pass en paramtre sous forme d'un chemin relatif.
- 22 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

Voici un exemple d'implementation : La ressource laquelle on veut accder : le fichier de proprit test.properties
clef1=hello World

Emplacement du fichier dans l'application web :


ROOT_WEB_APP ___files ______test.properties ___WEB-INF

Voila le code la servlet :


public class TestServlet extends HttpServlet { private static final String KEY = "clef1"; private static final String RELATIVE_PATH_FILE= "files/test.properties"; protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException { } super.doGet(arg0, arg1);

protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException { InputStream in = null; ServletContext context = getServletContext(); System.out.println("Affichage du chemin absolue du fichier via la methode getRealPath(String"); System.out.println(context.getRealPath(RELATIVE_PATH_FILE)); String path = context.getRealPath("files/test.properties");

if (path != null){ in = new FileInputStream(path); } Properties prop = new Properties(); prop.load(in); String result = prop.getProperty(KEY); arg1.setContentType("text/html"); Writer writer = arg1.getWriter(); writer.write("Rsultat : " + result); writer.flush();

Remarque : Le chemin relatif dtermin par la variable RELATIVE_PATH_FILE doit tre relatif la racine de l'application web Le rsultat l'affichage sera :
Rsultat : hello World

- 23 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

La mthode getResourcePaths() permet de lister tous les fichiers contenu dans l'application web.

Comment donner un type MIME standard comprhensible par tous les navigateurs ?
Auteur : Jack Huser Certains types MIME (Content-Type) ne sont pas reconnus par tous les navigateurs, il est possible de passer par un type MIME Standard que tout navigateur comprend :
response.setContentType ("application/octet-stream"); response.setHeader ("Content-Disposition", "attachment; filename=nom_du_fichier");

Le navigateur va donc lancer le tlchargement du fichier.

Comment obtenir une instance de PageContext dans une Servlet ?


Auteur : adiGuba Il faut utiliser la classe JspFactory et sa mthode getPageContext() pour crer une nouvelle instance de PageContext. Mais attention car tout les PageContext crs de la sorte doivent tre librs par la mthode releasePageContext() : Voici la structure utiliser pour utiliser PageContext :
JspFactory jspFactoty = JspFactory.getDefaultFactory(); PageContext pageContext = jspFactoty.getPageContext( this, // La Servlet request, // Le request courant response, // La rponse courante null, // La page de redirection d'erreur (null si aucune) true, // Utilise la session PageContext.NO_BUFFER, // Pas de buffer false ); // pas d'autoflush try { // Utilisation du PageContext } finally { // Libration du PageContext jspFactoty.releasePageContext(pageContext); }

Qu'est ce que le pattern Transfer Object ?


Auteur : request Le pattern transfer Object prcdemment appel Value Object est une classe implmentant l'interface Serializable. Ce pattern est essentiellement utilis pour changer des donnes entre une application cliente et des EJB de type Entity (EntityBean). Pourquoi me direz-vous ?

- 24 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

Tout simplement parce que, comme vous le savez, les EntityBean comme tous les EJB sont des objets distants, ce qui induit, pour chaque accs celui-ci, un aller-retour travers le rseau, avec en plus dmarrage/validation de transactions. Par exemple, pour lire un objet Personne avec 5 attributs, il vous faudra 6 allers-retours pour rcuprer vos informations (1 findByPrimaryKey + 5 lectures d'attribut). C'est pour cette raison que les Transfer Object sont l. les EntityBean ne sont l que pour tre utilis sur le serveur EJB (dans les EJB 2.0, ils sont maintenant "local", ils ne peuvent pas tre accessible de l'exterieur). L'ide est de fournir un service avec des EJB stateless qui vont vous fournir les service qui vous intressent (Lecture/cration/modification/ suppression ... d'un objet). Cet EJB utilise des Entity en interne pour faire les oprations, et crer des classes de transport (avec uniquement les attributs + get/set), cette classe doit implmenter Serializable pour pouvoir passer sur RMI/IIOP. C'est cette classe que l'on appelle Transfer Object L'avantage de ce modle, c'est avoir une programmation distante (N tiers) avec le transit de veritables objets que vous allez pouvoir manipuler puis renvoyer au serveur pour modification... . Voici un petit exemple qui venir tayer la partie thorique. Entity Bean : L'interface Local
package com.societe.monserveur; import javax.ejb.EJBLocalObject; /** * Classe d'accs une entit. * L'accs est local, cette classe n'est pas accessible depuis l'exterieur. */ public interface PersonneEJBCMP extends EJBLocalObject { public java.lang.Integer getCodePersonne(); public java.lang.String getNom(); } public void setNom(java.lang.String nom);

L'interface Home
package com.societe.monserveur; import javax.ejb.CreateException; import javax.ejb.EJBLocalHome; import javax.ejb.FinderException; /** * Home (Factory) de l' Entit CMP */ public interface PersonneEJBCMPHome extends EJBLocalHome { public PersonneEJBCMP create(java.lang.Integer codePersonne) throws CreateException; public PersonneEJBCMP create(java.lang.Integer codePersonne, java.lang.String nom) throws CreateException; } public PersonneEJBCMP findByPrimaryKey(java.lang.Integer codePersonne) throws FinderException;

- 25 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

Le Bean
package com.societe.monserveur; import import import import javax.ejb.CreateException; javax.ejb.EntityBean; javax.ejb.EntityContext; javax.ejb.RemoveException;

/** * Implmentation de l'entit CMP */ public abstract class PersonneEJBCMPBean implements EntityBean { EntityContext entityContext; public abstract java.lang.Integer getCodePersonne(); public abstract void setCodePersonne(java.lang.Integer codePersonne); public abstract java.lang.String getNom(); public abstract void setNom(java.lang.String nom); public java.lang.Integer ejbCreate(java.lang.Integer codePersonne) throws CreateException { setCodePersonne(codePersonne); return null; } public java.lang.Integer ejbCreate(java.lang.Integer codePersonne, java.lang.String nom) throws CreateException { setCodePersonne(codePersonne); setNom(nom); return null;

public void ejbPostCreate(java.lang.Integer codePersonne) throws CreateException { } public void ejbPostCreate(java.lang.Integer codePersonne, java.lang.String nom, java.lang.String prenom, java.lang.Integer age, java.lang.Integer codeEntreprise) throws CreateException { } public void ejbLoad() { } public void ejbStore() { } public void ejbRemove() throws RemoveException { } public void ejbActivate() { } public void ejbPassivate() { } public void setEntityContext(EntityContext entityContext) { } this.entityContext = entityContext;

public void unsetEntityContext() { } this.entityContext = null;

Le SessionBean L'interface Home


- 26 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

package com.societe.monserveur; import java.rmi.RemoteException; import javax.ejb.CreateException; import javax.ejb.EJBHome; public interface PersonneEJBFacadeHome extends EJBHome { } public PersonneEJBFacade create() throws RemoteException, CreateException;

L'interface Remote
package com.societe.monserveur; import java.rmi.RemoteException; import javax.ejb.EJBObject; public interface PersonneEJBFacade extends EJBObject { public void insert(Personne obj) throws RemoteException; public void update(Personne obj) throws RemoteException; public void delete(Personne obj) throws RemoteException; } public Personne findObject(Integer codePersonne) throws RemoteException;

Le Bean
package com.societe.monserveur; import import import import import import javax.ejb.EJBException; javax.ejb.SessionBean; javax.ejb.SessionContext; javax.naming.Context; javax.naming.InitialContext; javax.naming.NamingException;

public class PersonneEJBFacadeBean implements SessionBean { private SessionContext sessionContext; public void ejbCreate() { } public void ejbRemove() { } public void ejbActivate() { } public void ejbPassivate() { } public void setSessionContext(SessionContext sessionContext) { this.sessionContext = sessionContext; } public void insert(Personne obj) { try { getCMPHome().create(obj.getCodePersonne(), obj.getNom()); } catch (Exception ex) { throw new EJBException(ex); } } public void update(Personne obj) {

- 27 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

try { PersonneEJBCMP personneEJBCMP = getCMPHome().findByPrimaryKey(obj.getCodePersonne()); personneEJBCMP.setNom(obj.getNom()); } catch (Exception ex) { throw new EJBException(ex); }

public void delete(Personne obj) { try { getCMPHome().remove(obj.getCodePersonne()); } catch (Exception ex) { throw new EJBException(ex); } } public Personne findObject(Integer codePersonne) { try { PersonneEJBCMP personneEJBCMP = getCMPHome().findByPrimaryKey( codePersonne); Personne obj = new Personne(personneEJBCMP.getCodePersonne(), personneEJBCMP.getNom()); return obj; } catch (Exception ex) { throw new EJBException(ex); } } public static PersonneEJBCMPHome getCMPHome() throws NamingException { Context ctx = new InitialContext(); PersonneEJBCMPHome personneEJBCMPHome = (PersonneEJBCMPHome) ctx.lookup("com/societe/monserveur/PersonneEJBCMP"); return personneEJBCMPHome; }

Le Transfer Object
package com.societe.monserveur; import javax.naming.Context; import javax.naming.InitialContext; import javax.rmi.PortableRemoteObject; /** * Value Object Personne */ public class Personne implements java.io.Serializable { private Integer codePersonne; private String nom; /** Constructeur sans argument */ public Personne() { super(); } /** * Constructeur avec arguments */ public Personne(Integer codePersonne, String nom) { this.codePersonne = codePersonne; this.nom = nom; } /** * Rechercher un objet partir de son identifiant * @return L'objet trouv */
- 28 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

public static Personne findObject(Integer codePersonne) throws Exception { return getFacade().findObject(codePersonne); } /** Insertion de l'objet dans la base */ public void insert() throws Exception { getFacade().insert(this); } /** Modification de l'objet dans la base */ public void update() throws Exception { getFacade().update(this); } /** Suppression de l'objet dans la base */ public void delete() throws Exception { getFacade().delete(this); } /** * Getter / Setter */ public Integer getCodePersonne() { return codePersonne; } public void setCodePersonne(Integer codePersonne) throws Exception { this.codePersonne = codePersonne; } public String getNom() { return nom; } public void setNom(String nom) throws Exception { this.nom = nom; } /** * Rcupration de l'EJB facade * @return la facade */ private static PersonneEJBFacade getFacade() throws Exception { Context ctx = new InitialContext(); Object ref = ctx.lookup("com/societe/monserveur/PersonneEJBFacade"); PersonneEJBFacadeHome personneEJBFacadeHome = (PersonneEJBFacadeHome) PortableRemoteObject.narrow(ref, PersonneEJBFacadeHome.class); return personneEJBFacadeHome.create(); }

Et enfin le Client
package com.societe.monclient; import com.societe.monserveur.Personne; public class Test { public static void main(String[] args) throws Exception { //Cration de toto Personne toto = new Personne(new Integer(1), "Toto"); toto.insert(); //Modification de toto toto.setNom("Titi"); toto.update();

- 29 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

//Suppression de toto toto.delete(); //Rcupration d'une autre personne Personne autre = Personne.findObject(new Integer(99));

L'avantage avec cette solution (EJB + VO) c'est que l'accs et les rgles de gestion sont centraliss sur un seul serveur. Si une autre application (back office) ou un autre serveur web, veut accder la mme information, il pourra rutiliser tout cela.

- 30 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

Sommaire > Servlets > Session Quelle est l'utilit des sessions ?
Auteur : Stessy La plupart des applications web utilisent le protocole HTTP. Malheureusement ce protocole est ce que l'on appelle un protocole sans tat, c'est dire que le serveur web ne maintient pas les informations propos du client entre deux requtes. De ce fait le serveur ne sait pas dterminer si une requte ou une rponse provient du mme client. C'est pour cela que les applications web utilisent le concept de session. Une session reprsente l'ensemble des intractions pouvant intervenir entre un client et le serveur

Comment crer un objet session ?


Auteur : Stessy Il existe deux mthodes permettant de crer des sessions :
HttpSession getSession()

et
HttpSession getSession(boolean)

Voici un petit exemple permettant de comprendre la diffrence entre ces 2 mthodes

// Si la session existe, ces 2 mthodes renvoient la session existante, sinon ces 2 mthodes crent une nouvelle HttpSession session = request.getSession(true) // Si la session existe, cette mthode renvoie la session existante, sinon la mthode retourne la valeur null HttpSession session = request.getSession(false);

Comment les session sont-elles gres ?


Auteur : Stessy Il existe 3 moyens de grer les sessions : l'aide de cookies l'aide re la rcriture d'URL l'aide des sessions SSL en HTTPS

Cookies A chaque session cre, le serveur envoie un identificateur (sous la forme d'un cookie) correspondant au client. Ensuite le client renverra ce cookie au serveur lors de sa prochaine requte permettant ainsi au serveur d'identifier le client. Voici un petit exemple permettant d'ajouter un cookie dans l'entte de la rponse.
javax.servlet.http.Cookie cookie = new javax.servlet.http.Cookie("user","abc123456"); response.addCookie(cookie);

- 31 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

Mais il arrive assez souvent que le client refuse de recevoir des cookies. Dans ce cas il vous reste une 2 solution qui consiste en la rcriture d'URL Rcriture d'URL Par cette technique le serveur ajoute l'dentificateur de session la fin de chaque URL des pages envoyes par celui-ci. Mais malheureusement cette technique a un cot car le serveur doit effectuer une opration supplmentaire. Celui-ci doit personnifier l'url en y incluant l'identifiant de session. 2 mthodes existent pour individualiser les URL:
encodeURL(String)

et
encodeRedirectURL(String)

Ces mthodes rcrivent l'URL uniquement si le client n'accepte pas les cookies. Dans l'autre cas les URL resteront inchanges. La 2 mthode est utilise lorsque la servlet utilise la mthode
sendRedirect(String)

Exemple :
response.sendRedirect(response.encodeRedirectURL("maServlet");

Les Sessions SSL en HTTPS Il nous suffit de rcuprer la session courante. A cela prs, qu'une session SSL est dtermin par les variables d'tat suivantes: Session ID (l'dentifiant de session) : une squence arbitraire de 32 octets choisie par le serveur pour identifier une session Peer certificate (le certificat du pair) : c'est un certificat X 509 du correspondant (soit pour un serveur ou un client). Compression method : l'algorithme de compression utilis, NULL pour l'instant (ce champ reste vide) Cipher spec (la suite de chiffrement) : dfinit les algorithmes de chiffrement et de hachage MasterSecret : c'est un cl de 48 octets partage entre le client et le serveur. Is resumable (le drapeau) : c'est un flag qui indique si il est possible d'ouvrir de nouvelles connexions sur la session en question.

- 32 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

Sommaire > JSP

- 33 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

Sommaire > JSP > Gnralits Comment utiliser les EL (Expression Language) dans une page JSP ?
Auteur : adiGuba Cela dpend de la version de J2EE que vous utilisez : Avec J2EE 1.4, les EL sont directement intgr dans le moteur JSP 2.0. Toutefois l'application doit obligatoirement tre dclar comme une application Servlet 2.4 au minimum :
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/webapp_2_4.xsd" version="2.4">

Si ce n'est pas le cas les EL seront dsactives afin de ne pas compromettre le fonctionnement d'application J2EE postrieur. Il est toujours possible de dsactiver les EL sur une page particulire en utilisant la directive page :
<%@ page isELIgnored="false" %>

Il est galement possible d'utiliser les EL avec une version antrieur de J2EE, mais dans ce cas ce n'est pas le moteur JSP qui traitera les EL mais une librairie de tag compatible. Ainsi on peut utiliser la JSTL 1.0 ou Struts-EL qui intgre une gestion des EL. Attention toutefois, ces librairies ne sont pas concus pour tre utilises dans une application J2EE 1.4. Dans ce cas il faut utiliser une version sans EL afin de les laisser au moteur JSP 2.0 (respectivement JSTL 1.1 et Struts).

Comment rcuprer le code HTML gnr par une page JSP ?


Auteur : zag Il faut commencer par rcuprer un RequestDispatcher qui va servir de wrapper pour la ressource (le fichier JSP en l'occurence). Pour rcuprer ce dispatcher, il faut passer le contexte de la servlet :
RequestDispatcher rd = servletContext.getRequestDispatcher(jsp);

Ensuite, il faut configurer la requte. Pour cela, c'est simple, il faut simplement passer les attributs ncessaires la page avec la mthode setAttributes. Aprs cela, il faut configurer l'objet response. Ici, on est oblig de crer notre propre classe de rponse pour pouvoir crire dans un String :
public class FictiveHttpServletResponse extends HttpServletResponseWrapper { private StringWriter replacementWriter; public FictiveHttpServletResponse(HttpServletResponse response) { super(response); } replacementWriter = new StringWriter();

public PrintWriter getWriter() throws IOException { return new PrintWriter(replacementWriter);


- 34 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

} public String toString() { return replacementWriter.toString(); }

Ensuite, on peut rcuprer le contenu de la page :


HttpServletResponse newResponse = new FictiveHttpServletResponse((HttpServletResponse) response); rd.forward(request, newResponse); String monMessage = newResponse.toString();

Avec a, la variable monMessage contiendra le contenu HTML gnr par la page JSP.

Comment mettre un header et un footer a chaque jsp ?


Auteur : lunatix (si on est en jsp 2.0 (tomcat 5.0 par exemple)) dans web.xml
<jsp-config> <jsp-property-group> <url-pattern>*.jsp</url-pattern> <include-prelude>/includes/header.jsp</include-prelude> <include-coda>/includes/footer.jsp</include-coda> </jsp-property-group> </jsp-config>

Comment afficher tous les paramtres d'une requete ?


Auteur : syj
Enumeration en = request.getParameterNames(); while (en.hasMoreElements()) { String pName = (String) en.nextElement(); log.debug(pName + "=" + request.getParameter(pName)); // System.out.println(pName + "=" + request.getParameter(pName)); }

Comment afficher tous les attributs du scope request ?


Auteur : syj
java.util.Enumeration en= request.getAttributeNames(); while (en.hasMoreElements()) { String name = (String) en.nextElement(); if(request.getAttribute(name) == null) { log.debug(name + "=NULL"); } else { log.debug(name + "=" + request.getAttribute(name).toString()); }

- 35 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

Crer sa propre page d'erreur ?


Auteur : syj Voici la page d'erreur que l'on utilise. Elle n'est utile qu'en phase de dveloppement. Mais elle permet de determiner rapidement les problmes qui peuvent surgir.
<%@ page language="java" isErrorPage="true" %> <!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en"> <html> <head> <title>Page d'erreur</title> </head> <body bgcolor="#FFFFFF"> <div>Une erreur s'est produite !</div> <h1>Attribut de requete</h1> <div class="requestAttributs"> <% java.util.Enumeration en = request.getAttributeNames(); while (en.hasMoreElements()) { String name = (String) en.nextElement(); if(request.getAttribute(name) == null) { %> <div> <%=name%>=null </div> <% } else { %> <div> <%=name%>=<%=request.getAttribute(name).toString()%> </div> <% } } %> </div> <div class="requestParameters"> <% en=request.getParameterNames(); while (en.hasMoreElements()) { String name = (String) en.nextElement(); if(request.getParameter(name) == null) { %> <div> <%=name%>=null </div> <% } else { %> <div> <%=name%>=<%=request.getParameter(name).toString()%> </div> <% } } %> </div> <h1>Exception</h1> <div>

- 36 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

<% Throwable th = pageContext.getException(); if(th != null) { printRecursiveException(out,th); } %> </div> <%! public void printRecursiveException(JspWriter out, Throwable th) throws java.io.IOException { out.println("<div>" + th.getClass().getName() + ":" + th.getMessage() + "</div>"); StackTraceElement ste; for(int x=0;x < th.getStackTrace().length;x++) { out.println("<div>" + th.getStackTrace()[x].toString() + "</div>"); } Throwable parent = th.getCause(); if(parent != null) { out.println("<div class=\"parentCause\">"); printRecursiveException(out,parent); out.println("</div>"); }

} %> </body> </html>

Comment appliquer ma page d'erreur toutes mes pages JSP ?


Auteur : syj
<error-page> <exception-type>java.lang.Throwable</exception-type> <location>/error.jsp</location> </error-page>

Note: L'insertion doit se faire entre session-config et ressource-ref mais je ne suis pas sur que soit le session-config et ressource-ref qui entoure directement cette balise.

Que sont les objets implicites ?


Auteur : Stessy Des objets sont dit implicites car il ne nous est pas ncessaire de les dclarer ou de les initialiser Les objest le plus souvent utiliss sont: request : lorsqu'un navigateur envoie une requte vers le serveur, il est possible que celui-ci envoie un certain nombre de paramtres. Il existe deux sortes de paramtres : Les paramtres se trouvant dans l'URL comme par exemple http://www.monsite.com/path/de/ ma/page?param1=valeur1&param2=valeur2 Les paramtres de formulaire: ces dernier sont transmis dans le corps de la requte response : cet objet contient la rponse envoye au client. La porte de cette instance est la page out : peut tre employ dans les scriptlets pour crire des donnes dans la page qui sera envoye au client. La porte de cette instance est la page session : cet objet contient, comme son nom l'indique, tous les objets relatif la session

- 37 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

Sommaire > JSP > JSTL (Java Standard Tag Library) Quels sont les objectifs de la JSTL ?
Auteur : adiGuba Le but de la JSTL est de simplifier le travail des auteurs de page JSP, c'est dire la personne responsable de la couche prsentation d'une application web Java EE. En effet, un web designer peut avoir des problmes pour la conception de pages JSP du fait qu'il est confront un langage de script complexe qu'il ne matrise pas forcment. La JSTL permet de dveloppez des pages JSP en utilisant des balises XML, donc avec une syntaxe proche des langages utiliss par les web designers, et leurs permet donc de concevoir des pages dynamiques complexes sans connaissances du langage Java. Sun donc proposer une spcification pour une librairie de tags standard : la Java Standard Tag Library (JSTL). C'est dire qu'il spcifie les bases de cette librairie, mais qu'il laisse l'implmentation libre (de la mme manire que pour les serveur Java EE qui son des implmentations de la spcification Java EE).

- 38 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

Sommaire > JSP > JSTL (Java Standard Tag Library) > Librairie de base Comment afficher une expression ?
Auteur : adiGuba Le tag <c:out/> permet d'valuer une expression et de l'afficher dans la page JSP
<!-- Afficher l'user-agent du navigateur ou "Inconnu" si il est absent : --> <c:out value="${header['user-agent']}" default="Inconnu"/>

Le Corps du tag peut tre utilis la place de l'attribut default.


<!-- Mme chose en utilisant le corps du tag : --> <c:out value="${header['user-agent']}">Inconnu</c:out>

Pour de plus amples informations sur les attributs disponibles pour ce tag

- 39 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

Sommaire > JSP > JSP Taglibs Que sont les JSP Taglibs ?
Auteur : adiGuba Une JSP Taglib est une collection d'actions prdfini destines tre utilis dans une page JSP sous forme de tag (balise XML). Elle se compose d'un descripteur de taglib (Tag Librarie Descriptor) et d'un ensemble de classe Java implmentant l'interface JspTag. Le descripteur de taglib (*.tld) est un document XML qui dcrit les associations en les balises et la classe Java. Ces actions sont reprsentes dans le source JSP comme une balise XML. Lors de la compilation de la JSP, ces balises sont remplaces par des appels vers la classe Java correspondante. On peut citer comme exemple les balises standards prfixes avec jsp :
<jsp:useBean id="monBean" scope="session" class="package.MonObject"> <jsp:setProperty name="monBean" property="monAttribut" value="1.0"/> </jsp:useBean> <jsp:include page="maPage.jsp"/> <jsp:redirect page="maPage.jsp"/> etc...

L'utilisation de taglib permet de limiter l'utilisation de code Java dans une page JSP, voir de totalement le supprimer. Une Taglib est compos de trois lments: Le Tag Librarie Descriptor qui effectue le mapping entre les tags et les classes Java. Les classes Java implmentant les diffrents Tag (implmentant l'interface Tag, ou une de ses interfaces filles IterationTag et BodyTag. Les classes Java implmentant TagExtraInfo afin d'apporter des informations supplmentaires sur les tags (optionnel).

- 40 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

Sommaire > JSP > JSP Taglibs > Taglibs 1.1 Comment utiliser une librairie de tag (taglib) ?
Auteur : adiGuba Une librairie de tag peut tre distribu sous deux formes : Le descripteur de fichier est spar des classes Java... Le descripteur de fichier est inclut dans le Jar avec les classes et possde le nom suivant : "METAINF/taglib.tld".

Afin de pouvoir utiliser cette taglib dans un fichier JSP, il faut la dclarer avec la directive taglib. Respectivement avec le code suivant :
<%@ taglib uri="/WEB-INF/taglib-v1.0.tld" prefix="tag-prefix">

ou
<%@ taglib uri="/WEB-INF/lib/taglib-v1.0.jar" prefix="tag-prefix">

Toutefois, il est prfrrable de ne pas utiliser ces notations sous cette forme. En effet, tant donn que la directive taglib doit tre prsente sur toutes les pages JSP qui l'utilisent, les modifications du nom du descripteur de taglib pourrait tre longue et pnible. Afin de faciliter la maintenance, il faut dclarer la taglib dans le fichier web.xml :
<taglib> <taglib-uri>taglib-URI</taglib-uri> <taglib-location>/WEB-INF/lib/taglib-v1.0.jar</taglib-location> </taglib>

Et utiliser l'URI dans les JSP :


<%@ taglib uri="taglib-URI" prefix="tag-prefix" %>

Ainsi, les changements de fichier de descripteur s'effectue seulement dans le fichier web.xml... Enfin, pour utiliser les tags de la librairie, il suffit de les prfix par le prefixe indiqu dans la directive taglib :
<tag-prefix:nom-du-tag param="valeur"/>

Comment l'interface Tag fonctionne-t-elle ?


Auteur : adiGuba L'valuation d'un Tag JSP aboutit aux appels suivants : Les mthodes setParent(Tag) et setPageContext(PageContext) sont renseignes, ainsi que d'ventuels attributs prsents dans le tag. La mthode doStartTag() est appele. Son code de retour dtermine l'affichage du contenu de la balise. Si le retour vaut Tag.EVAL_BODY_INCLUDE, le corps est valu et crit dans le JspWriter de la page, mais il est ignor si il vaut Tag.SKIP_BODY. Si Tag.EVAL_BODY_INCLUDE est retourn alors que la balise n'a pas de corps, il est ignor.

- 41 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

La mthode doEndTag() est appele. Son code de retour dtermine si le reste de la page doit tre valu ou pas. Si le retour vaut Tag.EVAL_PAGE, le reste de la page est valu, mais il est ignor si le retour vaut Tag.SKIP_PAGE.

Enfin, la mthode release() est appele avant que l'objet ne soit rendu au garbage collector. Attention toutefois, afin d'viter trop d'allocation, les tags sont conservs en cache et rutiliss (tout comme les Servlet/JSP)... La classe javax.servlet.jsp.tagext.TagSupport propose une implmentation par dfaut de l'interface Tag (et de son interface fille IterationTag).

Comment l'interface IterationTag fonctionne-t-elle ?


Auteur : adiGuba L'interface IterationTag tend l'interface Tag. Elle hrite donc de toutes ses proprits et permet d'effectuer des itrations sur le contenu de la balise : La mthode doAfterBody() est appele aprs chaque affichage du corps du tag. Son code de retour determine si le corps doit tre rvalu ou pas. Si le retour vaut IterationTag.EVAL_BODY_AGAIN, le corps sera rvalu, mais si le retour vaut Tag.SKIP_BODY, on passe la fin du tag (doEndTag()) sans rvaluer le corps. La classe javax.servlet.jsp.tagext.TagSupport propose une implmentation par dfaut de l'interface IterationTag.

Comment l'interface BodyTag fonctionne-t-elle ?


Auteur : adiGuba L'interface BodyTag tend l'interface IterationTag. Elle hrite donc de toutes ses proprits, mais permet plus de traitement sur le corps de la balise : La mthode doStartTag() peut dsormais retourner BodyTag.EVAL_BODY_BUFFERED. Dans ce cas (et dans ce cas seulement), les mthodes setbodyContent() puis doInitBody() sont appeles avant la premire valuation du corps de la balise. La mthode setBodyContent() permet au serveur d'application d'indiqu un buffer qui sera utilis pour crire le contenu du corps. La mthode doInitBody() est appele avant la premire valuation du corps du message. La classe javax.servlet.jsp.tagext.BodyTagSupport propose une implmentation par dfaut de l'interface BodyTag.

Comment crire le descripteur de taglib (TLD) ?


Auteur : adiGuba Le Tag Library Descriptor dcrit les diffrents tag de la librairie. Il s'agit d'un fichier XML qui prend la forme suivante :
<?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">
- 42 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

<taglib> <tlibversion>1.0</tlibversion> <jspversion>1.1</jspversion> <shortname>name</shortname> <uri></uri> <info>Description de la taglib</info> <tag>...</tag> </taglib>

Aprs l'entte XML et la dclaration du doctype, on a les lments suivants : tlibversion : Numero de version de la librairie. jspversion : Version minimum des JSP requise pour pouvoir utilis la librarie (optionnel, dfaut: 1.1). shortname : Indique le prefix par dfaut de la librairie pour les EDI compatible (ceci n'est qu'a titre indicatif, le prefix de la directive <%@ taglib %> est utilis). uri : Une URI unique qui identifie cette version de la taglib (optionnel). info : Un texte de description de la taglib (optionnel). tag : Une ou plusieurs mapping de balise avec les classes Java.

Dans un Jar, ce fichier doit se situer dans le rpertoire META-INF avec le nom taglib.tld afin de pouvoir rfrencer directement le fichier Jar.

Comment faire le mapping entre un nom de balise et une classe Tag ?


Auteur : adiGuba Dans le fichier TLD, il faut ajouter, pour chaque tag, les balises suivantes :
<tag> <name>name</name> <tagclass>package.NameTag</tagclass> <teiclass>package.NameTEI</teiclass> <bodycontent>JSP</bodycontent> <info>description</info> <attribute> <name>arg1</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag>

Avec les lments suivants : name : Nom de la balise (Utilisation: <taglib-prefix:nom/>). tagclass : Nom de la classe Java qui reprsente cette balise (hrite de Tag). teiclass : Nom de la classe Java qui fournit des informations complmentaire sur la balise (optionnel). bodycontent : Type de contenu que peut accepter la balise, peut prendre les valeurs empty (pas de corps), JSP (le contenu est interprt comme du JSP), ou tagdependent (le contenu n'est pas interprt) (optionnel, dfaut: JSP). info : Un texte de description du tag (optionnel). attribute : Zro, une, ou plusieurs dclarations d'attribut du tag, dcompos de la manire suivante : name : Nom de l'attribut. La classe tagclass doit possder un mutateur pour cet attribut. required : true/false, indique si l'attribut est obligatoire ou pas (optionnel, dfaut: false)

- 43 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

rtexprvalue : true/false, indique si l'attribut peut tre le rsultat d'une expression (${bean} ou < %=bean%>) ou si il doit tre une chaine statique (optionnel, dfaut: false/valeur statique)

Comment crire un Tag ?


Auteur : adiGuba Exemple simple, un tag vide (sans contenu ni attribut) qui affiche simplement la chaine "Hello World". Le code pourrait se limiter a cela :
public class HelloTag extends TagSupport { public int doStartTag() throws JspException { try { pageContext.getOut().println ("Hello World !"); } catch (IOException e) { throw new JspException ("I/O Error", e); } return Tag.SKIP_BODY; }

Explication : On tend TagSupport afin de bnficier des implmentations par dfaut des mthodes de Tag. On surcharge doStartTag(), dans lequel on se contente d'crire la chaine "Hello World" dans la sortie de la page courante (pageContext est initialis par l'implmentation par dfaut de setPageContext()). On retourne Tag.SKIP_BODY car on ne veut pas traiter le corps de la balise.

Il est inutile de surcharger doEndTag() car son implmentation par dfaut retourne Tag.EVAL_PAGE. Notre descripteur de fichier complet ressemble ceci :
<?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"> <taglib> <tlibversion>1.0</tlibversion> <jspversion>1.1</jspversion> <shortname>tex</shortname> <uri></uri> <info>Taglib d'exemple</info> <tag> <name>hello</name> <tagclass>HelloTag</tagclass> <bodycontent>empty</bodycontent> </tag> </taglib>

Le fait de spcifier un bodycontent empty permet de lancer une exception la compilation si le tag possde un contenu quelconque... Notre page JSP pourrait ressembler ceci :
<%@ taglib uri="taglib-URI" prefix="p" %> <html>

- 44 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

<body> <b><p:hello/></b> </body> </html>

donnera l'affichage suivant :


Hello World !

Comment utiliser des attributs de balise ?


Auteur : adiGuba Cet exemple se base sur l'exemple prcdent. Nous allons amliorer notre tag prcdent en lui ajoutant un attribut name. Si name est prsent, on devra afficher "Hello " suivi de la valeur de l'attribut name, sinon on affiche "Hello World". Le code prcdent devient :
public class HelloTag extends TagSupport { private String name = null; public void setName(String string) { name = string; } public int doStartTag() throws JspException { if (name == null) { name = "World"; } try { pageContext.getOut().println ("Hello " + name + " !"); } catch (IOException e) { throw new JspException ("I/O Error", e); } return SKIP_BODY;

Explication: On ajoute une variable name ainsi que son mutateur setName(). Le mutateur setName() est obligatoire car il sera utilis afin d'initialiser l'attribut de classe name avec la valeur de l'attribut du tag, avant d'appeller doStartTag(). Dans doStartTag(), on affiche "Hello " + name + " !"...

enfin, on modifie le TLD de la manire suivante :


<tag> <name>hello</name> <tagclass>HelloTag</tagclass> <bodycontent>empty</bodycontent> <attribute> <name>name</name>

- 45 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

</attribute> </tag>

Ainsi la page JSP :


<%@ taglib uri="taglib-URI" prefix="p"> <html> <body> <b><p:hello/></b> <br/> <b><p:hello name="Fred"/></b> <br/> </body> </html>

donnera l'affichage suivant :


Hello World ! Hello Fred !

Comment crer un tag conditionnel ?


Auteur : adiGuba On peut avoir besoin d'excuter une portion de code seulement si une condition est vrifi. Par exemple, on va excuter le corps d'un tag seulement si l'attribut indiqu en paramtre est prsent dans la session :
public class IsPresentTag extends TagSupport { private String name = "World"; public void setName(String string) { name = string; } public int doStartTag() throws JspException { if (name == null) { throw new JspException ("name est null !"); } if (pageContext.getAttribute(name,PageContext.SESSION_SCOPE) != null ) { return EVAL_BODY_INCLUDE; } } return SKIP_BODY;

ainsi le code suivant :


<p:isPresent name="infoConnection"> [ Vous tes en ligne ] </p:isPresent>

remplace le scriplet suivant :


<% if ( session.getAttribute("infoConnection") ) { %> [ Vous tes en ligne ]
- 46 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

<% } %>

Comment crer un tag itratif ?


Auteur : adiGuba Afin de crer un tag itratif, il faut implmenter l'interface IterationTag. Toutefois, TagSupport implmente dj cette interface, on pourra donc tendre cette classe afin de bnficier des mthodes par dfaut... Notre tag itratif effectuera un certain nombre de boucle selon un paramtre count. Son mapping serait :
<tag> <name>iterate</name> <tagclass>IterateTag</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>count</name> <required>true</required> </attribute> </tag>

Et son code source :


public class IterateTag extends TagSupport { private int count = 0; private int current; public void setCount(int i) { count = i; } public int doStartTag() throws JspException { current = 0; if (current < count) return Tag.EVAL_BODY_INCLUDE; return Tag.SKIP_BODY; } public int doAfterBody() throws JspException { current++; if (current < count) return IterationTag.EVAL_BODY_AGAIN; return Tag.SKIP_BODY; }

Explication : L'attribut count contiendra la valeur de l'attribut de la balise. Il n'y a pas de conversion String/int effectuer car elle est automatique puisque le mutateur prend un int en paramtre. En cas de valeur incorrecte, une exception est lance... Dans doStartTag(), on initialise current qui contiendra le nombre de ligne dj affich. Il est important de l'initialis dans doStartTag() car la mme instance de Tag peut tre utilis plusieurs fois...

Utilisation :
<p:iterate count="3">
- 47 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

Cette ligne sera affiche trois fois<br/> </p:iterate>

Rsultat:
Cette ligne sera affiche trois fois Cette ligne sera affiche trois fois Cette ligne sera affiche trois fois

Comment interagir avec le contenu du tag ?


Auteur : adiGuba Il peut tre intressant d'interagir avec le corps de la balise. Par exemple, dans le cas d'un tag itratif, on peut avoir besoin du numro de ligne courant dans le body. Pour cela, il suffit de stocker des lments dans un des scopes (page, request, session, application)... On reprend donc le tag prcdent et on met le numro de la ligne dans le scope "page". Notre code devient alors :
public class IterateTag extends TagSupport { private int count = 0; private int current = 0; public void setCount(int i) { count = i; } public int doStartTag() throws JspException { current = 0; if (current < count) { pageContext.setAttribute("line", new Integer(current) ); return Tag.EVAL_BODY_INCLUDE; } return Tag.SKIP_BODY; } public int doAfterBody() throws JspException { current++; if (current < count) { pageContext.setAttribute("line", new Integer(current) ); return IterationTag.EVAL_BODY_AGAIN; } return Tag.SKIP_BODY; } public int doEndTag() throws JspException { pageContext.removeAttribute("line"); return Tag.EVAL_PAGE; }

Explication: Avant chaque valuation du corps, on place dans le scope "page" un attribut "line" contenant un Integer contenant le numro de ligne courante. Dans doEndTag(), on supprime cet attribut afin de ne pas 'polluer' inutilement le reste de la page.

- 48 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

Note : On peut galement proposer un attribut supplmentaire afin de changer le nom de l'attribut stock dans le scope "page", ainsi que le scope utiliser... Utilisation :
<p:iterate count="3"> Ligne numro <%=pageContext.getAttribute("line")%> </p:iterate>

Rsultat :
Ligne numro 0 Ligne numro 1 Ligne numro 2

- 49 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

Sommaire > JSP > JSP Taglibs > Taglibs 1.2 Comment dfinir/modifier des variables de script dans un Tag ?
Auteur : adiGuba Il est possible de dfinir ou de modifier des variables de script via un Tag JSP. Dans l'exemple prcdent, l'interaction entre le Tag et la page JSP se fait en rcuprant la rfrence de l'objet avec un getAttribute(). Afin de permettre l'utilisation d'une variable de script, nous allons crer une classe qui tend TagExtraInfo :
public class IterateTEI extends TagExtraInfo { public VariableInfo[] getVariableInfo(TagData data) { VariableInfo[] info = new VariableInfo[1]; info[0] = new VariableInfo ("line", "java.lang.Integer", true, VariableInfo.NESTED); return info; }

Explication : La mthode getVariableInfo() permet de dfinir des variables de script cre ou modifie par le Tag. Elle retourne un tableau de VariableInfo, qui est constitu de quatre lments : Le nom de la variable de script. Le nom du type de l'objet de la variable. Un boolen indiquant si il s'agit d'une nouvelle variable ou pas (c'est dire si elle doit tre dclar). Enfin, le dernier argument dfinit le bloc dans lequel la variable sera accessible, il peut prendre les valeurs suivantes : VariableInfo.AT_BEGIN : La variable est dfinit au dbut du tag et accessible jusqu' la fin du bloc qui contient le tag. VariableInfo.AT_END : La variable est dfinit la fin du tag et accessible jusqu' la fin du bloc qui contient le tag. VariableInfo.NESTED : La variable est dfinit au dbut du tag et accessible seulement dans le corps du tag.

Attention, le nom de la variable de script doit correspondre un lment dans un des scope (dans l'ordre: page, request, session, application). La variable de script est synchronise avec son quivalent dans le scope, donc il peut y avoir un conflit si le mme nom est utilis dans deux scopes diffrents. Pour pouvoir utiliser cette variable, il faut ajouter la balise <tei-class> dans la dfinition du tag dans le TLD :
<tag> <name>iterate</name> <tagclass>IterateTag</tagclass> <teiclass>IterateTEI</teiclass> <bodycontent>JSP</bodycontent> <attribute> <name>count</name> <required>true</required> </attribute> </tag>

Pour pouvoir utilis le code suivant :

- 50 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

<p:iterate count="3"> Ligne numro <%=line%><br/> </p:iterate>

Rsultat :
Ligne numro 0 Ligne numro 1 Ligne numro 2

Note : La mthode getVariableInfo() possdent un TagData qui permet d'accder aux attributs du tag, afin de pourvoir changer dynamiquement le nom de la scriplet selon un attribut par exemple.

Comment modifier le corps du tag ?


Auteur : adiGuba On peut donc modifier le corps du Tag avant de l'crire dans la page JSP. Par exemple, on va faire un Tag pour empcher une partie de code HTML d'tre interprt par le navigateur (c'est dire en remplaant les caractres < et > par < et >...). On utilisera pour cela la lecture buffris de l'interface BodyTag en hritant de son implmentation BodyTagsupport :
public class HtmlCodeTag extends BodyTagSupport { public int doStartTag() throws JspException { return BodyTag.EVAL_BODY_TAG; } public int doAfterBody() throws JspException { try { String bodyString = getBodyContent().getString(); bodyString = bodyString.replaceAll("<", "<"); bodyString = bodyString.replaceAll(">", ">"); bodyString = bodyString.replaceAll("\t", " "); bodyString = bodyString.replaceAll("\n", "<br/>\n"); getPreviousOut().println(bodyString); } catch (IOException e) { throw new JspException (e); } return SKIP_BODY; }

Dans le TLD :
<tag> <name>htmlCode</name> <tagclass>HtmlCodeTag</tagclass> </tag>

Explication : La mthode doStartTag() retourne BodyTag.EVAL_BODY_TAG afin d'utiliser l'valuation buffris du corps du Tag. Dans la mthode doAfterBody(), on rcupre le corps du tag valu en String. On modifie ensuite cette String pour remplacer les caractres "<", ">", "\t" et "\n" par du code HTML. Puis

- 51 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

on affiche la chane ainsi transform... Note : Avec les JSP 1.2, BodyTag.EVAL_BODY_TAG est dprci et est remplac par BodyTag.EVAL_BODY_BUFFERED. A l'utilisation, cela donne :
<p:htmlcode> <h1>Example HTML</h1> <p> Un paragraphe de texte avec des mots en <b>gras</b>, et d'autres en <i>italique</i>... </p> </p:htmlcode>

Et on obtient :
<h1>Example HTML</h1> <p> Un paragraphe de texte avec des mots en <b>gras</b>, et d'autres en <i>italique</i>... </p>

Le fait de pouvoir modifier le corps du Tag apporte un plus indniable par rapport l'interface Tag ou IterationTag. En effet, on peut facilement modifier le corps AVANT de l'crire sur la page JSP. De ce fait, on peut rellement changer le formatage du corps dans on ensemble...

Comment valider les attributs du tag avec TagExtraInfo ?


Auteur : adiGuba La classe TagExtraInfo permet galement de valider les attributs du tag avant de l'excuter. Il faut pour cela redfinir la mthode isValid() et utiliser le paramtre TagData pour analyser les paramtres. Si isValid() retourne false une exception sera lance.

Comment empcher le compilateur d'interprter le corps du Tag ?


Auteur : adiGuba L'exemple prcdent permet d'afficher du code HTML, mais on peut galement vouloir afficher des scriplets Java ou mme des Tag JSP sans qu'ils ne soient interprt. En effet, le code suivant :
<p:htmlCode> <h1>Example HTML</h1> <p> Code Java <%=new java.util.Date()%> TagLib : <p:hello/> </p> </p:htmlCode>

donnera:
<h1>Example HTML</h1> <p> Code Java Fri Dec 10 17:45:19 CET 2004 TagLib : Hello World ! </p>

Il faut spcifier que le corps du tag n'est pas du code JSP afin qu'il ne soit pas interprt.
- 52 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

Pour cela, on va crer un nouveau Tag htmlJspCode qui utilisera la mme classe que htmlCode, mais en spcifiant que le corps est dpendant du tag (il ne sera pas interprt) :
<tag> <name>htmlJspCode</name> <tagclass>HtmlCodeTag</tagclass> <bodycontent>tagdependent</bodycontent> </tag>

Ainsi le code suivant :


<p:htmlJspCode> <h1>Example HTML</h1> <p> Code Java <%=new java.util.Date()> TagLib : <p:hello/> </p> </p:htmlJspCode>

donnera:
<h1>Example HTML</h1> <p> Code Java <%=new java.util.Date()%> TagLib : <p:hello/> </p>

Ceci peut galement permettre d'insrer d'autre langages de scripts (Perl, Php, Shell Script, etc.) au sein d'une page JSP...

Comment grer les exceptions d'un tag ?


Auteur : adiGuba L'API des taglibs propose une interface TryCatchFinally afin de grer les exceptions gnres par un Tag. Si un tag implmente l'interface TryCatchFinally, il doit implmenter deux nouvelles mthodes : doCatch() qui correspondra au bloc catch. doFinally() qui correspondra au bloc finnaly.

Concrtement, cela signifie que si un tag implmente TryCatchFinally, les appels aux mthodes doXXXX() des interfaces Tag, IterationTag et BodyTag seront excut l'intrieur d'un bloc try/catch de la forme suivante :
try { ... tag.doStartTag(); ... tag.doInitBody(); ... tag.doAfterBody(); ... tag.doEndTag(); ... } catch (Throwable t) { tag.doCatch(t); } finally { tag.doFinally();
- 53 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

Comment crire des tags collaboratifs ?


Auteur : adiGuba Les tags peuvent communiquer simplement avec le tag parent, c'est dire le tag qui englobe le tag courant. Par exemple, dans le code suivant:
<p:iterate count="3"> <p:htmlCode> <p:hello/> </p:htmlCode> <p:htmlJspCode> </p:htmlJspCode> </p:iterate>

Le tag iterate est le parent du tag htmlCode et du tag htmlJspCode. htmlCode est lui mme parent du tag hello... Mais il n'existe aucune parent entre htmlCode et htmlJspCode... La mthode getParent() permet d'accder au tag parent, pour ventuellement interagir avec ce dernier. A Noter galement l'existence de la mthode statique TagSupport.findAncestorWithClass(Tag,Class) qui permet de rechercher un parent selon son type dans la hirarchie des tags..

- 54 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

Sommaire > Frameworks Web Quels sont les types de frameworks Web orients requte existant ?
Auteur : X-plode : Mike Franois Struts WebWork Spring MVC

Quels sont les types de frameworks Web orients composant existant ?


Auteur : X-plode : Mike Franois JSF Wicket

- 55 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

Sommaire > Conteneurs Web et Serveurs d'Application

- 56 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

Sommaire > Conteneurs Web et Serveurs d'Application > Tomcat Comment ajouter le JAR de Jave EE dans Tomcat ?
Auteur : paquerette Si on ajoute j2ee.jar dans le rpertoire WEB-INF/lib d'une application sur Tomcat, il va y avoir un problme de compatibilit entre les Jar de Tomcat (servlet.jar) et celui de Java EE. C'est pourquoi, il faut rajouter ce Jar dans le fichier lib du JDK utilis par Tomcat et le retirer du dossier WEB-INF/lib.

Pourquoi ma page ne s'affiche pas compltement ?


Auteur : ceddup Dans Tomcat, le moteur de rendu (Jasper) effectue le rendu de la page jusqu' ce qu'il trouve une erreur. S'il trouve une erreur, il stoppe le rendu de la page et ajoute une erreur dans les fichiers de log. Il est donc tout fait possible que votre page soit coupe au beau milieu.

Comment grer une connexion JDBC ?


Auteur : christopheJ Il faut que le jar du JDBC soit dans les lib de Tomcat Puis il y a trois tapes : dans le server.xml
<Context path="/Le_Contexte" reloadable="true" debug="0" docBase="Le_DocBase" workDir="Le_workDir"> <Ressource name="jdbc/Le_Contexte" auth="Container" type="javax.sql.DataSource"/> <ResourceParams name="jdbc/Le_Contexte"> <parameter> <name>user</name> <value>Le_Login_SGBD</value> </parameter> <parameter> <name>password</name> <value>Le_Password_SGBD</value> </parameter> <parameter> <name>driverClassName</name> <value>Le_Driver_SGBD</value> </parameter> <parameter> <name>url</name> <value>L_URL_Connection</value> </parameter> </ResourceParams> </Context>

Puis dans le web.xml il faut dclarer la ressource aprs la section <servlet-mapping> :


<resource-ref> <description>reference a la ressource BDD pour le pool</description> <res-ref-name>jdbc/Le_Contexte</res-ref-name> <res-type>javax.sql.DataSource</res-type>
- 57 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

<res-auth>Container</res-auth> </resource-ref>

Enfin dans la mthode init de la servlet, il faut recuprer la source de donnes


try { Context initCtx = new InitialContext(); Context envCtx = (Context) initCtx.lookup("java:comp/env"); ds = (DataSource) envCtx.lookup("jdbc/Le_Contexte"); } catch (Exception e) { //Gestion de l'erreur }

sachant que ds est une variable d'instance de type DataSource. Quand on a besoin de l'accs a la base de donnes, on fait:
Connection conn=ds.getConnection();

ne pas oublier de librer avec un close aprs. On peut aussi prciser dans le serveur xml, le nombre de connection que l'on veut dans le pool (nb max, nb min, nombre en attente) Attention! Bien que cette FAQ mentionne cette possibilit, mettre la balise <context/> dans server.xml est fortement dconseill depuis tomcat 5.0! Prfrez l'utilisation d'un fichier context autonome. Pour en savoir plus sur la gestion d'un pool de connexion sous Tomcat

Comment partager le context entre 2 webapps ?


Auteur : draken Voici un exemple des lignes rajouter dans le fichier conf/server.xml :
<Context path="/webapp1" docBase="webapps/webapp1" crossContext="true" debug="0" reloadable="true"> </Context> <Context path="/webapp2" docBase="webapps/webapp2" crossContext="true" debug="0" reloadable="true"> </Context>

Ne pas oublir d'inclure dans le <Context> l'attribut :


crossContext="true"

Ensuite au niveau de la servlet on accde la seconde webapp de la manire suivante :


ServletContext myContext = this.getServletContext(); ServletContext otherContext = myContext.getContext("/webapp1");

- 58 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

Depuis Tomcat 5.0, bien que ce soit toujours possible, il est dconseill de mettre la balise <context> dans le fichier server.xml. Dans la mesure du possible, il est bien plus prudent de grer des fichiers context autonome.

Comment charger des servlets de l'application au dmarrage de Tomcat ?


Auteur : bahamouth Dans le fichier web.xml du rpertoire WEB-INF lors de la dclaration du servlet, rajouter la ligne:
<load-on-startup>1</load-on-startup>

Exemple:
<servlet> <servlet-name>Controller</servlet-name> <display-name>Controller</display-name> <servlet-class>com.company.Controller</servlet-class> <init-param> <param-name>index</param-name> <param-value>/index.jsp</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>

Comment lire un message d'erreur de Tomcat ?


Auteur : christopheJ Ces messages sont composs de deux parties. Pour dbugger il faut regarder la deuxieme partie qui commence aprs :
root cause

Ou enore le message
cause mere

L'erreur est alors indique sous la forme d'une exception.

Comment crer un compte utilisateur qui a les droits pour manager Tomcat ?
Auteur : X-plode : Mike Franois Afin de pouvoir crer un compte pour pouvoir accder l'interface de gestion du conteneur Web (afin de pouvoir retirer les applications dployes par exemple), il vous suffit d'accder directement ./conf/tomcatusers.xml. De base le fichier se prsente ainsi :
<?xml version='1.0' encoding='utf-8'?> <tomcat-users> </tomcat-users>
- 59 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

La FAQ Java EE

Ds lors, il nous suffit de dclarer le rle manager :


<role rolename="manager"/>

Enfin, nous pouvons ajouter un utilisateur :


<user username="adminTomcat" password="admin" roles="manager"/>

Au final, notre fichier ressemblera ceci :


<?xml version='1.0' encoding='utf-8'?> <tomcat-users> <role rolename="manager"/> <user username="adminTomcat" password="admin" roles="manager"/> </tomcat-users>

Suite a, vous pourrez vous authentifier sous Tomcat afin de pouvoir grer votre conteneur de servlets.

Comment utiliser une librairie DLL implemente par JNI sur un serveur TOMCAT ?
Auteur : v1nc3kr0 Il suffit tout simplement de rajouter l'option suivante :
-Djava.library.path=<chemin vers DLL>

dans la variable d'environnement TOMCAT_OPTS.

- 60 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2013 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://javaweb.developpez.com/faq/javaee/

Vous aimerez peut-être aussi