Académique Documents
Professionnel Documents
Culture Documents
Faqjavaee
Faqjavaee
Cette faq a t ralise partir des questions frquemment poses sur les forums de www.developpez.com et de l'exprience personnelle des auteurs. Nous tenons souligner que cette faq ne garantit en aucun cas que les informations qu'elle propose sont correctes. Les auteurs font leur maximum, mais l'erreur est humaine. Cette faq ne prtend pas non plus tre complte. Si vous trouvez une erreur, ou que vous souhaitez nous aider en devenant rdacteur, lisez ceci. Sur ce, nous vous souhaitons une bonne lecture. L'quipe Java
L'quipe Java - Stessy - adiGuba - bahamouth christopheJ - lunatix - syj - Righetto Dominique draken - SnorkyBZH - Didier - vedaer - duj - request SEMPERE Benjamin - Jaxofun - willy78 - Sniper37 - Xplode : Mike Franois - paquerette - ceddup - Baptiste Wicht - Jack Huser - fabszn - v1nc3kr0 - link256 - zag -
La FAQ Java EE
1. Informations gnrales (5) .........................................................................................................................................................4 2. Dfinitions (14) ..........................................................................................................................................................................6 3. Java EE (3) .............................................................................................................................................................................. 12 3.1. Gnralits (3) .................................................................................................................................................................13 4. Servlets (23) .............................................................................................................................................................................14 4.1. Gnralits (20) ...............................................................................................................................................................15 4.2. Session (3) ...................................................................................................................................................................... 30 5. JSP (28) ....................................................................................................................................................................................32 5.1. Gnralits (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
-3Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
-4Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
La FAQ Struts La FAQ Gnral Java La FAQ JDBC La Javadoc : toutes les informations utiles sur les classes, leurs mthodes ... toujours avoir sous la main. Les didacticiels de Sun La FAQ de JGuru, beaucoup plus complte que celle-ci ...
Remerciements
Auteurs : L'quipe Java , Un grand merci tous ceux qui ont pris de leur temps pour la ralisation de cette FAQ. C'est dire : Aux rdacteurs qui ont rdig les questions de cette FAQ. Aux correcteurs qui ont contribu supprimmer un maximum de fautes de franais sur cette FAQ. Aux visiteurs qui ont visit cette page et qui, par leurs remarques, ont contribu l'amlioration de cette page.
-5Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
Si vous souhaitez en savoir plus sur Java EE, suivez ces liens: Java EE Home Java EE 5 Tutorial
Les entreprise bean interagissent le plus souvent avec des bases de donnes. Si vous souhaitez en savoir plus sur les EJB, suivez ces liens : EJB Home
-6Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
Pour plus d'informations sur les JSP, vous pouvez suivre ces liens : JSP home JSP (Java EE 5 Tutorial) JSP Spcifications et implmentation
-7Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
JCA 1.5 permet, en plus, de recevoir des messages qui seront traits par un "Message Listener", gnralement un Message Driven Bean
Attention, JAXP n'est pas limite SAX, DOM, XSLT et ces quatre packages. Elle offre bien plus de fonctionnalits. Pour savoir ce que sont exactement SAX, DOM, XSLT et en savoir plus sur l'utilisation de JAXP, regardez la partie XML de la FAQ Java . Il est aussi important de noter que, mme si au dpart JAXP fut cre comme une API Java EE, elle est dsormais intgre au J2SDK standard. Pour plus d'informations sur XML, vous pouvez visiter la rubrique XML de developpez.com : xml.developpez.com/ . http://
-8Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
De plus l'intgration de JAXB 2.0, pose de nombreux problmes de compatibilit avec JAX-RPC 1.1. C'est ainsi l'occasion pour Sun de repenser, mettre jour, amliorer et surtout rationaliser cette brique logicielle en utilisant les dernires nouveauts du langage lui-mme, ainsi que les technologies dveloppes en parallle dans d'autres groupes de travail. Pour plus d'informations sur JAX-WS ( anciennement JAX-RPC ), vous pouvez suivre ces liens : Introduction de JAX-WS JAX-WS (Java EE 5 Tutorial) XML-RPC spcification
-9Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
Pour le moment, JAXB permet juste de partir d'un Schma XML pour gnrer les classes correspondantes (interfaces implmenter). JAXB 2.0 devrait palier cette limitation en permettant de crer des schmas partir de classes Java dj dfinies. Pour plus d'informations, regardez la JSR 222 : http://www.jcp.org/en/jsr/detail?id=222
Pour note, JAXR est intgr au JWSDP (Java Web Services Developer Pack), mais vous pouvez aussi le tlchager sparment (voir liens).
La FAQ Java EE
- 11 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
- 12 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
Sommaire > Java EE > Gnralits Comment faire pour ne pas afficher l'arborescence de l'application lorque l'utilisateur entre simplement le contexte de l'application dans l'URL?
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 lment dans le fichier web.xml qui s'il existe, sera utilis par le conteneur comme page par dfaut.
- 13 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
- 14 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
Sommaire > Servlets > Gnralits Pourquoi n'y a-t-il pas de constructeur dans une servlet?
Auteurs : Stessy , Une servlet est un peu comme un applet par le fait qu'elle possde une mthode init() qui agit en tant que constructeur. Puisque l'environnement de servlet prend soin d'instancier la servlet, un constructeur explicite n'est pas ncessaire. N'importe quel code d'initialisation que vous devez utiliser devrait tre plac dans la mthode init() puisque cette mthode est appele lorsque le servlet est charge par le conteneur de servlet.
String encoding = request.getCharacterEncoding(); if (encoding == null || !encoding.equals("UTF-8")) { try { request.setCharacterEncoding("UTF-8"); } catch (UnsupportedEncodingException e) { System.err.println("HttpMultipartRequest - : " + e); } }
Une autre faon de faire est de configurer l'encodage au niveau du fichier web.xml au moyen d'un Filter :
<filter> <filter-name>Character Encoding</filter-name> <filter-class>chemin.de.ton.package.CharsetFilter</filter-class> </filter>
- 15 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
//Si le moteur de servlet implmente la spec 2.4 de l'API servlet //majorVersion est gal 2 int majorVersion = getServletContext().getMajorVersion(); //minorVersion est gal 4 int minorVersion = getServletContext().getMinorVersion();
Dans cet exemple, le Bean est instanci comme une variable locale est n'est donc pas partageable entre diffrentes servlets.
- 16 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
request :
Dans cet exemple, le Bean instanci sera accessible pendant toute la dure de la requte
com.developpez.beans.MyBean myBean = (com.developpez.beans.MyBean) request.getAttribute("myBean"); if (myBean == null) { myBean = new com.developpez.beans.MyBean(); request.setAttribute("myBean", myBean); }
session :
Dans cet exemple, lorsque le Bean est instanci il est plac dans la session actuelle.
HttpSession session = request.getSession(true); com.developpez.beans.MyBean myBean = (com.developpez.beans.MyBean) session.getAttribute("myBean"); if (myBean == null) { myBean = new com.developpez.beans.MyBean(); session.setAttribute("myBean", myBean); }
application :
Dans ce dernier exemple, lorsque le Bean est instanci il est plac dans le contexte de la servlet.
com.developpez.beans.MyBean myBean = (com.developpez.beans.MyBean) getServletContext().getAttribute("myBean"); if (myBean == null) { myBean = new com.developpez.beans.MyBean(); getServletContext().setAttribute("counter", counter); }
- 17 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
<servlet> <servlet-name>maServlet</servlet-name> <display-name>Ma Servlet</display-name> <description>Ce que fait ma servlet</description> <servlet-class>com.servlet.MaServlet</servlet-class> <init-param> <param-name>MON_PARAM</param-name> <param-value>Bonjour</param-value> </init-param> </servlet>
Puis dans le code de votre servlet, utilisez ceci pour rcuprer la valeur de MON_PARAM
getInitParameter("MON_PARAM");
- 18 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
Si vous dsirez mettre plus de paramtres, il suffit d'ajouter des dclarations <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 dsirez mettre des paramtres de manire globale afin de pouvoir les rcuprer dans toutes les servlets, il suffit d'ajouter <context-param> comme ceci
Puis dans le code de votre servlet, il faut rcuprer le contexte de la servlet et appeler la mthode getInitParameter comme la manire prcdente pour rcuprer la valeur de Author
getServletContext().getInitParameter("MON_PARAM");
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 prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
Cot servlet
// Rcupration 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();
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 aprs cration // 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 prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
Comment faire pour grer des actions effectuer lors de la cration ou suppression de session ?
Auteurs : Righetto Dominique , En implmentant l'interface HttpSessionListener comme ceci
package com.dvp.faq.javaee; import javax.servlet.http.HttpSessionListener; import javax.servlet.http.HttpSessionEvent; public class MyHttpSessionListener implements HttpSessionListener { /** Cette mthode est appele lors de la cration de session */ public void sessionCreated(HttpSessionEvent hse){ System.out.println("Une session vient d'tre cre"); } /** Cette mthode est appele lors de la destruction de session*/ public void sessionDestroyed(HttpSessionEvent hse) { System.out.println("Une session vient d'tre dtruite"); } }
Ensuite, il suffit de rfrencer le listener dans le fichier web.xml (sous la balise racine)
Comment faire pour grer des actions effectuer lors du dmarrage ou de l'arrt de l'application ?
Auteurs : Righetto Dominique , En implmentant l'interface ServletContextListener comme ceci
package com.dvp.faq.javaee; import javax.servlet.ServletContextListener; import javax.servlet.ServletContextEvent; public class MyHttpServletContextListener implements ServletContextListener { /** Cette mthode appele lors du dmarrage de l'application*/ public void contextInitialized(ServletContextEvent sce) { System.out.println("L'application vient de dmarrer"); }
- 21 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
/** Cette mthode appele lors de l'arret de l'application*/ public void contextDestroyed(ServletContextEvent sce) { System.out.println("L'application vient de s'arreter"); } }
Ensuite, il suffit de rfrencer le listener dans le fichier web.xml (sous la balise racine)
Comment faire apparatre un fichier (PDF, XLS, CSV, ...) dans mon navigateur ?
Auteurs : ceddup , Baptiste Wicht , De base, le navigateur va tenter d'afficher la page directement selon le flux de donnes qu'il reoit. Dans le cas d'un fichier PDF par exemple, les donnes ne sont pas du tout affichables en l'tat par le navigateur. C'est pourquoi, il faut indiquer au navigateur le type de fichier qu'on lui envoie. Pour cela, il faut modifier le content-type de la rponse :
response.setContentType("application/pdf");
Dans ce cas-l, le navigateur comprendra que le fichier retourn est un fichier PDF et agira en consquence. Il est galement possible de modifier le nom du fichier en ajoutant une entte la rponse :
response.setHeader("Content-disposition", "filename=monNomDeFichier");
Comment accder une ressource dans l'arborescence d'une application web depuis une servlet ?
Auteurs : fabszn , Pour accder une ressource depuis une servlet, il faut passer par l'interface ServletContext. Plus exactement la methode : getRealPath(String relativePath). Cette methode recherche depuis la racine de l'application web le fichier pass en paramtre sous forme d'un chemin relatif.
- 22 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
Voici un exemple d'implementation : La ressource laquelle on veut accder : le fichier de proprit test.properties
clef1=hello World
if(path!=null){ in = new FileInputStream(path); } Properties prop = new Properties(); prop.load(in); String result = prop.getProperty(KEY); arg1.setContentType("text/html"); Writer writer = arg1.getWriter(); writer.write("Rsultat : "+result); writer.flush(); } }
Remarque : Le chemin relatif dtermin par la variable RELATIVE_PATH_FILE doit tre relatif la racine de l'application web Le rsultat l'affichage sera :
Rsultat : hello World
- 23 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
La mthode getResourcePaths() permet de lister tous les fichiers contenu dans l'application web.
Comment donner un type MIME standard comprhensible par tous les navigateurs ?
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");
- 24 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
C'est pour cette raison que les Transfer Object sont l. les EntityBean ne sont l que pour tre utilis sur le serveur EJB (dans les EJB 2.0, ils sont maintenant "local", ils ne peuvent pas tre accessible de l'exterieur). L'ide est de fournir un service avec des EJB stateless qui vont vous fournir les service qui vous intressent (Lecture/cration/modification/suppression ... d'un objet). Cet EJB utilise des Entity en interne pour faire les oprations, et crer des classes de transport (avec uniquement les attributs + get/set), cette classe doit implmenter Serializable pour pouvoir passer sur RMI/IIOP. C'est cette classe que l'on appelle Transfer Object L'avantage de ce modle, c'est avoir une programmation distante (N tiers) avec le transit de veritables objets que vous allez pouvoir manipuler puis renvoyer au serveur pour modification... . Voici un petit exemple qui venir tayer la partie thorique. Entity Bean L'interface Local
package com.societe.monserveur; import javax.ejb.EJBLocalObject; /** * Classe d'accs une entit. * L'accs est local, cette classe n'est pas accessible depuis l'exterieur. */ public interface PersonneEJBCMP extends EJBLocalObject { public java.lang.Integer getCodePersonne(); public java.lang.String getNom(); public void setNom(java.lang.String nom); }
L'interface Home
package com.societe.monserveur; import javax.ejb.CreateException; import javax.ejb.EJBLocalHome; import javax.ejb.FinderException; /** * Home (Factory) de l' Entit CMP */ public interface PersonneEJBCMPHome extends EJBLocalHome { public PersonneEJBCMP create(java.lang.Integer codePersonne) throws CreateException; public PersonneEJBCMP create(java.lang.Integer codePersonne, java.lang.String nom) throws CreateException; public PersonneEJBCMP findByPrimaryKey(java.lang.Integer codePersonne) throws FinderException; }
Le Bean
package com.societe.monserveur; import import import import javax.ejb.CreateException; javax.ejb.EntityBean; javax.ejb.EntityContext; javax.ejb.RemoveException;
- 25 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
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; } }
package com.societe.monserveur; import java.rmi.RemoteException; import javax.ejb.CreateException; import javax.ejb.EJBHome; public interface PersonneEJBFacadeHome extends EJBHome { public PersonneEJBFacade create() throws RemoteException, CreateException; }
L'interface Remote
package com.societe.monserveur;
- 26 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
import java.rmi.RemoteException; import javax.ejb.EJBObject; public interface PersonneEJBFacade extends EJBObject { public void insert(Personne obj) throws RemoteException; public void update(Personne obj) throws RemoteException; public void delete(Personne obj) throws RemoteException; public Personne findObject(Integer codePersonne) throws RemoteException; }
Le Bean
package com.societe.monserveur; import import import import import import javax.ejb.EJBException; javax.ejb.SessionBean; javax.ejb.SessionContext; javax.naming.Context; javax.naming.InitialContext; javax.naming.NamingException;
public class PersonneEJBFacadeBean implements SessionBean { private SessionContext sessionContext; public void ejbCreate() { } public void ejbRemove() { } public void ejbActivate() { } public void ejbPassivate() { } public void setSessionContext(SessionContext sessionContext) { this.sessionContext = sessionContext; } public void insert(Personne obj) { try { getCMPHome().create(obj.getCodePersonne(), obj.getNom()); } catch (Exception ex) { throw new EJBException(ex); } } public void update(Personne obj) { try { PersonneEJBCMP personneEJBCMP = getCMPHome().findByPrimaryKey(obj.getCodePersonne()); personneEJBCMP.setNom(obj.getNom()); } catch (Exception ex) { throw new EJBException(ex); } } public void delete(Personne obj) { try { getCMPHome().remove(obj.getCodePersonne()); } catch (Exception ex) { throw new EJBException(ex); } } public Personne findObject(Integer codePersonne) {
- 27 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
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); } /** Suppression de l'objet dans la base */ public void delete() throws Exception { getFacade().delete(this);
- 28 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
} /** * 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; } /** * Rcupration de l'EJB facade * @return la facade */ private static PersonneEJBFacade getFacade() throws Exception { Context ctx = new InitialContext(); Object ref = ctx.lookup("com/societe/monserveur/PersonneEJBFacade"); PersonneEJBFacadeHome personneEJBFacadeHome = (PersonneEJBFacadeHome) PortableRemoteObject.narrow(ref, PersonneEJBFacadeHome.class); return personneEJBFacadeHome.create(); } }
Et enfin le Client
package com.societe.monclient; import com.societe.monserveur.Personne; public class Test { public static void main(String[] args) throws Exception { //Cration de toto Personne toto = new Personne(new Integer(1), "Toto"); toto.insert(); //Modification de toto toto.setNom("Titi"); toto.update(); //Suppression de toto toto.delete(); //Rcupration d'une autre personne Personne autre = Personne.findObject(new Integer(99)); } }
L'avantage avec cette solution (EJB + VO) c'est que l'accs et les rgles de gestion sont centraliss sur un seul serveur. Si une autre application (back office) ou un autre serveur web, veut accder la mme information, il pourra rutiliser tout cela.
- 29 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
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 requtes. De ce fait le serveur ne sait pas dterminer si une requte ou une rponse provient du mme client. C'est pour cela que les applications web utilisent le concept de session. Une session reprsente l'ensemble des intractions pouvant intervenir entre un client et le serveur
HttpSession getSession()
et
HttpSession getSession(boolean)
// Si la session existe, ces 2 mthodes renvoient la // session existante, sinon ces 2 mthodes crent une // nouvelle session HttpSession session = request.getSession(); HttpSession session = request.getSession(true) // Si la session existe, cette mthode renvoie la session existante, sinon la mthode retourne la valeur null HttpSession session = request.getSession(false);
Cookies A chaque session cre, le serveur envoie un identificateur (sous la forme d'un cookie) correspondant au client. Ensuite le client renverra ce cookie au serveur lors de sa prochaine requte permettant ainsi au serveur d'identifier le client. Voici un petit exemple permettant d'ajouter un cookie dans l'entte de la rponse.
- 30 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
Mais il arrive assez souvent que le client refuse de recevoir des cookies. Dans ce cas il vous reste une 2 solution qui consiste en la rcriture d'URL Rcriture d'URL Par cette technique le serveur ajoute l'dentificateur de session la fin de chaque URL des pages envoyes par celui-ci. Mais malheureusement cette technique a un cot car le serveur doit effectuer une opration supplmentaire. Celui-ci doit personnifier l'url en y incluant l'identifiant de session. 2 mthodes existent pour individualiser les URL:
encodeURL(String)
et
encodeRedirectURL(String)
Ces mthodes rcrivent l'URL uniquement si le client n'accepte pas les cookies. Dans l'autre cas les URL resteront inchanges. La 2 mthode est utilise lorsque la servlet utilise la mthode
sendRedirect(String)
Exemple :
response.sendRedirect(response.encodeRedirectURL("maServlet");
Les Sessions SSL en HTTPS Il nous suffit de rcuprer la session courante. A cela prs, qu'une session SSL est dtermin par les variables d'tat suivantes: Session ID (l'dentifiant de session) : une squence arbitraire de 32 octets choisie par le serveur pour identifier une session Peer certificate (le certificat du pair) : c'est un certificat X 509 du correspondant (soit pour un serveur ou un client). Compression method : l'algorithme de compression utilis, NULL pour l'instant (ce champ reste vide) Cipher spec (la suite de chiffrement) : dfinit les algorithmes de chiffrement et de hachage MasterSecret : c'est un cl de 48 octets partage entre le client et le serveur. Is resumable (le drapeau) : c'est un flag qui indique si il est possible d'ouvrir de nouvelles connexions sur la session en question.
- 31 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
- 32 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
Sommaire > JSP > Gnralits Comment utiliser les EL (Expression Language) dans une page JSP ?
Auteurs : adiGuba , Cela dpend de la version de J2EE que vous utilisez : Avec J2EE 1.4, les EL sont directement intgr dans le moteur JSP 2.0. Toutefois l'application doit obligatoirement tre dclar comme une application Servlet 2.4 au minimum :
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/webapp_2_4.xsd" version="2.4">
Si ce n'est pas le cas les EL seront dsactives afin de ne pas compromettre le fonctionnement d'application J2EE postrieur. Il est toujours possible de dsactiver les EL sur une page particulire en utilisant la directive page :
<%@ page isELIgnored="false" %>
Il est galement possible d'utiliser les EL avec une version antrieur de J2EE, mais dans ce cas ce n'est pas le moteur JSP qui traitera les EL mais une librairie de tag compatible. Ainsi on peut utiliser la JSTL 1.0 ou Struts-EL qui intgre une gestion des EL. Attention toutefois, ces librairies ne sont pas concus pour tre utilises dans une application J2EE 1.4. Dans ce cas il faut utiliser une version sans EL afin de les laisser au moteur JSP 2.0 (respectivement JSTL 1.1 et Struts).
Ensuite, il faut configurer la requte. Pour cela, c'est simple, il faut simplement passer les attributs ncessaires la page avec la mthode setAttributes. Aprs cela, il faut configurer l'objet response. Ici, on est oblig de crer notre propre classe de rponse pour pouvoir crire dans un String :
public class FictiveHttpServletResponse extends HttpServletResponseWrapper { private StringWriter replacementWriter; public FictiveHttpServletResponse(HttpServletResponse response) { super(response); replacementWriter = new StringWriter(); } public PrintWriter getWriter() throws IOException { return new PrintWriter(replacementWriter); }
- 33 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
Avec a, la variable monMessage contiendra le contenu HTML gnr par la page JSP.
- 34 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
<%@ page language="java" isErrorPage="true" %> <!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en"> <html> <head> <title>Page d'erreur</title> </head> <body bgcolor="#FFFFFF"> <div>Une erreur s'est produite !</div> <h1>Attribut de requete</h1> <div class="requestAttributs"> <% java.util.Enumeration en = request.getAttributeNames(); while (en.hasMoreElements()) { String name = (String) en.nextElement(); if(request.getAttribute(name) == null) { %> <div> <%=name%>=null </div> <% } else { %> <div> <%=name%>=<%=request.getAttribute(name).toString()%> </div> <% } } %> </div> <div class="requestParameters"> <% en=request.getParameterNames(); while (en.hasMoreElements()) { String name = (String) en.nextElement(); if(request.getParameter(name) == null) { %> <div> <%=name%>=null </div> <% } else { %> <div> <%=name%>=<%=request.getParameter(name).toString()%> </div> <% } } %> </div> <h1>Exception</h1>
- 35 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
<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>
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.
- 36 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
session : cet objet contient, comme son nom l'indique, tous les objets relatif la session
- 37 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
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 prsentation d'une application web Java EE. En effet, un web designer peut avoir des problmes pour la conception de pages JSP du fait qu'il est confront un langage de script complexe qu'il ne matrise pas forcment. La JSTL permet de dveloppez des pages JSP en utilisant des balises XML, donc avec une syntaxe proche des langages utiliss par les web designers, et leurs permet donc de concevoir des pages dynamiques complexes sans connaissances du langage Java. Sun donc proposer une spcification pour une librairie de tags standard : la Java Standard Tag Library (JSTL). C'est dire qu'il spcifie les bases de cette librairie, mais qu'il laisse l'implmentation libre (de la mme manire que pour les serveur Java EE qui son des implmentations de la spcification Java EE).
- 38 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
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"/>
Pour de plus amples informations sur les attributs disponibles pour ce tag
- 39 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
Sommaire > JSP > JSP Taglibs Que sont les JSP Taglibs ?
Auteurs : adiGuba , Une JSP Taglib est une collection d'actions prdfini destines tre utilis dans une page JSP sous forme de tag (balise XML). Elle se compose d'un descripteur de taglib (Tag Librarie Descriptor) et d'un ensemble de classe Java implmentant l'interface JspTag. Le descripteur de taglib (*.tld) est un document XML qui dcrit les associations en les balises et la classe Java. Ces actions sont reprsentes dans le source JSP comme une balise XML. Lors de la compilation de la JSP, ces balises sont remplaces par des appels vers la classe Java correspondante. On peut citer comme exemple les balises standards prfixes avec jsp :
<jsp:useBean id="monBean" scope="session" class="package.MonObject"> <jsp:setProperty name="monBean" property="monAttribut" value="1.0"/> </jsp:useBean> <jsp:include page="maPage.jsp"/> <jsp:redirect page="maPage.jsp"/> etc...
L'utilisation de taglib permet de limiter l'utilisation de code Java dans une page JSP, voir de totalement le supprimer. Une Taglib est compos de trois lments: Le Tag Librarie Descriptor qui effectue le mapping entre les tags et les classes Java. Les classes Java implmentant les diffrents Tag (implmentant l'interface Tag , ou une de ses interfaces filles IterationTag et BodyTag . Les classes Java implmentant TagExtraInfo afin d'apporter des informations supplmentaires sur les tags (optionnel).
- 40 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
Sommaire > JSP > JSP Taglibs > Taglibs 1.1 Comment utiliser une librairie de tag (taglib) ?
Auteurs : adiGuba , Une librairie de tag peut tre distribu sous deux formes : Le descripteur de fichier est spar des classes Java... Le descripteur de fichier est inclut dans le Jar avec les classes et possde le nom suivant : "META-INF/ taglib.tld".
Afin de pouvoir utiliser cette taglib dans un fichier JSP, il faut la dclarer avec la directive taglib . Respectivement avec le code suivant :
ou
Toutefois, il est prfrrable de ne pas utiliser ces notations sous cette forme. En effet, tant donn que la directive taglib doit tre prsente sur toutes les pages JSP qui l'utilisent, les modifications du nom du descripteur de taglib pourrait tre longue et pnible. Afin de faciliter la maintenance, il faut dclarer la taglib dans le fichier web.xml :
Ainsi, les changements de fichier de descripteur s'effectue seulement dans le fichier web.xml ... Enfin, pour utiliser les tags de la librairie, il suffit de les prfix par le prefixe indiqu dans la directive taglib :
<![CDATA[<tag-prefix:nom-du-tag param="valeur"/>]]>
- 41 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
La mthode doStartTag() est appele. Son code de retour dtermine l'affichage du contenu de la balise. Si le retour vaut Tag.EVAL_BODY_INCLUDE , le corps est valu et crit dans le JspWriter de la page, mais il est ignor si il vaut Tag.SKIP_BODY . Si Tag.EVAL_BODY_INCLUDE est retourn alors que la balise n'a pas de corps, il est ignor. La mthode doEndTag() est appele. Son code de retour dtermine si le reste de la page doit tre valu ou pas. Si le retour vaut Tag.EVAL_PAGE , le reste de la page est valu, mais il est ignor si le retour vaut Tag.SKIP_PAGE .
Enfin, la mthode release() est appele avant que l'objet ne soit rendu au garbage collector. Attention toutefois, afin d'viter trop d'allocation, les tags sont conservs en cache et rutiliss (tout comme les Servlet/ JSP)... La classe javax.servlet.jsp.tagext.TagSupport propose une implmentation par dfaut de l'interface Tag (et de son interface fille IterationTag ).
<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd"> <taglib> <tlibversion>1.0</tlibversion>
- 42 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
Aprs l'entte XML et la dclaration du doctype, on a les lments suivants : tlibversion : Numero de version de la librairie. jspversion : Version minimum des JSP requise pour pouvoir utilis la librarie (optionnel, dfaut: 1.1). shortname : Indique le prefix par dfaut de la librairie pour les EDI compatible (ceci n'est qu'a titre indicatif, le prefix de la directive <%@ taglib %> est utilis). uri : Une URI unique qui identifie cette version de la taglib (optionnel). info : Un texte de description de la taglib (optionnel). tag : Une ou plusieurs mapping de balise avec les classes Java.
Dans un Jar, ce fichier doit se situer dans le rpertoire META-INF avec le nom taglib.tld afin de pouvoir rfrencer directement le fichier Jar.
<tag> <name>name</name> <tagclass>package.NameTag</tagclass> <teiclass>package.NameTEI</teiclass> <bodycontent>JSP</bodycontent> <info>description</info> <attribute> <name>arg1</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag>
Avec les lments suivants : name : Nom de la balise (Utilisation: <taglib-prefix:nom/>). tagclass : Nom de la classe Java qui reprsente cette balise (hrite de Tag). teiclass : Nom de la classe Java qui fournit des informations complmentaire sur la balise (optionnel). bodycontent : Type de contenu que peut accepter la balise, peut prendre les valeurs empty (pas de corps), JSP (le contenu est interprt comme du JSP), ou tagdependent (le contenu n'est pas interprt) (optionnel, dfaut: JSP). info : Un texte de description du tag (optionnel). attribute : Zro, une, ou plusieurs dclarations d'attribut du tag, dcompos de la manire suivante : name : Nom de l'attribut. La classe tagclass doit possder un mutateur pour cet attribut. required : true/false , indique si l'attribut est obligatoire ou pas (optionnel, dfaut: false )
- 43 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
rtexprvalue : true/false , indique si l'attribut peut tre le rsultat d'une expression ( ${bean} ou <%=bean %> ) ou si il doit tre une chaine statique (optionnel, dfaut: false/valeur statique)
public class HelloTag extends TagSupport { public int doStartTag() throws JspException { try { pageContext.getOut().println ("Hello World !"); } catch (IOException e) { throw new JspException ("I/O Error", e); } return Tag.SKIP_BODY; } }
Explication: On tend TagSupport afin de bnficier des implmentations par dfaut des mthodes de Tag . On surcharge doStartTag() , dans lequel on se contente d'crire la chaine "Hello World" dans la sortie de la page courante (pageContext est initialis par l'implmentation par dfaut de setPageContext() ). On retourne Tag.SKIP_BODY car on ne veut pas traiter le corps de la balise.
Il est inutile de surcharger doEndTag() car son implmentation par dfaut retourne Tag.EVAL_PAGE . Notre descripteur de fichier complet ressemble ceci :
<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd"> <taglib> <tlibversion>1.0</tlibversion> <jspversion>1.1</jspversion> <shortname>tex</shortname> <uri></uri> <info>Taglib d'exemple</info> <tag> <name>hello</name> <tagclass>HelloTag</tagclass> <bodycontent>empty</bodycontent> </tag> </taglib>
Le fait de spcifier un bodycontent empty permet de lancer une exception la compilation si le tag possde un contenu quelconque... Notre page JSP pourrait ressembler ceci :
- 44 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
Hello World !
public class HelloTag extends TagSupport { private String name = null; public void setName(String string) { name = string; } public int doStartTag() throws JspException { if (name==null) name = "World"; try { pageContext.getOut().println ("Hello " + name + " !"); } catch (IOException e) { throw new JspException ("I/O Error", e); } return SKIP_BODY; } }
Explication: On ajoute une variable name ainsi que son mutateur setName() . Le mutateur setName() est obligatoire car il sera utilis afin d'initialiser l'attribut de classe name avec la valeur de l'attribut du tag , avant d'appeller doStartTag() . Dans doStartTag() , on affiche "Hello " + name + " !" ...
- 45 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
<%@ taglib uri="taglib-URI" prefix="p"> <html> <body> <b><p:hello/></b> <br/> <b><p:hello name="Fred"/></b> <br/> </body> </html>
public class IsPresentTag extends TagSupport { private String name = "World"; public void setName(String string) { name = string; } public int doStartTag() throws JspException { if (name==null) throw new JspException ("name est null !"); if (pageContext.getAttribute(name,PageContext.SESSION_SCOPE) != null ) return EVAL_BODY_INCLUDE; return SKIP_BODY; } }
- 46 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
<% } %>
public class IterateTag extends TagSupport { private int count = 0; private int current; public void setCount(int i) { count = i; } public int doStartTag() throws JspException { current = 0; if (current < count) return Tag.EVAL_BODY_INCLUDE; return Tag.SKIP_BODY; } public int doAfterBody() throws JspException { current++; if (current < count) return IterationTag.EVAL_BODY_AGAIN; return Tag.SKIP_BODY; } }
Explication : L'attribut count contiendra la valeur de l'attribut de la balise. Il n'y a pas de conversion String/int effectuer car elle est automatique puisque le mutateur prend un int en paramtre. En cas de valeur incorrecte, une exception est lance... Dans doStartTag() , on initialise current qui contiendra le nombre de ligne dj affich. Il est important de l'initialis dans doStartTag() car la mme instance de Tag peut tre utilis plusieurs fois...
Utilisation :</paragapah>
- 47 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
Rsultat:
Cette ligne sera affiche trois fois Cette ligne sera affiche trois fois Cette ligne sera affiche trois fois
public class IterateTag extends TagSupport { private int count = 0; private int current = 0; public void setCount(int i) { count = i; } public int doStartTag() throws JspException { current = 0; if (current < count) { pageContext.setAttribute("line", new Integer(current) ); return Tag.EVAL_BODY_INCLUDE; } return Tag.SKIP_BODY; } public int doAfterBody() throws JspException { current++; if (current < count) { pageContext.setAttribute("line", new Integer(current) ); return IterationTag.EVAL_BODY_AGAIN; } return Tag.SKIP_BODY; } public int doEndTag() throws JspException { pageContext.removeAttribute("line"); return Tag.EVAL_PAGE; } }
Explication: Avant chaque valuation du corps, on place dans le scope "page" un attribut "line" contenant un Integer contenant le numro de ligne courante. Dans doEndTag(), on supprime cet attribut afin de ne pas 'polluer' inutilement le reste de la page.
- 48 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
Note : On peut galement proposer un attribut supplmentaire afin de changer le nom de l'attribut stock dans le scope "page", ainsi que le scope utiliser... Utilisation :
Rsultat :
- 49 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
Sommaire > JSP > JSP Taglibs > Taglibs 1.2 Comment dfinir/modifier des variables de script dans un Tag ?
Auteurs : adiGuba , Il est possible de dfinir ou de modifier des variables de script via un Tag JSP. Dans l'exemple prcdent, l'interaction entre le Tag et la page JSP se fait en rcuprant la rfrence de l'objet avec un getAttribute(). Afin de permettre l'utilisation d'une variable de script, nous allons crer une classe qui tend TagExtraInfo :
public class IterateTEI extends TagExtraInfo { public VariableInfo[] getVariableInfo(TagData data) { VariableInfo[] info = new VariableInfo[1]; info[0] = new VariableInfo ("line", "java.lang.Integer", true, VariableInfo.NESTED); return info; } }
Explication : La mthode getVariableInfo() permet de dfinir des variables de script cre ou modifie par le Tag . Elle retourne un tableau de VariableInfo , qui est constitu de quatre lments : Le nom de la variable de script. Le nom du type de l'objet de la variable. Un boolen indiquant si il s'agit d'une nouvelle variable ou pas (c'est dire si elle doit tre dclar). Enfin, le dernier argument dfinit le bloc dans lequel la variable sera accessible, il peut prendre les valeurs suivantes : VariableInfo.AT_BEGIN : La variable est dfinit au dbut du tag et accessible jusqu' la fin du bloc qui contient le tag. VariableInfo.AT_END : La variable est dfinit la fin du tag et accessible jusqu' la fin du bloc qui contient le tag. VariableInfo.NESTED : La variable est dfinit au dbut du tag et accessible seulement dans le corps du tag.
Attention, le nom de la variable de script doit correspondre un lment dans un des scope (dans l'ordre: page, request, session, application). La variable de script est synchronise avec son quivalent dans le scope, donc il peut y avoir un conflit si le mme nom est utilis dans deux scopes diffrents. Pour pouvoir utiliser cette variable, il faut ajouter la balise <tei-class> dans la dfinition du tag dans le TLD :
<tag> <name>iterate</name> <tagclass>IterateTag</tagclass> <teiclass>IterateTEI</teiclass> <bodycontent>JSP</bodycontent> <attribute> <name>count</name> <required>true</required> </attribute> </tag>
- 50 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
Rsultat :
Note : La mthode getVariableInfo() possdent un TagData qui permet d'accder aux attributs du tag, afin de pourvoir changer dynamiquement le nom de la scriplet selon un attribut par exemple.
public class HtmlCodeTag extends BodyTagSupport { public int doStartTag() throws JspException { return BodyTag.EVAL_BODY_TAG; } public int doAfterBody() throws JspException { try { String bodyString = getBodyContent().getString(); bodyString = bodyString.replaceAll("<", "<"); bodyString = bodyString.replaceAll(">", ">"); bodyString = bodyString.replaceAll("\t", " "); bodyString = bodyString.replaceAll("\n", "<br/>\n"); getPreviousOut().println(bodyString); } catch (IOException e) { throw new JspException (e); } return SKIP_BODY; } }
Dans le TLD :
Explication : La mthode doStartTag() retourne BodyTag.EVAL_BODY_TAG afin d'utiliser l'valuation buffris du corps du Tag . Dans la mthode doAfterBody() , on rcupre le corps du tag valu en String. On modifie ensuite cette String pour remplacer les caractres "<", ">", "\t" et "\n" par du code HTML. Puis on affiche la
- 51 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
chane ainsi transform... Note : Avec les JSP 1.2, BodyTag.EVAL_BODY_TAG est dprci et est remplac par BodyTag.EVAL_BODY_BUFFERED . A l'utilisation, cela donne :
<p:htmlcode> <h1>Example HTML</h1> <p> Un paragraphe de texte avec des mots en <b>gras</b>, et d'autres en <i>italique</i>... </p> </p:htmlcode>
Et on obtient :
<h1>Example HTML</h1> <p> Un paragraphe de texte avec des mots en <b>gras</b>, et d'autres en <i>italique</i>... </p>
Le fait de pouvoir modifier le corps du Tag apporte un plus indniable par rapport l'interface Tag ou IterationTag . En effet, on peut facilement modifier le corps AVANT de l'crire sur la page JSP. De ce fait, on peut rellement changer le formatage du corps dans on ensemble...
<p:htmlCode> <h1>Example HTML</h1> <p> Code Java <%=new java.util.Date()%> TagLib : <p:hello/> </p> </p:htmlCode>
donnera:
<h1>Example HTML</h1> <p> Code Java Fri Dec 10 17:45:19 CET 2004 TagLib : Hello World ! </p>
- 52 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
Il faut spcifier que le corps du tag n'est pas du code JSP afin qu'il ne soit pas interprt. Pour cela, on va crer un nouveau Tag htmlJspCode qui utilisera la mme classe que htmlCode, mais en spcifiant que le corps est dpendant du tag (il ne sera pas interprt) :
<p:htmlJspCode> <h1>Example HTML</h1> <p> Code Java <%=new java.util.Date()> TagLib : <p:hello/> </p> </p:htmlJspCode>
donnera:
<h1>Example HTML</h1> <p> Code Java <%=new java.util.Date()%> TagLib : <p:hello/> </p>
Ceci peut galement permettre d'insrer d'autre langages de scripts (Perl, Php, Shell Script, etc.) au sein d'une page JSP...
Concrtement, cela signifie que si un tag implmente TryCatchFinally, les appels aux mthodes doXXXX() des interfaces Tag, IterationTag et BodyTag seront excut l'intrieur d'un bloc try/catch de la forme suivante :
try { ... tag.doStartTag(); ... tag.doInitBody(); ... tag.doAfterBody(); ... tag.doEndTag(); ... - 53 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
Le tag iterate est le parent du tag htmlCode et du tag htmlJspCode . htmlCode est lui mme parent du tag hello ... Mais il n'existe aucune parent entre htmlCode et htmlJspCode ... La mthode getParent() permet d'accder au tag parent , pour ventuellement interagir avec ce dernier. A Noter galement l'existence de la mthode statique TagSupport.findAncestorWithClass(Tag,Class) qui permet de rechercher un parent selon son type dans la hirarchie des tags..
- 54 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
Sommaire > Frameworks Web Quels sont les types de frameworks Web orient requte existant ?
Auteurs : X-plode : Mike Franois , Struts WebWork Spring MVC
- 55 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
- 56 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
- 57 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
- 58 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
- 59 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
- 60 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
- 61 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
- 62 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
Sommaire > Conteneurs Web et Serveurs d'Application > Conteneurs Web > Tomcat Comment ajouter le JAR de Jave EE dans Tomcat ?
Auteurs : paquerette , Si on ajoute j2ee.jar dans le rpertoire WEB-INF/lib d'une application sur Tomcat, il va y avoir un problme de compatibilit entre les Jar de Tomcat (servlet.jar) et celui de Java EE. C'est pourquoi, il faut rajouter ce Jar dans le fichier lib du JDK utilis par Tomcat et le retirer du dossier WEB-INF/lib.
<Context path="/Le_Contexte" reloadable="true" debug="0" docBase="Le_DocBase" workDir="Le_workDir"> <Ressource name="jdbc/Le_Contexte" auth="Container" type="javax.sql.DataSource"/> <ResourceParams name="jdbc/Le_Contexte"> <parameter> <name>user</name> <value>Le_Login_SGBD</value> </parameter> <parameter> <name>password</name> <value>Le_Password_SGBD</value> </parameter> <parameter> <name>driverClassName</name> <value>Le_Driver_SGBD</value> </parameter> <parameter> <name>url</name> <value>L_URL_Connection</value> </parameter> </ResourceParams> </Context>
- 63 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
<res-auth>Container</res-auth> </resource-ref>
try { Context initCtx = new InitialContext(); Context envCtx = (Context) initCtx.lookup("java:comp/env"); ds = (DataSource) envCtx.lookup("jdbc/Le_Contexte"); } catch (Exception e) { //Gestion de l'erreur }
sachant que ds est une variable d'instance de type DataSource. Quand on a besoin de l'accs a la base de donnes, on fait:
Connection conn=ds.getConnection();
ne pas oublier de librer avec un close aprs. On peut aussi prciser dans le serveur xml, le nombre de connection que l'on veut dans le pool (nb max, nb min, nombre en attente) Attention! Bien que cette FAQ mentionne cette possibilit, mettre la balise <context/> dans server.xml est fortement dconseill depuis tomcat 5.0! Prfrez l'utilisation d'un fichier context autonome. Pour en savoir plus sur la gestion d'un pool de connexion sous Tomcat
- 64 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
Depuis Tomcat 5.0, bien que ce soit toujours possible, il est dconseill de mettre la balise <context> dans le fichier server.xml. Dans la mesure du possible, il est bien plus prudent de grer des fichiers context autonome.
Exemple:
<servlet> <servlet-name>Controller</servlet-name> <display-name>Controller</display-name> <servlet-class>com.company.Controller</servlet-class> <init-param> <param-name>index</param-name> <param-value>/index.jsp</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
Ou enore le message
cause mere
Comment crer un compte utilisateur qui a les droits pour manager Tomcat ?
Auteurs : X-plode : Mike Franois , Afin de pouvoir crer un compte pour pouvoir accder l'interface de gestion du conteneur Web (afin de pouvoir retirer les applications dployes par exemple), il vous suffit d'accder directement ./conf/tomcat-users.xml. De base le fichier se prsente ainsi :
- 65 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/
La FAQ Java EE
<role rolename="manager"/>
<?xml version='1.0' encoding='utf-8'?> <tomcat-users> <role rolename="manager"/> <user username="adminTomcat" password="admin" roles="manager"/> </tomcat-users>
Suite a, vous pourrez vous authentifier sous Tomcat afin de pouvoir grer votre conteneur de servlets.
Comment utiliser une librairie DLL implemente par JNI sur un serveur TOMCAT ?
Auteurs : v1nc3kr0 , Il suffit tout simplement de rajouter l'option suivante :
-Djava.library.path=<chemin vers DLL>
- 66 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2003 - 2009 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://javaweb.developpez.com/faq/javaee/