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.
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¶m2=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.