SlideShare uma empresa Scribd logo
1 de 66
Baixar para ler offline
La FAQ Java EE

                        Date de publication : 17 mai 2003

                     Dernière mise à jour : 22 décembre 2009




Cette faq a été réalisée à partir des questions fréquemment posées sur les
forums de www.developpez.com et de l'expérience 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 prétend pas non plus être complète.
Si vous trouvez une erreur, ou que vous souhaitez nous aider en devenant
rédacteur, 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 - X-
 plode : Mike François - paquerette - ceddup - Baptiste
Wicht - Jack Huser - fabszn - v1nc3kr0 - link256 - zag -
La FAQ Java EE




1. Informations générales (5) ..................................................................................................................................... 4
2. Définitions (14) ....................................................................................................................................................... 6
3. Java EE (3) .......................................................................................................................................................... 12
    3.1. Généralités (3) ............................................................................................................................................. 13
4. Servlets (23) ......................................................................................................................................................... 14
    4.1. Généralités (20) ........................................................................................................................................... 15
    4.2. Session (3) ...................................................................................................................................................30
5. JSP (28) ............................................................................................................................................................... 32
    5.1. Généralités (8) ............................................................................................................................................. 33
    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. Glassfish (0) .................................................................................................................................................57
    7.2. JBoss (0) ......................................................................................................................................................58
    7.3. Weblogic (0) .................................................................................................................................................59
    7.4. JOnAS (0) .................................................................................................................................................... 60
    7.5. Websphere (0) ............................................................................................................................................. 61
    7.6. Conteneurs Web (8) .................................................................................................................................... 62
       7.6.1. Tomcat (8) ............................................................................................................................................63




                                                                       -3-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez
LLC. Aucune reproduction, même 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
intérêts. Cette page est déposée à la SACD.
La FAQ Java EE




 Sommaire > Informations générales
                                               Comment bien utiliser cette faq ?
Auteurs : L'équipe Java ,
 Le but : Cette faq a été conçue pour être la plus simple possible d'utilisation. Elle tente d'apporter des
 réponses simples et complètes aux questions auxquelles sont confrontés tous les débutants (et les autres).
 L'organisation : Les questions sont organisées par thème, les thèmes pouvant eux-même contenir des
 sous-thèmes. Lorsqu'une question porte sur plusieurs thèmes, celle-ci est insérée dans chacun des thèmes
 rendant la recherche plus facile.
 Les réponses : Les réponses contiennent des explications et des codes sources. Certaines sont complétées
 de fichier à télécharger contenant un programme de démonstration. Ces programmes sont volontairement
 très simples afin qu'il soit aisé de localiser le code intéressant. Les réponses peuvent également être
 complétées de liens vers d'autres réponses, vers la documentation en ligne de Sun ou vers un autre site
 en rapport.
 Nouveautés et mises à jour : Lors de l'ajout ou de la modification d'une question/réponse, un indicateur
 est placé à coté du titre de la question. Cet indicateur reste visible pour une durée de 15 jours afin de vous
 permettre de voir rapidement les modifications apportées.
 J'espère que cette faq pourra répondre à vos questions. N'hésitez pas à nous faire part de tous
 commentaires/remarques/critiques.


lien : Comment participer à cette faq?


                                               Comment participer à cette faq ?
Auteurs : L'équipe Java ,
 Cette faq est ouverte à toute collaboration. Pour éviter la multiplication des versions, il serait préférable
 que toutes collaborations soient transmises aux administrateurs de la faq.
 Plusieurs compétences sont actuellement recherchées pour améliorer cette faq :
 Rédacteur : Bien évidemment, toute nouvelle question/réponse 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 débusquez une... Idem pour les liens erronés.


lien : Quels sont les droits de reproduction de cette faq ?


                                Quels sont les droits de reproduction de cette FAQ ?
Auteurs : L'équipe Java ,
 Les codes sources présentés sur cette page sont libres de droits et vous pouvez les utiliser à votre
 convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protégée par les droits
 d'auteurs.




                                                                       -4-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez
LLC. Aucune reproduction, même 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
intérêts. Cette page est déposée à la SACD.
La FAQ Java EE




 Copyright © 2009 Developpez LLC : Tous droits réservés 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 intérêts. Cette page est déposée à la SACD.




                                       Où trouver d'autres sources d'information ?
Auteurs : L'équipe Java ,
 •       Les cours et didacticiels Java Web
 •       Les forums Java de Developpez.com
 •       La FAQ Struts
 •       La FAQ Général Java
 •       La FAQ JDBC
 •       La Javadoc : toutes les informations utiles sur les classes, leurs méthodes ... à toujours avoir
       sous la main.
 •       Les didacticiels de Sun
 •       La FAQ de JGuru, beaucoup plus complète que celle-ci ...




                                                           Remerciements
Auteurs : L'équipe Java ,
 Un grand merci à tous ceux qui ont pris de leur temps pour la réalisation de cette FAQ. C'est à dire :

 •     Aux rédacteurs qui ont rédigé les questions de cette FAQ.
 •     Aux correcteurs qui ont contribué à supprimmer un maximum de fautes de français sur cette FAQ.
 •     Aux visiteurs qui ont visité cette page et qui, par leurs remarques, ont contribué à l'amélioration de
       cette page.




                                                                       -5-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez
LLC. Aucune reproduction, même 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
intérêts. Cette page est déposée à la SACD.
La FAQ Java EE




 Sommaire > Définitions
                                                     Qu'est ce que Java EE?
Auteurs : Stessy ,
 La plateforme Java entreprise (Java EE) est un ensemble de spécifications coordonnées et pratiques qui
 permettent ensemble des solutions pour le développement, le déploiement, et de la gestion des applications
 multitiers centralisées sur un serveur. Construit sur la plateforme de Java 2 édition standard (Java SE),
 la plateforme Java EE ajoute les possibilités nécessaires pour fournir une plateforme complète, stable,
 sécurisée, 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
Auteurs : Stessy ,
 Un composant Entreprise JavaBeans (EJB) est une classe ayant des champs et des méthodes pour mettre
 en application des modules de la logique métier (Business logic). Vous pouvez penser à un entreprise bean
 comme à un module pouvant être employé seul ou avec d'autres entreprise bean pour exécuter la logique
 métier 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 contrôlés par message (Message Driven Bean)

 Les entreprise bean interagissent le plus souvent avec des bases de données.
 Si vous souhaitez en savoir plus sur les EJB, suivez ces liens :


                                                                       -6-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez
LLC. Aucune reproduction, même 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
intérêts. Cette page est déposée à la SACD.
La FAQ Java EE




 •         EJB Home
 •         EJB (J2EE 1.4 tutorial)
 •         EJB Spécifications




                                                       Que sont les Servlet?
Auteurs : Stessy ,
 Techonologie Java utilisée pour effectuer des traitements coté serveur en réponse aux requêtes provenant
 en général de poste clients distants.
 Bien que les servlets puissent répondre à n'importe quel type de requête, elles sont généralement
 employées pour répondre à des requêtes 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 implémentations et spécifications




                                                          Que sont les JSP
Auteurs : Stessy ,
 Les JavaServerPages (JSP) vous permet d'insérer 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 données statiques (qui peuvent être exprimées en n'importe quel format texte tel que le HTML,
       le WML, et le XML)
 •     des éléments de JSP, qui déterminent 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 Spécifications et implémentation




                                                Que sont les connecteurs JCA?
Auteurs : willy78 ,
 Les connecteurs JCA sont des modules qui se déploient sur les serveurs d'application.
 Ils permettent de connecter un serveur JavaEE à un système propriétaire ("legacy system"), et de
 normaliser les accès et interactions avec ce systeme.
 L'api JCA défini un contrat entre le serveur d'application et le systeme, via des interfaces comme le fait jdbc.
 JCA est une généralisation de JDBC.
 JCA 1.0 permet d'envoyer des messages vers le système propriétaire uniquement.




                                                                       -7-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez
LLC. Aucune reproduction, même 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
intérêts. Cette page est déposée à la SACD.
La FAQ Java EE




 JCA 1.5 permet, en plus, de recevoir des messages qui seront traités par un "Message Listener",
 généralement un Message Driven Bean




                                                       Qu'est ce que JAXP?
Auteurs : 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 développeur trois ensembles de fonctionnalités : la
 modélisation, le parsing et la transformation. Elle est composée de quatre packages principaux.

 •     javax.xml.parsers : Ce package contient un ensemble d'interfaces devant être implémentées par
       les différents parseurs (SAX ou DOM). Ce package fournit aussi un ensemble de factory permettant
       l'accès aux parseurs.
 •     org.w3c.dom : Ce package contient l'ensemble des classes et interfaces nécessaires pour travailler
       avec DOM (modélisation).
 •     org.xml.sax : Ce package contient l'ensemble des classes et interfaces nécessaires pour travailler
       avec SAX (parsing).
 •     javax.xml.transform : Ce package contient l'ensemble des classes et interfaces nécessaires pour
       travailler avec XSLT (transformation).

 Attention, JAXP n'est pas limitée à SAX, DOM, XSLT et ces quatre packages. Elle offre bien plus de
 fonctionnalités. 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, même si au départ JAXP fut créée comme une API Java EE, elle est
 désormais intégrée au J2SDK standard.
 Pour plus d'informations sur XML, vous pouvez visiter la rubrique XML de developpez.com :           http://
 xml.developpez.com/ .




                                                    Qu'est ce que JAX-RPC?
Auteurs : vedaer ,
 JAX-RPC (Java API for XML-based Remote Procedure Call) est une API permettant de créer des services
 et clients Web basés XML et RPC .
 RPC (Remote Procedure Calls), ou appels de procédures à distance, est un système permettant à des
 clients d'exécuter des procédures sur des systèmes distants. Ces appels de procédures et les réponses
 retournées se font grâce au protocole HTTP et à SOAP (messages XML).
 Attention ! Aujourd?hui remplacé par JAX-WS.




                                                     Qu'est ce que JAX-WS?
Auteurs : X-plode : Mike François ,
 JAX-WS (Java API for XML Web Services) est la nouvelle appellation de JAX-RPC.
 JAX-WS est une technologie pour des réaliser 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 procédure à distance et non aux services web.

                                                                       -8-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez
LLC. Aucune reproduction, même 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
intérêts. Cette page est déposée à la SACD.
La FAQ Java EE




 De plus l'intégration de JAXB 2.0, pose de nombreux problèmes de compatibilité avec JAX-RPC 1.1.
 C'est ainsi l'occasion pour Sun de repenser, mettre à jour, améliorer et surtout rationaliser cette
 brique logicielle en utilisant les dernières nouveautés du langage lui-même, ainsi que les technologies
 développées en parallèle 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 spécification




                                                       Qu'est ce que JDBC?
Auteurs : vedaer ,
 JDBC est une API (Application Programming Interface) java disponible depuis la version 1.1 du JDK. Pour
 note, JDBC est un nom déposé et non un acronyme, même si en général on lui donne la définition suivante :
 Java DataBase Connectivity .
 Cette API est constituée d'un ensemble d'interfaces et de classes qui permettent l'accès, à partir de
 programmes java, à des données tabulaires (i.e. triées sous forme de table ou de tableur). Par données
 tabulaires, on entends généralement des bases de données contenues dans des SGBD relationnels . Mais,
 JDBC n'est pas restreinte à ce type de source de données. On peux aussi accéder à des sources de données
 sous forme de fichiers (fichiers XML par exemple).




                                                       Qu'est ce que JAAS?
Auteurs : 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 méthodes).
 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 développeurs d'écrire leurs propres modules.
 Une libraire fournissant quelques implémentation, 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?
Auteurs : vedaer ,
 JAXB (Java Architecture for XML Binding) offre les outils et API nécessaires pour "lier" des objets java à
 des documents XML . JAXB utilise des schémas ( W3C XML Schema ) pour faire ce lien. Une fois ce lien
 créé (grâce à un compilateur qui va générer les packages correspondant à un schéma donné), vous pouvez
 facilement sérialiser/desérialiser 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)



                                                                       -9-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez
LLC. Aucune reproduction, même 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
intérêts. Cette page est déposée à la SACD.
La FAQ Java EE




 Pour le moment, JAXB permet juste de partir d'un Schéma XML pour générer les classes correspondantes
 (interfaces à implémenter). JAXB 2.0 devrait palier à cette limitation en permettant de créer des schémas à
 partir de classes Java déjà définies. Pour plus d'informations, regardez la JSR 222 :     http://www.jcp.org/
 en/jsr/detail?id=222




                                                       Qu'est ce que SAAJ ?
Auteurs : vedaer ,
 SAAJ (SOAP with Attachments API for Java) est une API Java permettant l'envoi et la réception de messages
 XML sur le réseau. Ces messages obéissent à la spécification SOAP (Simple Object Access Protocol) 1.1.
 SAAJ est souvent utilisée par des API de plus haut niveau comme JAXR et JAX-RPC. Mais, elle peut tout à
 fait être utilisée de manière indépendante. Pour plus d'informations, vous pouvez suivre ces liens :

 •         SAAJ home
 •         SAAJ (Java EE 5 Tutorial)
 •         SAAJ documentation

 Vous pouvez trouver la spécification de SOAP à cette adresse :                          http://www.w3.org/TR/soap/ .




                                                       Qu'est ce que JAXR?
Auteurs : vedaer ,
 JAXR (Java API for XML Registries) est une API intégrée à Java EE qui permet l'accès à différents types
 de registres XML . Ces registres XML sont une infrastucture permettant la construction, le déploiement et
 la découverte de Web services .
 JAXR permet l'interaction avec plusieurs standards, dont UDDI (Universal Description, Discovery, and
 Integration) et ebXML Registry and Repository standard. Pour connaître les versions supportées de ces
 standards et les différentes implémentations fournisseur disponibles pour JAXR, suivez les liens ci-
 dessous.

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

 Pour note, JAXR est intégré au JWSDP (Java Web Services Developer Pack), mais vous pouvez aussi le
 téléchager séparément (voir liens).




                                               Que sont les Frameworks Web ?
Auteurs : X-plode : Mike François ,
 Un framework Web permet de pouvoir abstraire les problèmes rencontrés au quotidien lors du
 developpement d'une application Web. Tout autant, il permet de pouvoir avoir un design réutilisable pour
 un développement donné.
 Le résultat est un meilleur code, plus lisible et ainsi plus facilement maintenable.



                                                                      - 10 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez
LLC. Aucune reproduction, même 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
intérêts. Cette page est déposée à la SACD.
La FAQ Java EE




 Les Frameworks Web peuvent se distinguent en deux types :

 •     Orienté Requête
 •     Orienté Composant




                                                                      - 11 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez
LLC. Aucune reproduction, même 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
intérêts. Cette page est déposée à la SACD.
La FAQ Java EE




 Sommaire > Java EE




                                                                      - 12 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez
LLC. Aucune reproduction, même 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
intérêts. Cette page est déposée à la SACD.
La FAQ Java EE




 Sommaire > Java EE > Généralités
                 Comment faire pour ne pas afficher l'arborescence de l'application lorque
                   l'utilisateur entre simplement le contexte de l'application dans l'URL?
Auteurs : 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 élément dans le fichier web.xml qui
 s'il existe, sera utilisé par le conteneur comme page par défaut.


     <welcome-file-list>
      <welcome-file>welcome.jsp</welcome-file>
     </welcome-file-list>




                                   Quelles sont les différentes portées existantes ?
Auteurs : Stessy ,
 Les objets créés que ce soit dans les JSP ou les Servlets ont une certaine portée, c'est à dire une certaine
 durée de vie.
 Les différentes portées existantes sont:

 •     page : les objets ne sont accessibles que dans la page où ils sont définis
 •     request : les objest sont accessibles pendant toute la durée de la requête
 •     session : les objets sont accessibles pendant toute la durée de la session
 •     application : les objest sont accessibles pendant toute la durée de vie de l'application et dans
       l'application complète




             Quelles sont les differences entre un serveur web et un serveur d'application?
Auteurs : adiGuba ,
 Un serveur d'application a pour objectif de facilité la création d'application serveur sans se soucier de
 l'aspect réseau (toute la couche réseau est laissée au serveur d'application).
 Un serveur web peut gérer plusieurs sites indépendemment, il peut utiliser plusieurs langages/technologies
 différents (ASP, PHP, JavaEE), gère les transactions sécurisés...
 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 présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez
LLC. Aucune reproduction, même 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
intérêts. Cette page est déposée à la SACD.
La FAQ Java EE




 Sommaire > Servlets




                                                                      - 14 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez
LLC. Aucune reproduction, même 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
intérêts. Cette page est déposée à la SACD.
La FAQ Java EE




 Sommaire > Servlets > Généralités
                             Pourquoi n'y a-t-il pas de constructeur dans une servlet?
Auteurs : Stessy ,
 Une servlet est un peu comme un applet par le fait qu'elle possède une méthode init() qui agit en tant
 que constructeur. Puisque l'environnement de servlet prend soin d'instancier la servlet, un constructeur
 explicite n'est pas nécessaire. N'importe quel code d'initialisation que vous devez utiliser devrait être placé
 dans la méthode init() puisque cette méthode est appelée lorsque le servlet est chargée par le conteneur
 de servlet.




                       Quelle est la différence entre les méthodes doGet() et doPost()?
Auteurs : Stessy ,
 doGet() est appelée à la suite d'une requête de type HTTP GET . Cela se passe généralement lorsqu'un
 utilisateur clique sur un lien ou lorsque celui-ci entre une URL dans la barre d'adresse du navigateur.
 La méthode doPost() est appelée en réponse d'une requête HTTP POST .
 Les 2 méthodes sont appelées à partir de l'implémentation par défaut de la méthode service() se trouvant
 dans la classe de base HttpServlet
 Fondamentalement le navigateur demande toujours des pages par l'intermédiaire de GET et peut envoyer
 des données sous les 2 formes GET et POST . Les 2 seules différences résident dans le fait que :

 •     GET est restreint au niveau de la taille des paramètres envoyés au serveur. Cela veut dire qu'il est, la
       plupart du temps, préférable d'envoyer des données avec la méthode POST .
 •     En envoyant des données par l'intermédiaire de GET évoque également une question concernant la
       sécurité puisqu'elles sont ajoutées à la suite de l'URL. Pour cette raison il est plus prudent d'utiliser
       la méthode POST pour envoyer des données au serveur.




                           Comment gérer les caractères spéciaux dans une servlet ?
Auteurs : X-plode : Mike François , link256 ,
 Les caractères spéciaux sont souvent une cause de problème lors de l'utilisation des servlets.
 Même si nous déclarons (l'UTF-8 par exemple) dans nos pages servlets et jsps, on peut voir apparaître les
 caractères spéciaux non gérer.
 Pour ce faire, il suffit de faire une vérification 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 façon de faire est de configurer l'encodage au niveau du fichier web.xml au moyen d'un Filter :

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



                                                                      - 15 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez
LLC. Aucune reproduction, même 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
intérêts. Cette page est déposée à la SACD.
La FAQ Java EE




     </filter>

     <filter-mapping>
      <filter-name>Character Encoding</filter-name>
      <servlet-name>action</servlet-name>
     </filter-mapping>


 Puis d'implémenter 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 utilisée par un moteur de servlet?
Auteurs : Stessy ,
 L'interface ServletContext inclut les méthodes getMajorVersion() et getMinorVersion() pour vous indiquer
 quelle version de l'API Servlet est utilisée.
 Un petit exemple :


     //Si le moteur de servlet implémente 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 accéder à un JavaBean depuis une servlet?
Auteurs : Stessy ,
 Pour pouvoir partager des variables entre vos pages JSP et vos servlets, vous devez savoir comment créer
 et accéder à ces variables depuis vos servlets.
 Les différents exemples qui vont suivre dépendent de la portée, ou si vous préferez, la durée de vie de
 vos objets.
 Pour en savoir plus sur les différentes portées existantes, reportez vous à la section suivante : Quelles
 sont les différentes portées existantes?

 •       page :

 Dans cet exemple, le Bean est instancié comme une variable locale est n'est donc pas partageable entre
 différentes servlets.


                                                                      - 16 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez
LLC. Aucune reproduction, même 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
intérêts. Cette page est déposée à la SACD.
La FAQ Java EE




     com.developpez.beans.MyBean myBean = new
     com.developpez.beans.MyBean();


 •     request :

 Dans cet exemple, le Bean instancié sera accessible pendant toute la durée de la requête


     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é
Auteurs : Stessy ,
 L'objet ServletConfig est une interface. Cette interface contient les 4 méthodes suivantes

 •     getInitParameter(java.lang.String name) : Cette méthode retourne un String contenant le paramètre
       d'initialisation de la servlet correspondant au paramètre name
 •     getInitParameterNames() : Cette méthode retourne un objet Enumération contenant les paramètres
       d'initialisation de la servlet
 •     getServletContext() : Cette méthode retourne une référence de l'interface ServletContext
       C'est la méthode la plus valable car elle permet de partager l'information à travers l'application




                                                                      - 17 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez
LLC. Aucune reproduction, même 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
intérêts. Cette page est déposée à la SACD.
La FAQ Java EE




 •     getServletName() : Cette méthode retourne un String contenant le nom de l'instance de la servlet




                               Comment modifier le Time Out par défaut de session?
Auteurs : bahamouth ,
 Dans le fichier web.xml situé dans le répertoire 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?
Auteurs : Jaxofun ,
 Il suffit d'accèder à la session voulue et de la modifier comme ceci :

     request.getSession().setMaxInactiveInterval(int);




                             Comment connaître le navigateur utilisé par un utilisateur
Auteurs : Didier ,
 Cette information peut être retrouvée dans le header de la requête:

     String browser = request.getHeader("user-agent");




                  Comment placer et récupérer un paramétre d'initialisation d'une servlet?
Auteurs : Righetto Dominique ,
 Placer la définition <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 récupérer la valeur de MON_PARAM


     getInitParameter("MON_PARAM");




                                                                      - 18 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez
LLC. Aucune reproduction, même 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
intérêts. Cette page est déposée à la SACD.
La FAQ Java EE




 Si vous désirez mettre plus de paramétres, il suffit d'ajouter des déclarations <init-param> comme ceci


     <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 désirez mettre des paramètres de manière globale afin de pouvoir les récupérer 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 récupérer le contexte de la servlet et appeler la méthode
 getInitParameter comme la manière précédente pour récupérer la valeur de Author


     getServletContext().getInitParameter("MON_PARAM");




                       Comment uploader un fichier depuis une applet vers une servlet?
Auteurs : 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();




                                                                      - 19 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez
LLC. Aucune reproduction, même 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
intérêts. Cette page est déposée à la SACD.
La FAQ Java EE




 Coté servlet


     // Récupération du flux entrant
     java.io.DataInputStream dis = new java.io.DataInputStream(request.getInputStream());
     dis.readFully(temp);
     dis.close();

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




                                 Comment télécharger un fichier depuis une servlet?
Auteurs : Stessy ,
 Voici un exemple de code permettant de télécharger 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 {
      //dans mon cas le filepath et le path complet après création
      // d'un temp file
      file = new File(filepath);
      response.setContentLength((int) file.length());
      int bufferSize = 64 * 1024;
      long time = System.currentTimeMillis();

      try {
        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();
      } finally {
        try {
          from.close();
        } catch (Exception e) { }
        try {
          out.close();
        } catch (Exception e) {}
      }
      time = (System.currentTimeMillis() - time) / 1000;
      // seconds download
      double kb = (file.length() * 1.0 / 1024);

      if (file != null) file.delete();
     } catch (Exception e) {
      return;
     } finally {
      try {
       file.delete();
      } catch (Exception ex) {}



                                                                      - 20 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez
LLC. Aucune reproduction, même 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
intérêts. Cette page est déposée à la SACD.
La FAQ Java EE




     }




                                   Comment faire pour gérer des actions à effectuer
                                    lors de la création ou suppression de session ?
Auteurs : Righetto Dominique ,
 En implémentant 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 méthode est appelée lors de la création de
        session */
      public void sessionCreated(HttpSessionEvent hse){
        System.out.println("Une session vient d'être créée");
      }

      /** Cette méthode est appelée lors de la destruction
        de session*/
      public void sessionDestroyed(HttpSessionEvent hse) {
        System.out.println("Une session vient d'être détruite");
      }
     }


 Ensuite, il suffit de référencer 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 gérer des actions à effectuer
                                   lors du démarrage ou de l'arrêt de l'application ?
Auteurs : Righetto Dominique ,
 En implémentant l'interface ServletContextListener comme ceci


     package com.dvp.faq.javaee;

     import javax.servlet.ServletContextListener;
     import javax.servlet.ServletContextEvent;

     public class MyHttpServletContextListener implements ServletContextListener {

      /** Cette méthode appelée lors du démarrage de
       l'application*/
      public void contextInitialized(ServletContextEvent sce) {


                                                                      - 21 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez
LLC. Aucune reproduction, même 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
intérêts. Cette page est déposée à la SACD.
La FAQ Java EE




         System.out.println("L'application vient de démarrer");
      }

      /** Cette méthode appelée 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 référencer 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 récupérer le nom associé au contexte d'une application Web?
Auteurs : SEMPERE Benjamin ,
 A l'aide de l'interface HttpServletRequest


     String contextPath = request.getContextPath();




            Comment faire apparaître 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 données qu'il reçoit. Dans
 le cas d'un fichier PDF par exemple, les données 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 réponse :

     response.setContentType("application/pdf");


 Dans ce cas-là, le navigateur comprendra que le fichier retourné est un fichier PDF et agira en conséquence.

 Il est également possible de modifier le nom du fichier en ajoutant une entête à la réponse :

     response.setHeader("Content-disposition", "filename=monNomDeFichier");




                             Comment accéder à une ressource dans l'arborescence
                                 d'une application web depuis une servlet ?
Auteurs : fabszn ,
 Pour accéder à une ressource depuis une servlet, il faut passer par l'interface ServletContext. Plus
 exactement la methode : getRealPath(String relativePath).

                                                                      - 22 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez
LLC. Aucune reproduction, même 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
intérêts. Cette page est déposée à la SACD.
La FAQ Java EE




 Cette methode recherche depuis la racine de l'application web le fichier passé en paramètre sous forme
 d'un chemin relatif.

 Voici un exemple d'implementation :

 La ressource à laquelle on veut accéder : le fichier de propriété 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("Résultat : "+result);
         writer.flush();
      }
     }


 Remarque : Le chemin relatif déterminé par la variable RELATIVE_PATH_FILE doit être relatif à la racine
 de l'application web

 Le résultat à l'affichage sera :

     Résultat : hello World




                                                                      - 23 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez
LLC. Aucune reproduction, même 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
intérêts. Cette page est déposée à la SACD.
La FAQ Java EE




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




        Comment donner un type MIME standard compréhensible par tous les navigateurs ?
Auteurs : 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 téléchargement du fichier.




                     Comment obtenir une instance de PageContext dans une Servlet ?
Auteurs : adiGuba ,
 Il faut utiliser la classe JspFactory et sa méthode getPageContext() pour créer une nouvelle instance de
 PageContext. Mais attention car tout les PageContext créés de la sorte doivent être libérés par la méthode
 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 réponse 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 {
       // Libération du PageContext
       jspFactoty.releasePageContext(pageContext);
     }




                                        Qu'est ce que le pattern Transfer Object?
Auteurs : request ,
 Le pattern transfer Object précédemment appelé Value Object est une classe implémentant l'interface
 Serializable.
 Ce pattern est essentiellement utilisé pour échanger des données entre une application cliente et des EJB
 de type Entity ( EntityBean ).
 Pourquoi me direz-vous?
 Tout simplement parce que, comme vous le savez, les EntityBean comme tous les EJB sont des objets
 distants, ce qui induit, pour chaque accès à celui-ci, un aller-retour à travers le réseau, avec en plus
 démarrage/validation de transactions.


                                                                      - 24 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez
LLC. Aucune reproduction, même 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
intérêts. Cette page est déposée à la SACD.
La FAQ Java EE




 Par exemple, pour lire un objet Personne avec 5 attributs, il vous faudra 6 allers-retours pour récupérer 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'idée est de fournir un service avec des
 EJB stateless qui vont vous fournir les service qui vous intéressent (Lecture/création/modification/
 suppression ... d'un objet). Cet EJB utilise des Entity en interne pour faire les opérations, et créer des
 classes de transport (avec uniquement les attributs + get/set), cette classe doit implémenter Serializable
 pour pouvoir passer sur RMI/IIOP. C'est cette classe que l'on appelle Transfer Object
 L'avantage de ce modèle, 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 théorique.
 Entity BeanL'interface Local


     package com.societe.monserveur;

     import javax.ejb.EJBLocalObject;

     /**
     * Classe d'accès à une entité.
     * L'accès 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;
     }


 Le Bean


     package com.societe.monserveur;

     import   javax.ejb.CreateException;
     import   javax.ejb.EntityBean;
     import   javax.ejb.EntityContext;
     import   javax.ejb.RemoveException;



                                                                      - 25 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez
LLC. Aucune reproduction, même 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
intérêts. Cette page est déposée à la SACD.
La FAQ Java EE




     /**
     * Implémentation 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


     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



                                                                      - 26 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez
LLC. Aucune reproduction, même 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
intérêts. Cette page est déposée à la SACD.
La FAQ Java EE




     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   javax.ejb.EJBException;
     import   javax.ejb.SessionBean;
     import   javax.ejb.SessionContext;
     import   javax.naming.Context;
     import   javax.naming.InitialContext;
     import   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) {
        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);
       }


                                                                      - 27 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez
LLC. Aucune reproduction, même 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
intérêts. Cette page est déposée à la SACD.
La FAQ Java EE




      }

      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é
      */
      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);
      }



                                                                      - 28 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez
LLC. Aucune reproduction, même 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
intérêts. Cette page est déposée à la SACD.
La FAQ Java EE




      /** Suppression de l'objet dans la base */
      public void delete() throws Exception {
        getFacade().delete(this);
      }

      /**
      * Geter / Seter
      */
      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;
      }

      /**
      * Récupération 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 {
       //Création de toto
       Personne toto = new Personne(new Integer(1), "Toto");
       toto.insert();

         //Modification de toto
         toto.setNom("Titi");
         toto.update();

         //Suppression de toto
         toto.delete();

         //Récupération d'une autre personne
         Personne autre = Personne.findObject(new Integer(99));
      }
     }


 L'avantage avec cette solution (EJB + VO) c'est que l'accès et les régles de gestion sont centralisés sur
 un seul serveur. Si une autre application (back office) ou un autre serveur web, veut accèder à la même
 information, il pourra réutiliser tout cela.




                                                                      - 29 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez
LLC. Aucune reproduction, même 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
intérêts. Cette page est déposée à la SACD.
La FAQ Java EE




 Sommaire > Servlets > Session
                                                Quelle est l'utilité des sessions
Auteurs : 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 requêtes. De ce fait le serveur ne sait pas déterminer si une requête ou une réponse
 provient du même client. C'est pour cela que les applications web utilisent le concept de session. Une
 session représente l'ensemble des intéractions pouvant intervenir entre un client et le serveur




                                               Comment créer un objet session
Auteurs : Stessy ,
 Il existe deux méthodes permettant de créer des sessions :


      HttpSession getSession()


 et


      HttpSession getSession(boolean)


 Voici un petit exemple permettant de comprendre la différence entre ces 2 méthodes


      // Si la session existe, ces 2 méthodes renvoient la
      // session existante, sinon ces 2 méthodes créent une
      // nouvelle session HttpSession session = request.getSession();

      HttpSession session = request.getSession(true)

      // Si la session existe, cette méthode renvoie la
      session existante, sinon la méthode retourne la
      valeur null HttpSession session =
      request.getSession(false);




                                        Comment les session sont-elles gérées ?
Auteurs : Stessy ,
 Il existe 3 moyens de gérer les sessions :

 •      à l'aide de cookies
 •      à l'aide re la réécriture d'URL
 •      à l'aide des sessions SSL en HTTPS

 Cookies
 A chaque session créée, 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 requête permettant ainsi au
 serveur d'identifier le client.
 Voici un petit exemple permettant d'ajouter un cookie dans l'entête de la réponse.


                                                                      - 30 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez
LLC. Aucune reproduction, même 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
intérêts. Cette page est déposée à la SACD.
La FAQ Java EE




      javax.servlet.http.Cookie cookie = new
      javax.servlet.http.Cookie("user","abc123456");
      response.addCookie(cookie);


 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 réécriture d'URL

 Réécriture d'URL
 Par cette technique le serveur ajoute l'dentificateur de session à la fin de chaque URL des pages envoyées
 par celui-ci.
 Mais malheureusement cette technique a un coût car le serveur doit effectuer une opération
 supplémentaire. Celui-ci doit personnifier l'url en y incluant l'identifiant de session.
 2 méthodes existent pour individualiser les URL:


      encodeURL(String)


 et

      encodeRedirectURL(String)


 Ces méthodes réécrivent l'URL uniquement si le client n'accepte pas les cookies. Dans l'autre cas les URL
 resteront inchangées.
 La 2è méthode est utilisée lorsque la servlet utilise la méthode


      sendRedirect(String)


 Exemple :


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


 Les Sessions SSL en HTTPS

 Il nous suffit de récupérer la session courante. A cela près, qu'une session SSL est déterminé par les
 variables d'état suivantes:

 •      Session ID (l'dentifiant de session) :
        une séquence 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) :
        définit les algorithmes de chiffrement et de hachage
 •      MasterSecret :
        c'est un clé de 48 octets partagée 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.




                                                                      - 31 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez
LLC. Aucune reproduction, même 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
intérêts. Cette page est déposée à la SACD.
La FAQ Java EE




 Sommaire > JSP




                                                                      - 32 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez
LLC. Aucune reproduction, même 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
intérêts. Cette page est déposée à la SACD.
La FAQ Java EE




 Sommaire > JSP > Généralités
                   Comment utiliser les EL (Expression Language) dans une page JSP ?
Auteurs : adiGuba ,
 Cela dépend de la version de J2EE que vous utilisez :

 Avec J2EE 1.4, les EL sont directement intégré dans le moteur JSP 2.0. Toutefois l'application doit
 obligatoirement être déclaré 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/web-
     app_2_4.xsd"
      version="2.4">


 Si ce n'est pas le cas les EL seront désactivées afin de ne pas compromettre le fonctionnement d'application
 J2EE postérieur.

 Il est toujours possible de désactiver les EL sur une page particulière en utilisant la directive page :

     <%@ page isELIgnored="false" %>


 Il est également possible d'utiliser les EL avec une version antérieur 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 intègre une gestion des EL. Attention toutefois, ces librairies ne sont pas concus pour être
 utilisées 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 récupérer le code HTML généré par une page JSP ?
Auteurs : zag ,
 Il faut commencer par récupérer un RequestDispatcher qui va servir de wrapper pour la ressource (le fichier
 JSP en l'occurence). Pour récupérer ce dispatcher, il faut passer le contexte de la servlet :

     RequestDispatcher rd = servletContext.getRequestDispatcher(jsp);


 Ensuite, il faut configurer la requête. Pour cela, c'est simple, il faut simplement passer les attributs
 nécessaires à la page avec la méthode setAttributes.

 Après cela, il faut configurer l'objet response. Ici, on est obligé de créer notre propre classe de réponse
 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);


                                                                      - 33 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez
LLC. Aucune reproduction, même 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
intérêts. Cette page est déposée à la SACD.
La FAQ Java EE




         }

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


 Ensuite, on peut récupérer 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 généré par la page JSP.




                              Comment mettre un header et un footer a chaque jsp ?
Auteurs : 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 paramêtres d'une requete ?
Auteurs : 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 ?
Auteurs : 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());



                                                                      - 34 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez
LLC. Aucune reproduction, même 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
intérêts. Cette page est déposée à la SACD.
La FAQ Java EE




      }
     }




                                                Créer sa propre page d'erreur ?
Auteurs : syj ,
 Voici la page d'erreur que l'on utilise. Elle n'est utile qu'en phase de développement.
 Mais elle permet de determiner rapidement les problèmes 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>




                                                                      - 35 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez
LLC. Aucune reproduction, même 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
intérêts. Cette page est déposée à la SACD.
La FAQ Java EE




       <h1>Exception</h1>
       <div>
        <%
         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 ?
Auteurs : 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?
Auteurs : Stessy ,
 Des objets sont dit implicites car il ne nous est pas nécessaire de les déclarer ou de les initialiser
 Les objest le plus souvent utilisés sont:

 •     request : lorsqu'un navigateur envoie une requête vers le serveur, il est possible que celui-ci envoie
       un certain nombre de paramètres.
       Il existe deux sortes de paramètres:
       •     Les paramètres se trouvant dans l'URL comme par exemple http://www.monsite.com/path/de/
             ma/page?param1=valeur1&param2=valeur2
       •     Les paramètres de formulaire: ces dernier sont transmis dans le corps de la requête
 •     response : cet objet contient la réponse envoyée au client. La portée de cette instance est la page
 •     out : peut être employé dans les scriptlets pour écrire des données dans la page qui sera envoyée
       au client. La portée de cette instance est la page



                                                                      - 36 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez
LLC. Aucune reproduction, même 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
intérêts. Cette page est déposée à la SACD.
La FAQ Java EE




 •     session : cet objet contient, comme son nom l'indique, tous les objets relatif à la session




                                                                      - 37 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez
LLC. Aucune reproduction, même 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
intérêts. Cette page est déposée à la SACD.
La FAQ Java EE




 Sommaire > JSP > JSTL (Java Standard Tag Library)
                                            Quels sont les objectifs de la JSTL?
Auteurs : 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 présentation d'une application web Java EE.
 En effet, un web designer peut avoir des problèmes pour la conception de pages JSP du fait qu'il est
 confronté à un langage de script complexe qu'il ne maîtrise pas forcément.
 La JSTL permet de développez des pages JSP en utilisant des balises XML, donc avec une syntaxe proche
 des langages utilisés par les web designers, et leurs permet donc de concevoir des pages dynamiques
 complexes sans connaissances du langage Java.
 Sun à donc proposer une spécification pour une librairie de tags standard : la Java Standard Tag Library
 (JSTL). C'est à dire qu'il spécifie les bases de cette librairie, mais qu'il laisse l'implémentation libre (de la
 même manière que pour les serveur Java EE qui son des implémentations de la spécification Java EE).




                                                                      - 38 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez
LLC. Aucune reproduction, même 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
intérêts. Cette page est déposée à la SACD.
La FAQ Java EE




 Sommaire > JSP > JSTL (Java Standard Tag Library) > Librairie de base
                                             Comment afficher une expression?
Auteurs : 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.


     <!-- Même 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 présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez
LLC. Aucune reproduction, même 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
intérêts. Cette page est déposée à la SACD.
Faqjavaee (1)
Faqjavaee (1)
Faqjavaee (1)
Faqjavaee (1)
Faqjavaee (1)
Faqjavaee (1)
Faqjavaee (1)
Faqjavaee (1)
Faqjavaee (1)
Faqjavaee (1)
Faqjavaee (1)
Faqjavaee (1)
Faqjavaee (1)
Faqjavaee (1)
Faqjavaee (1)
Faqjavaee (1)
Faqjavaee (1)
Faqjavaee (1)
Faqjavaee (1)
Faqjavaee (1)
Faqjavaee (1)
Faqjavaee (1)
Faqjavaee (1)
Faqjavaee (1)
Faqjavaee (1)
Faqjavaee (1)
Faqjavaee (1)

Mais conteúdo relacionado

Destaque

Habilidades digitales
Habilidades digitalesHabilidades digitales
Habilidades digitalesAlfredo Ivan
 
Proteinas para la salud
Proteinas para la saludProteinas para la salud
Proteinas para la saludYadirithap
 
Análisis táctio del San Roque de Lepe
Análisis táctio del San Roque de LepeAnálisis táctio del San Roque de Lepe
Análisis táctio del San Roque de Lepejosmirver
 
La corrupcoin en el Peru
La corrupcoin en el Peru La corrupcoin en el Peru
La corrupcoin en el Peru Akemi Ogata
 
Camtasia studio
Camtasia studioCamtasia studio
Camtasia studioDiegomez92
 
Trabajo de computacion (2)
Trabajo de computacion (2)Trabajo de computacion (2)
Trabajo de computacion (2)Link Glenton
 
Problema dinámicos
Problema dinámicosProblema dinámicos
Problema dinámicosdleona2013
 
Puertos y conectores del pc
Puertos y conectores del pcPuertos y conectores del pc
Puertos y conectores del pcFede Ferraro
 
Definiciones geografia paul
Definiciones geografia paulDefiniciones geografia paul
Definiciones geografia paulPaul Perez
 
Instalacion y configuracion de un curso en linea(2)
Instalacion y configuracion de un curso en linea(2)Instalacion y configuracion de un curso en linea(2)
Instalacion y configuracion de un curso en linea(2)Mónica Sánchez Crisostomo
 
Si nos informamos es mejor
Si nos informamos es mejorSi nos informamos es mejor
Si nos informamos es mejorSilvia Ruiz
 
Actividad 1 stephanie fallas navarro
Actividad 1 stephanie fallas navarroActividad 1 stephanie fallas navarro
Actividad 1 stephanie fallas navarroStephanieFallas
 

Destaque (20)

Habilidades digitales
Habilidades digitalesHabilidades digitales
Habilidades digitales
 
La ludoteca, què és ?
La ludoteca, què és ?La ludoteca, què és ?
La ludoteca, què és ?
 
Geotec inventario
Geotec   inventarioGeotec   inventario
Geotec inventario
 
Proteinas para la salud
Proteinas para la saludProteinas para la salud
Proteinas para la salud
 
Jesús torres
Jesús torresJesús torres
Jesús torres
 
Análisis táctio del San Roque de Lepe
Análisis táctio del San Roque de LepeAnálisis táctio del San Roque de Lepe
Análisis táctio del San Roque de Lepe
 
La corrupcoin en el Peru
La corrupcoin en el Peru La corrupcoin en el Peru
La corrupcoin en el Peru
 
Camtasia studio
Camtasia studioCamtasia studio
Camtasia studio
 
Manual de excel
Manual de excelManual de excel
Manual de excel
 
Trabajo de computacion (2)
Trabajo de computacion (2)Trabajo de computacion (2)
Trabajo de computacion (2)
 
Problema dinámicos
Problema dinámicosProblema dinámicos
Problema dinámicos
 
Puertos y conectores del pc
Puertos y conectores del pcPuertos y conectores del pc
Puertos y conectores del pc
 
Definiciones geografia paul
Definiciones geografia paulDefiniciones geografia paul
Definiciones geografia paul
 
Trabajo número 2
Trabajo número 2Trabajo número 2
Trabajo número 2
 
NETIQUETA
NETIQUETANETIQUETA
NETIQUETA
 
ALEXIS JAVIER SANCHEZ
ALEXIS JAVIER SANCHEZALEXIS JAVIER SANCHEZ
ALEXIS JAVIER SANCHEZ
 
Instalacion y configuracion de un curso en linea(2)
Instalacion y configuracion de un curso en linea(2)Instalacion y configuracion de un curso en linea(2)
Instalacion y configuracion de un curso en linea(2)
 
Innovacion liderazgo1
Innovacion liderazgo1Innovacion liderazgo1
Innovacion liderazgo1
 
Si nos informamos es mejor
Si nos informamos es mejorSi nos informamos es mejor
Si nos informamos es mejor
 
Actividad 1 stephanie fallas navarro
Actividad 1 stephanie fallas navarroActividad 1 stephanie fallas navarro
Actividad 1 stephanie fallas navarro
 

Semelhante a Faqjavaee (1)

Ruby on Rails - Part 1
Ruby on Rails - Part 1Ruby on Rails - Part 1
Ruby on Rails - Part 1Hugo DG
 
The JCP and Adopt-a-JSR programs en français
The JCP and Adopt-a-JSR programs en françaisThe JCP and Adopt-a-JSR programs en français
The JCP and Adopt-a-JSR programs en françaisHeather VanCura
 
OBJIS Congo présente 10 reperes cle du developpeur java
OBJIS Congo présente 10 reperes cle du developpeur javaOBJIS Congo présente 10 reperes cle du developpeur java
OBJIS Congo présente 10 reperes cle du developpeur javaDouglas MBIANDOU
 
Présentation de JEE et de son écosysteme
Présentation de JEE et de son écosystemePrésentation de JEE et de son écosysteme
Présentation de JEE et de son écosystemeStéphane Traumat
 
Telecharger Cours java pour debutant pdf
Telecharger Cours java pour debutant pdfTelecharger Cours java pour debutant pdf
Telecharger Cours java pour debutant pdfwebreaker
 
Fête de l'internet d'Antibes 2011 - Recherche sur Internet
Fête de l'internet d'Antibes 2011 - Recherche sur InternetFête de l'internet d'Antibes 2011 - Recherche sur Internet
Fête de l'internet d'Antibes 2011 - Recherche sur InternetNeil Armstrong
 
Webserver tomcat-jboss-jrun-jonas doc
Webserver tomcat-jboss-jrun-jonas docWebserver tomcat-jboss-jrun-jonas doc
Webserver tomcat-jboss-jrun-jonas docWinslo Nwan
 
Lbv Dev Meetup #2
 Lbv Dev Meetup #2 Lbv Dev Meetup #2
Lbv Dev Meetup #2LbvDev
 
Java - JEE - servlets
Java - JEE - servletsJava - JEE - servlets
Java - JEE - servletsNoël
 
Lescoulissesdunecyberquete
LescoulissesdunecyberqueteLescoulissesdunecyberquete
Lescoulissesdunecyberquetearmu
 
Utiliser Le MultiméDia Dans Un Projet Danimation
Utiliser Le MultiméDia Dans Un Projet DanimationUtiliser Le MultiméDia Dans Un Projet Danimation
Utiliser Le MultiméDia Dans Un Projet DanimationBibliothèques Brest
 
Microsoft Project Support de cours
Microsoft Project Support de coursMicrosoft Project Support de cours
Microsoft Project Support de cours📡 Vincent Isoz
 
20080513 - Paris Jug - Maven à La Demande
20080513 - Paris Jug - Maven à La Demande20080513 - Paris Jug - Maven à La Demande
20080513 - Paris Jug - Maven à La DemandeArnaud Héritier
 
Atelier pratique : CR CMS - Webassoc 14 avril 2015
Atelier pratique : CR CMS - Webassoc 14 avril 2015Atelier pratique : CR CMS - Webassoc 14 avril 2015
Atelier pratique : CR CMS - Webassoc 14 avril 2015webassoc .fr
 

Semelhante a Faqjavaee (1) (20)

Le framework-executor
Le framework-executorLe framework-executor
Le framework-executor
 
Ruby on Rails - Part 1
Ruby on Rails - Part 1Ruby on Rails - Part 1
Ruby on Rails - Part 1
 
The JCP and Adopt-a-JSR programs en français
The JCP and Adopt-a-JSR programs en françaisThe JCP and Adopt-a-JSR programs en français
The JCP and Adopt-a-JSR programs en français
 
OBJIS Congo présente 10 reperes cle du developpeur java
OBJIS Congo présente 10 reperes cle du developpeur javaOBJIS Congo présente 10 reperes cle du developpeur java
OBJIS Congo présente 10 reperes cle du developpeur java
 
Présentation de JEE et de son écosysteme
Présentation de JEE et de son écosystemePrésentation de JEE et de son écosysteme
Présentation de JEE et de son écosysteme
 
Telecharger Cours java pour debutant pdf
Telecharger Cours java pour debutant pdfTelecharger Cours java pour debutant pdf
Telecharger Cours java pour debutant pdf
 
Fête de l'internet d'Antibes 2011 - Recherche sur Internet
Fête de l'internet d'Antibes 2011 - Recherche sur InternetFête de l'internet d'Antibes 2011 - Recherche sur Internet
Fête de l'internet d'Antibes 2011 - Recherche sur Internet
 
Webserver tomcat-jboss-jrun-jonas doc
Webserver tomcat-jboss-jrun-jonas docWebserver tomcat-jboss-jrun-jonas doc
Webserver tomcat-jboss-jrun-jonas doc
 
Lbv Dev Meetup #2
 Lbv Dev Meetup #2 Lbv Dev Meetup #2
Lbv Dev Meetup #2
 
Java - JEE - servlets
Java - JEE - servletsJava - JEE - servlets
Java - JEE - servlets
 
Rapport tp1 j2ee
Rapport tp1 j2eeRapport tp1 j2ee
Rapport tp1 j2ee
 
Doc app cracker
Doc app crackerDoc app cracker
Doc app cracker
 
Lescoulissesdunecyberquete
LescoulissesdunecyberqueteLescoulissesdunecyberquete
Lescoulissesdunecyberquete
 
Javaoop
JavaoopJavaoop
Javaoop
 
Utiliser Le MultiméDia Dans Un Projet Danimation
Utiliser Le MultiméDia Dans Un Projet DanimationUtiliser Le MultiméDia Dans Un Projet Danimation
Utiliser Le MultiméDia Dans Un Projet Danimation
 
Microsoft Project Support de cours
Microsoft Project Support de coursMicrosoft Project Support de cours
Microsoft Project Support de cours
 
Les tests-unitaires-en-java
Les tests-unitaires-en-javaLes tests-unitaires-en-java
Les tests-unitaires-en-java
 
20080513 - Paris Jug - Maven à La Demande
20080513 - Paris Jug - Maven à La Demande20080513 - Paris Jug - Maven à La Demande
20080513 - Paris Jug - Maven à La Demande
 
Tutoriel java
Tutoriel javaTutoriel java
Tutoriel java
 
Atelier pratique : CR CMS - Webassoc 14 avril 2015
Atelier pratique : CR CMS - Webassoc 14 avril 2015Atelier pratique : CR CMS - Webassoc 14 avril 2015
Atelier pratique : CR CMS - Webassoc 14 avril 2015
 

Faqjavaee (1)

  • 1. La FAQ Java EE Date de publication : 17 mai 2003 Dernière mise à jour : 22 décembre 2009 Cette faq a été réalisée à partir des questions fréquemment posées sur les forums de www.developpez.com et de l'expérience 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 prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez nous aider en devenant rédacteur, lisez ceci. Sur ce, nous vous souhaitons une bonne lecture. L'équipe Java
  • 2. 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 - X- plode : Mike François - paquerette - ceddup - Baptiste Wicht - Jack Huser - fabszn - v1nc3kr0 - link256 - zag -
  • 3. La FAQ Java EE 1. Informations générales (5) ..................................................................................................................................... 4 2. Définitions (14) ....................................................................................................................................................... 6 3. Java EE (3) .......................................................................................................................................................... 12 3.1. Généralités (3) ............................................................................................................................................. 13 4. Servlets (23) ......................................................................................................................................................... 14 4.1. Généralités (20) ........................................................................................................................................... 15 4.2. Session (3) ...................................................................................................................................................30 5. JSP (28) ............................................................................................................................................................... 32 5.1. Généralités (8) ............................................................................................................................................. 33 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. Glassfish (0) .................................................................................................................................................57 7.2. JBoss (0) ......................................................................................................................................................58 7.3. Weblogic (0) .................................................................................................................................................59 7.4. JOnAS (0) .................................................................................................................................................... 60 7.5. Websphere (0) ............................................................................................................................................. 61 7.6. Conteneurs Web (8) .................................................................................................................................... 62 7.6.1. Tomcat (8) ............................................................................................................................................63 -3- Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts. Cette page est déposée à la SACD.
  • 4. La FAQ Java EE Sommaire > Informations générales Comment bien utiliser cette faq ? Auteurs : L'équipe Java , Le but : Cette faq a été conçue pour être la plus simple possible d'utilisation. Elle tente d'apporter des réponses simples et complètes aux questions auxquelles sont confrontés tous les débutants (et les autres). L'organisation : Les questions sont organisées par thème, les thèmes pouvant eux-même contenir des sous-thèmes. Lorsqu'une question porte sur plusieurs thèmes, celle-ci est insérée dans chacun des thèmes rendant la recherche plus facile. Les réponses : Les réponses contiennent des explications et des codes sources. Certaines sont complétées de fichier à télécharger contenant un programme de démonstration. Ces programmes sont volontairement très simples afin qu'il soit aisé de localiser le code intéressant. Les réponses peuvent également être complétées de liens vers d'autres réponses, vers la documentation en ligne de Sun ou vers un autre site en rapport. Nouveautés et mises à jour : Lors de l'ajout ou de la modification d'une question/réponse, un indicateur est placé à coté du titre de la question. Cet indicateur reste visible pour une durée de 15 jours afin de vous permettre de voir rapidement les modifications apportées. J'espère que cette faq pourra répondre à vos questions. N'hésitez pas à nous faire part de tous commentaires/remarques/critiques. lien : Comment participer à cette faq? Comment participer à cette faq ? Auteurs : L'équipe Java , Cette faq est ouverte à toute collaboration. Pour éviter la multiplication des versions, il serait préférable que toutes collaborations soient transmises aux administrateurs de la faq. Plusieurs compétences sont actuellement recherchées pour améliorer cette faq : Rédacteur : Bien évidemment, toute nouvelle question/réponse 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 débusquez une... Idem pour les liens erronés. lien : Quels sont les droits de reproduction de cette faq ? Quels sont les droits de reproduction de cette FAQ ? Auteurs : L'équipe Java , Les codes sources présentés sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protégée par les droits d'auteurs. -4- Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts. Cette page est déposée à la SACD.
  • 5. La FAQ Java EE Copyright © 2009 Developpez LLC : Tous droits réservés 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 intérêts. Cette page est déposée à la SACD. Où trouver d'autres sources d'information ? Auteurs : L'équipe Java , • Les cours et didacticiels Java Web • Les forums Java de Developpez.com • La FAQ Struts • La FAQ Général Java • La FAQ JDBC • La Javadoc : toutes les informations utiles sur les classes, leurs méthodes ... à toujours avoir sous la main. • Les didacticiels de Sun • La FAQ de JGuru, beaucoup plus complète que celle-ci ... Remerciements Auteurs : L'équipe Java , Un grand merci à tous ceux qui ont pris de leur temps pour la réalisation de cette FAQ. C'est à dire : • Aux rédacteurs qui ont rédigé les questions de cette FAQ. • Aux correcteurs qui ont contribué à supprimmer un maximum de fautes de français sur cette FAQ. • Aux visiteurs qui ont visité cette page et qui, par leurs remarques, ont contribué à l'amélioration de cette page. -5- Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts. Cette page est déposée à la SACD.
  • 6. La FAQ Java EE Sommaire > Définitions Qu'est ce que Java EE? Auteurs : Stessy , La plateforme Java entreprise (Java EE) est un ensemble de spécifications coordonnées et pratiques qui permettent ensemble des solutions pour le développement, le déploiement, et de la gestion des applications multitiers centralisées sur un serveur. Construit sur la plateforme de Java 2 édition standard (Java SE), la plateforme Java EE ajoute les possibilités nécessaires pour fournir une plateforme complète, stable, sécurisée, 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 Auteurs : Stessy , Un composant Entreprise JavaBeans (EJB) est une classe ayant des champs et des méthodes pour mettre en application des modules de la logique métier (Business logic). Vous pouvez penser à un entreprise bean comme à un module pouvant être employé seul ou avec d'autres entreprise bean pour exécuter la logique métier 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 contrôlés par message (Message Driven Bean) Les entreprise bean interagissent le plus souvent avec des bases de données. Si vous souhaitez en savoir plus sur les EJB, suivez ces liens : -6- Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts. Cette page est déposée à la SACD.
  • 7. La FAQ Java EE • EJB Home • EJB (J2EE 1.4 tutorial) • EJB Spécifications Que sont les Servlet? Auteurs : Stessy , Techonologie Java utilisée pour effectuer des traitements coté serveur en réponse aux requêtes provenant en général de poste clients distants. Bien que les servlets puissent répondre à n'importe quel type de requête, elles sont généralement employées pour répondre à des requêtes 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 implémentations et spécifications Que sont les JSP Auteurs : Stessy , Les JavaServerPages (JSP) vous permet d'insérer 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 données statiques (qui peuvent être exprimées en n'importe quel format texte tel que le HTML, le WML, et le XML) • des éléments de JSP, qui déterminent 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 Spécifications et implémentation Que sont les connecteurs JCA? Auteurs : willy78 , Les connecteurs JCA sont des modules qui se déploient sur les serveurs d'application. Ils permettent de connecter un serveur JavaEE à un système propriétaire ("legacy system"), et de normaliser les accès et interactions avec ce systeme. L'api JCA défini un contrat entre le serveur d'application et le systeme, via des interfaces comme le fait jdbc. JCA est une généralisation de JDBC. JCA 1.0 permet d'envoyer des messages vers le système propriétaire uniquement. -7- Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts. Cette page est déposée à la SACD.
  • 8. La FAQ Java EE JCA 1.5 permet, en plus, de recevoir des messages qui seront traités par un "Message Listener", généralement un Message Driven Bean Qu'est ce que JAXP? Auteurs : 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 développeur trois ensembles de fonctionnalités : la modélisation, le parsing et la transformation. Elle est composée de quatre packages principaux. • javax.xml.parsers : Ce package contient un ensemble d'interfaces devant être implémentées par les différents parseurs (SAX ou DOM). Ce package fournit aussi un ensemble de factory permettant l'accès aux parseurs. • org.w3c.dom : Ce package contient l'ensemble des classes et interfaces nécessaires pour travailler avec DOM (modélisation). • org.xml.sax : Ce package contient l'ensemble des classes et interfaces nécessaires pour travailler avec SAX (parsing). • javax.xml.transform : Ce package contient l'ensemble des classes et interfaces nécessaires pour travailler avec XSLT (transformation). Attention, JAXP n'est pas limitée à SAX, DOM, XSLT et ces quatre packages. Elle offre bien plus de fonctionnalités. 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, même si au départ JAXP fut créée comme une API Java EE, elle est désormais intégrée au J2SDK standard. Pour plus d'informations sur XML, vous pouvez visiter la rubrique XML de developpez.com : http:// xml.developpez.com/ . Qu'est ce que JAX-RPC? Auteurs : vedaer , JAX-RPC (Java API for XML-based Remote Procedure Call) est une API permettant de créer des services et clients Web basés XML et RPC . RPC (Remote Procedure Calls), ou appels de procédures à distance, est un système permettant à des clients d'exécuter des procédures sur des systèmes distants. Ces appels de procédures et les réponses retournées se font grâce au protocole HTTP et à SOAP (messages XML). Attention ! Aujourd?hui remplacé par JAX-WS. Qu'est ce que JAX-WS? Auteurs : X-plode : Mike François , JAX-WS (Java API for XML Web Services) est la nouvelle appellation de JAX-RPC. JAX-WS est une technologie pour des réaliser 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 procédure à distance et non aux services web. -8- Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts. Cette page est déposée à la SACD.
  • 9. La FAQ Java EE De plus l'intégration de JAXB 2.0, pose de nombreux problèmes de compatibilité avec JAX-RPC 1.1. C'est ainsi l'occasion pour Sun de repenser, mettre à jour, améliorer et surtout rationaliser cette brique logicielle en utilisant les dernières nouveautés du langage lui-même, ainsi que les technologies développées en parallèle 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 spécification Qu'est ce que JDBC? Auteurs : vedaer , JDBC est une API (Application Programming Interface) java disponible depuis la version 1.1 du JDK. Pour note, JDBC est un nom déposé et non un acronyme, même si en général on lui donne la définition suivante : Java DataBase Connectivity . Cette API est constituée d'un ensemble d'interfaces et de classes qui permettent l'accès, à partir de programmes java, à des données tabulaires (i.e. triées sous forme de table ou de tableur). Par données tabulaires, on entends généralement des bases de données contenues dans des SGBD relationnels . Mais, JDBC n'est pas restreinte à ce type de source de données. On peux aussi accéder à des sources de données sous forme de fichiers (fichiers XML par exemple). Qu'est ce que JAAS? Auteurs : 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 méthodes). 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 développeurs d'écrire leurs propres modules. Une libraire fournissant quelques implémentation, 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? Auteurs : vedaer , JAXB (Java Architecture for XML Binding) offre les outils et API nécessaires pour "lier" des objets java à des documents XML . JAXB utilise des schémas ( W3C XML Schema ) pour faire ce lien. Une fois ce lien créé (grâce à un compilateur qui va générer les packages correspondant à un schéma donné), vous pouvez facilement sérialiser/desérialiser 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) -9- Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts. Cette page est déposée à la SACD.
  • 10. La FAQ Java EE Pour le moment, JAXB permet juste de partir d'un Schéma XML pour générer les classes correspondantes (interfaces à implémenter). JAXB 2.0 devrait palier à cette limitation en permettant de créer des schémas à partir de classes Java déjà définies. Pour plus d'informations, regardez la JSR 222 : http://www.jcp.org/ en/jsr/detail?id=222 Qu'est ce que SAAJ ? Auteurs : vedaer , SAAJ (SOAP with Attachments API for Java) est une API Java permettant l'envoi et la réception de messages XML sur le réseau. Ces messages obéissent à la spécification SOAP (Simple Object Access Protocol) 1.1. SAAJ est souvent utilisée par des API de plus haut niveau comme JAXR et JAX-RPC. Mais, elle peut tout à fait être utilisée de manière indépendante. Pour plus d'informations, vous pouvez suivre ces liens : • SAAJ home • SAAJ (Java EE 5 Tutorial) • SAAJ documentation Vous pouvez trouver la spécification de SOAP à cette adresse : http://www.w3.org/TR/soap/ . Qu'est ce que JAXR? Auteurs : vedaer , JAXR (Java API for XML Registries) est une API intégrée à Java EE qui permet l'accès à différents types de registres XML . Ces registres XML sont une infrastucture permettant la construction, le déploiement et la découverte de Web services . JAXR permet l'interaction avec plusieurs standards, dont UDDI (Universal Description, Discovery, and Integration) et ebXML Registry and Repository standard. Pour connaître les versions supportées de ces standards et les différentes implémentations fournisseur disponibles pour JAXR, suivez les liens ci- dessous. • Java API for XML Registries (JAXR) • JAXR (Chap. 10 du Java EE Tutorial) • XML Downloads & Specifications • Java Technology & Web Services Pour note, JAXR est intégré au JWSDP (Java Web Services Developer Pack), mais vous pouvez aussi le téléchager séparément (voir liens). Que sont les Frameworks Web ? Auteurs : X-plode : Mike François , Un framework Web permet de pouvoir abstraire les problèmes rencontrés au quotidien lors du developpement d'une application Web. Tout autant, il permet de pouvoir avoir un design réutilisable pour un développement donné. Le résultat est un meilleur code, plus lisible et ainsi plus facilement maintenable. - 10 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts. Cette page est déposée à la SACD.
  • 11. La FAQ Java EE Les Frameworks Web peuvent se distinguent en deux types : • Orienté Requête • Orienté Composant - 11 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts. Cette page est déposée à la SACD.
  • 12. La FAQ Java EE Sommaire > Java EE - 12 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts. Cette page est déposée à la SACD.
  • 13. La FAQ Java EE Sommaire > Java EE > Généralités Comment faire pour ne pas afficher l'arborescence de l'application lorque l'utilisateur entre simplement le contexte de l'application dans l'URL? Auteurs : 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 élément dans le fichier web.xml qui s'il existe, sera utilisé par le conteneur comme page par défaut. <welcome-file-list> <welcome-file>welcome.jsp</welcome-file> </welcome-file-list> Quelles sont les différentes portées existantes ? Auteurs : Stessy , Les objets créés que ce soit dans les JSP ou les Servlets ont une certaine portée, c'est à dire une certaine durée de vie. Les différentes portées existantes sont: • page : les objets ne sont accessibles que dans la page où ils sont définis • request : les objest sont accessibles pendant toute la durée de la requête • session : les objets sont accessibles pendant toute la durée de la session • application : les objest sont accessibles pendant toute la durée de vie de l'application et dans l'application complète Quelles sont les differences entre un serveur web et un serveur d'application? Auteurs : adiGuba , Un serveur d'application a pour objectif de facilité la création d'application serveur sans se soucier de l'aspect réseau (toute la couche réseau est laissée au serveur d'application). Un serveur web peut gérer plusieurs sites indépendemment, il peut utiliser plusieurs langages/technologies différents (ASP, PHP, JavaEE), gère les transactions sécurisés... 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 présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts. Cette page est déposée à la SACD.
  • 14. La FAQ Java EE Sommaire > Servlets - 14 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts. Cette page est déposée à la SACD.
  • 15. La FAQ Java EE Sommaire > Servlets > Généralités Pourquoi n'y a-t-il pas de constructeur dans une servlet? Auteurs : Stessy , Une servlet est un peu comme un applet par le fait qu'elle possède une méthode init() qui agit en tant que constructeur. Puisque l'environnement de servlet prend soin d'instancier la servlet, un constructeur explicite n'est pas nécessaire. N'importe quel code d'initialisation que vous devez utiliser devrait être placé dans la méthode init() puisque cette méthode est appelée lorsque le servlet est chargée par le conteneur de servlet. Quelle est la différence entre les méthodes doGet() et doPost()? Auteurs : Stessy , doGet() est appelée à la suite d'une requête de type HTTP GET . Cela se passe généralement lorsqu'un utilisateur clique sur un lien ou lorsque celui-ci entre une URL dans la barre d'adresse du navigateur. La méthode doPost() est appelée en réponse d'une requête HTTP POST . Les 2 méthodes sont appelées à partir de l'implémentation par défaut de la méthode service() se trouvant dans la classe de base HttpServlet Fondamentalement le navigateur demande toujours des pages par l'intermédiaire de GET et peut envoyer des données sous les 2 formes GET et POST . Les 2 seules différences résident dans le fait que : • GET est restreint au niveau de la taille des paramètres envoyés au serveur. Cela veut dire qu'il est, la plupart du temps, préférable d'envoyer des données avec la méthode POST . • En envoyant des données par l'intermédiaire de GET évoque également une question concernant la sécurité puisqu'elles sont ajoutées à la suite de l'URL. Pour cette raison il est plus prudent d'utiliser la méthode POST pour envoyer des données au serveur. Comment gérer les caractères spéciaux dans une servlet ? Auteurs : X-plode : Mike François , link256 , Les caractères spéciaux sont souvent une cause de problème lors de l'utilisation des servlets. Même si nous déclarons (l'UTF-8 par exemple) dans nos pages servlets et jsps, on peut voir apparaître les caractères spéciaux non gérer. Pour ce faire, il suffit de faire une vérification 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 façon de faire est de configurer l'encodage au niveau du fichier web.xml au moyen d'un Filter : <filter> <filter-name>Character Encoding</filter-name> <filter-class>chemin.de.ton.package.CharsetFilter</filter-class> - 15 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts. Cette page est déposée à la SACD.
  • 16. La FAQ Java EE </filter> <filter-mapping> <filter-name>Character Encoding</filter-name> <servlet-name>action</servlet-name> </filter-mapping> Puis d'implémenter 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 utilisée par un moteur de servlet? Auteurs : Stessy , L'interface ServletContext inclut les méthodes getMajorVersion() et getMinorVersion() pour vous indiquer quelle version de l'API Servlet est utilisée. Un petit exemple : //Si le moteur de servlet implémente 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 accéder à un JavaBean depuis une servlet? Auteurs : Stessy , Pour pouvoir partager des variables entre vos pages JSP et vos servlets, vous devez savoir comment créer et accéder à ces variables depuis vos servlets. Les différents exemples qui vont suivre dépendent de la portée, ou si vous préferez, la durée de vie de vos objets. Pour en savoir plus sur les différentes portées existantes, reportez vous à la section suivante : Quelles sont les différentes portées existantes? • page : Dans cet exemple, le Bean est instancié comme une variable locale est n'est donc pas partageable entre différentes servlets. - 16 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts. Cette page est déposée à la SACD.
  • 17. La FAQ Java EE com.developpez.beans.MyBean myBean = new com.developpez.beans.MyBean(); • request : Dans cet exemple, le Bean instancié sera accessible pendant toute la durée de la requête 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é Auteurs : Stessy , L'objet ServletConfig est une interface. Cette interface contient les 4 méthodes suivantes • getInitParameter(java.lang.String name) : Cette méthode retourne un String contenant le paramètre d'initialisation de la servlet correspondant au paramètre name • getInitParameterNames() : Cette méthode retourne un objet Enumération contenant les paramètres d'initialisation de la servlet • getServletContext() : Cette méthode retourne une référence de l'interface ServletContext C'est la méthode la plus valable car elle permet de partager l'information à travers l'application - 17 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts. Cette page est déposée à la SACD.
  • 18. La FAQ Java EE • getServletName() : Cette méthode retourne un String contenant le nom de l'instance de la servlet Comment modifier le Time Out par défaut de session? Auteurs : bahamouth , Dans le fichier web.xml situé dans le répertoire 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? Auteurs : Jaxofun , Il suffit d'accèder à la session voulue et de la modifier comme ceci : request.getSession().setMaxInactiveInterval(int); Comment connaître le navigateur utilisé par un utilisateur Auteurs : Didier , Cette information peut être retrouvée dans le header de la requête: String browser = request.getHeader("user-agent"); Comment placer et récupérer un paramétre d'initialisation d'une servlet? Auteurs : Righetto Dominique , Placer la définition <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 récupérer la valeur de MON_PARAM getInitParameter("MON_PARAM"); - 18 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts. Cette page est déposée à la SACD.
  • 19. La FAQ Java EE Si vous désirez mettre plus de paramétres, il suffit d'ajouter des déclarations <init-param> comme ceci <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 désirez mettre des paramètres de manière globale afin de pouvoir les récupérer 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 récupérer le contexte de la servlet et appeler la méthode getInitParameter comme la manière précédente pour récupérer la valeur de Author getServletContext().getInitParameter("MON_PARAM"); Comment uploader un fichier depuis une applet vers une servlet? Auteurs : 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(); - 19 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts. Cette page est déposée à la SACD.
  • 20. La FAQ Java EE Coté servlet // Récupération du flux entrant java.io.DataInputStream dis = new java.io.DataInputStream(request.getInputStream()); dis.readFully(temp); dis.close(); // Ecriture du fichier image sur le serveur File cibleServeur = new File("/repertoire/nomfichier"); FileOutputStream fos = new FileOutputStream(cibleServeur); fos.write(temp); fos.close(); Comment télécharger un fichier depuis une servlet? Auteurs : Stessy , Voici un exemple de code permettant de télécharger 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 { //dans mon cas le filepath et le path complet après création // d'un temp file file = new File(filepath); response.setContentLength((int) file.length()); int bufferSize = 64 * 1024; long time = System.currentTimeMillis(); try { 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(); } finally { try { from.close(); } catch (Exception e) { } try { out.close(); } catch (Exception e) {} } time = (System.currentTimeMillis() - time) / 1000; // seconds download double kb = (file.length() * 1.0 / 1024); if (file != null) file.delete(); } catch (Exception e) { return; } finally { try { file.delete(); } catch (Exception ex) {} - 20 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts. Cette page est déposée à la SACD.
  • 21. La FAQ Java EE } Comment faire pour gérer des actions à effectuer lors de la création ou suppression de session ? Auteurs : Righetto Dominique , En implémentant 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 méthode est appelée lors de la création de session */ public void sessionCreated(HttpSessionEvent hse){ System.out.println("Une session vient d'être créée"); } /** Cette méthode est appelée lors de la destruction de session*/ public void sessionDestroyed(HttpSessionEvent hse) { System.out.println("Une session vient d'être détruite"); } } Ensuite, il suffit de référencer 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 gérer des actions à effectuer lors du démarrage ou de l'arrêt de l'application ? Auteurs : Righetto Dominique , En implémentant l'interface ServletContextListener comme ceci package com.dvp.faq.javaee; import javax.servlet.ServletContextListener; import javax.servlet.ServletContextEvent; public class MyHttpServletContextListener implements ServletContextListener { /** Cette méthode appelée lors du démarrage de l'application*/ public void contextInitialized(ServletContextEvent sce) { - 21 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts. Cette page est déposée à la SACD.
  • 22. La FAQ Java EE System.out.println("L'application vient de démarrer"); } /** Cette méthode appelée 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 référencer 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 récupérer le nom associé au contexte d'une application Web? Auteurs : SEMPERE Benjamin , A l'aide de l'interface HttpServletRequest String contextPath = request.getContextPath(); Comment faire apparaître 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 données qu'il reçoit. Dans le cas d'un fichier PDF par exemple, les données 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 réponse : response.setContentType("application/pdf"); Dans ce cas-là, le navigateur comprendra que le fichier retourné est un fichier PDF et agira en conséquence. Il est également possible de modifier le nom du fichier en ajoutant une entête à la réponse : response.setHeader("Content-disposition", "filename=monNomDeFichier"); Comment accéder à une ressource dans l'arborescence d'une application web depuis une servlet ? Auteurs : fabszn , Pour accéder à une ressource depuis une servlet, il faut passer par l'interface ServletContext. Plus exactement la methode : getRealPath(String relativePath). - 22 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts. Cette page est déposée à la SACD.
  • 23. La FAQ Java EE Cette methode recherche depuis la racine de l'application web le fichier passé en paramètre sous forme d'un chemin relatif. Voici un exemple d'implementation : La ressource à laquelle on veut accéder : le fichier de propriété 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("Résultat : "+result); writer.flush(); } } Remarque : Le chemin relatif déterminé par la variable RELATIVE_PATH_FILE doit être relatif à la racine de l'application web Le résultat à l'affichage sera : Résultat : hello World - 23 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts. Cette page est déposée à la SACD.
  • 24. La FAQ Java EE La méthode getResourcePaths() permet de lister tous les fichiers contenu dans l'application web. Comment donner un type MIME standard compréhensible par tous les navigateurs ? Auteurs : 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 téléchargement du fichier. Comment obtenir une instance de PageContext dans une Servlet ? Auteurs : adiGuba , Il faut utiliser la classe JspFactory et sa méthode getPageContext() pour créer une nouvelle instance de PageContext. Mais attention car tout les PageContext créés de la sorte doivent être libérés par la méthode 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 réponse 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 { // Libération du PageContext jspFactoty.releasePageContext(pageContext); } Qu'est ce que le pattern Transfer Object? Auteurs : request , Le pattern transfer Object précédemment appelé Value Object est une classe implémentant l'interface Serializable. Ce pattern est essentiellement utilisé pour échanger des données entre une application cliente et des EJB de type Entity ( EntityBean ). Pourquoi me direz-vous? Tout simplement parce que, comme vous le savez, les EntityBean comme tous les EJB sont des objets distants, ce qui induit, pour chaque accès à celui-ci, un aller-retour à travers le réseau, avec en plus démarrage/validation de transactions. - 24 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts. Cette page est déposée à la SACD.
  • 25. La FAQ Java EE Par exemple, pour lire un objet Personne avec 5 attributs, il vous faudra 6 allers-retours pour récupérer 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'idée est de fournir un service avec des EJB stateless qui vont vous fournir les service qui vous intéressent (Lecture/création/modification/ suppression ... d'un objet). Cet EJB utilise des Entity en interne pour faire les opérations, et créer des classes de transport (avec uniquement les attributs + get/set), cette classe doit implémenter Serializable pour pouvoir passer sur RMI/IIOP. C'est cette classe que l'on appelle Transfer Object L'avantage de ce modèle, 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 théorique. Entity BeanL'interface Local package com.societe.monserveur; import javax.ejb.EJBLocalObject; /** * Classe d'accès à une entité. * L'accès 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; } Le Bean package com.societe.monserveur; import javax.ejb.CreateException; import javax.ejb.EntityBean; import javax.ejb.EntityContext; import javax.ejb.RemoveException; - 25 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts. Cette page est déposée à la SACD.
  • 26. La FAQ Java EE /** * Implémentation 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 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 - 26 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts. Cette page est déposée à la SACD.
  • 27. La FAQ Java EE 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 javax.ejb.EJBException; import javax.ejb.SessionBean; import javax.ejb.SessionContext; import javax.naming.Context; import javax.naming.InitialContext; import 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) { 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); } - 27 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts. Cette page est déposée à la SACD.
  • 28. La FAQ Java EE } 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é */ 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); } - 28 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts. Cette page est déposée à la SACD.
  • 29. La FAQ Java EE /** Suppression de l'objet dans la base */ public void delete() throws Exception { getFacade().delete(this); } /** * Geter / Seter */ 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; } /** * Récupération 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 { //Création de toto Personne toto = new Personne(new Integer(1), "Toto"); toto.insert(); //Modification de toto toto.setNom("Titi"); toto.update(); //Suppression de toto toto.delete(); //Récupération d'une autre personne Personne autre = Personne.findObject(new Integer(99)); } } L'avantage avec cette solution (EJB + VO) c'est que l'accès et les régles de gestion sont centralisés sur un seul serveur. Si une autre application (back office) ou un autre serveur web, veut accèder à la même information, il pourra réutiliser tout cela. - 29 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts. Cette page est déposée à la SACD.
  • 30. La FAQ Java EE Sommaire > Servlets > Session Quelle est l'utilité des sessions Auteurs : 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 requêtes. De ce fait le serveur ne sait pas déterminer si une requête ou une réponse provient du même client. C'est pour cela que les applications web utilisent le concept de session. Une session représente l'ensemble des intéractions pouvant intervenir entre un client et le serveur Comment créer un objet session Auteurs : Stessy , Il existe deux méthodes permettant de créer des sessions : HttpSession getSession() et HttpSession getSession(boolean) Voici un petit exemple permettant de comprendre la différence entre ces 2 méthodes // Si la session existe, ces 2 méthodes renvoient la // session existante, sinon ces 2 méthodes créent une // nouvelle session HttpSession session = request.getSession(); HttpSession session = request.getSession(true) // Si la session existe, cette méthode renvoie la session existante, sinon la méthode retourne la valeur null HttpSession session = request.getSession(false); Comment les session sont-elles gérées ? Auteurs : Stessy , Il existe 3 moyens de gérer les sessions : • à l'aide de cookies • à l'aide re la réécriture d'URL • à l'aide des sessions SSL en HTTPS Cookies A chaque session créée, 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 requête permettant ainsi au serveur d'identifier le client. Voici un petit exemple permettant d'ajouter un cookie dans l'entête de la réponse. - 30 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts. Cette page est déposée à la SACD.
  • 31. La FAQ Java EE javax.servlet.http.Cookie cookie = new javax.servlet.http.Cookie("user","abc123456"); response.addCookie(cookie); 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 réécriture d'URL Réécriture d'URL Par cette technique le serveur ajoute l'dentificateur de session à la fin de chaque URL des pages envoyées par celui-ci. Mais malheureusement cette technique a un coût car le serveur doit effectuer une opération supplémentaire. Celui-ci doit personnifier l'url en y incluant l'identifiant de session. 2 méthodes existent pour individualiser les URL: encodeURL(String) et encodeRedirectURL(String) Ces méthodes réécrivent l'URL uniquement si le client n'accepte pas les cookies. Dans l'autre cas les URL resteront inchangées. La 2è méthode est utilisée lorsque la servlet utilise la méthode sendRedirect(String) Exemple : response.sendRedirect(response.encodeRedirectURL("maServlet"); Les Sessions SSL en HTTPS Il nous suffit de récupérer la session courante. A cela près, qu'une session SSL est déterminé par les variables d'état suivantes: • Session ID (l'dentifiant de session) : une séquence 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) : définit les algorithmes de chiffrement et de hachage • MasterSecret : c'est un clé de 48 octets partagée 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. - 31 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts. Cette page est déposée à la SACD.
  • 32. La FAQ Java EE Sommaire > JSP - 32 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts. Cette page est déposée à la SACD.
  • 33. La FAQ Java EE Sommaire > JSP > Généralités Comment utiliser les EL (Expression Language) dans une page JSP ? Auteurs : adiGuba , Cela dépend de la version de J2EE que vous utilisez : Avec J2EE 1.4, les EL sont directement intégré dans le moteur JSP 2.0. Toutefois l'application doit obligatoirement être déclaré 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/web- app_2_4.xsd" version="2.4"> Si ce n'est pas le cas les EL seront désactivées afin de ne pas compromettre le fonctionnement d'application J2EE postérieur. Il est toujours possible de désactiver les EL sur une page particulière en utilisant la directive page : <%@ page isELIgnored="false" %> Il est également possible d'utiliser les EL avec une version antérieur 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 intègre une gestion des EL. Attention toutefois, ces librairies ne sont pas concus pour être utilisées 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 récupérer le code HTML généré par une page JSP ? Auteurs : zag , Il faut commencer par récupérer un RequestDispatcher qui va servir de wrapper pour la ressource (le fichier JSP en l'occurence). Pour récupérer ce dispatcher, il faut passer le contexte de la servlet : RequestDispatcher rd = servletContext.getRequestDispatcher(jsp); Ensuite, il faut configurer la requête. Pour cela, c'est simple, il faut simplement passer les attributs nécessaires à la page avec la méthode setAttributes. Après cela, il faut configurer l'objet response. Ici, on est obligé de créer notre propre classe de réponse 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); - 33 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts. Cette page est déposée à la SACD.
  • 34. La FAQ Java EE } public String toString() { return replacementWriter.toString(); } } Ensuite, on peut récupérer 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 généré par la page JSP. Comment mettre un header et un footer a chaque jsp ? Auteurs : 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 paramêtres d'une requete ? Auteurs : 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 ? Auteurs : 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()); - 34 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts. Cette page est déposée à la SACD.
  • 35. La FAQ Java EE } } Créer sa propre page d'erreur ? Auteurs : syj , Voici la page d'erreur que l'on utilise. Elle n'est utile qu'en phase de développement. Mais elle permet de determiner rapidement les problèmes 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> - 35 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts. Cette page est déposée à la SACD.
  • 36. La FAQ Java EE <h1>Exception</h1> <div> <% 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 ? Auteurs : 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? Auteurs : Stessy , Des objets sont dit implicites car il ne nous est pas nécessaire de les déclarer ou de les initialiser Les objest le plus souvent utilisés sont: • request : lorsqu'un navigateur envoie une requête vers le serveur, il est possible que celui-ci envoie un certain nombre de paramètres. Il existe deux sortes de paramètres: • Les paramètres se trouvant dans l'URL comme par exemple http://www.monsite.com/path/de/ ma/page?param1=valeur1&param2=valeur2 • Les paramètres de formulaire: ces dernier sont transmis dans le corps de la requête • response : cet objet contient la réponse envoyée au client. La portée de cette instance est la page • out : peut être employé dans les scriptlets pour écrire des données dans la page qui sera envoyée au client. La portée de cette instance est la page - 36 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts. Cette page est déposée à la SACD.
  • 37. La FAQ Java EE • session : cet objet contient, comme son nom l'indique, tous les objets relatif à la session - 37 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts. Cette page est déposée à la SACD.
  • 38. La FAQ Java EE Sommaire > JSP > JSTL (Java Standard Tag Library) Quels sont les objectifs de la JSTL? Auteurs : 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 présentation d'une application web Java EE. En effet, un web designer peut avoir des problèmes pour la conception de pages JSP du fait qu'il est confronté à un langage de script complexe qu'il ne maîtrise pas forcément. La JSTL permet de développez des pages JSP en utilisant des balises XML, donc avec une syntaxe proche des langages utilisés par les web designers, et leurs permet donc de concevoir des pages dynamiques complexes sans connaissances du langage Java. Sun à donc proposer une spécification pour une librairie de tags standard : la Java Standard Tag Library (JSTL). C'est à dire qu'il spécifie les bases de cette librairie, mais qu'il laisse l'implémentation libre (de la même manière que pour les serveur Java EE qui son des implémentations de la spécification Java EE). - 38 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts. Cette page est déposée à la SACD.
  • 39. La FAQ Java EE Sommaire > JSP > JSTL (Java Standard Tag Library) > Librairie de base Comment afficher une expression? Auteurs : 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. <!-- Même 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 présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2003 - 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts. Cette page est déposée à la SACD.