Java EE Java Enterprise Edition Ce document a été contient des parties adaptées
Java EE Java Enterprise Edition Ce document a été contient des parties adaptées de support de cours de P.Y. Gibello, T. Dandelot et C. Dumoulin • Le contenu de ce site est mis à disposition selon les termes de la Licence Creative Commons Attribution - Partage dans les Mêmes Conditions 3.0 France. Introduction à JEE Historique – Architecture - Offre Historique Java 0 500 1000 1500 2000 2500 3000 3500 4000 4500 1.2 1.3 1.4.2 Java 5 Java 6 Java 7 nb classes JSE http://docs.oracle.com/javaee/6/api/ http://docs.oracle.com/javase/6/docs/api/ 0 500 1000 1500 2000 J2EE 1.2.1 J2EE 1.3 J2EE 1.4 Java EE 5 Java EE 6 nb classes JEE Java EE -‐‑ Objectifs • Faciliter le développement de nouvelles applications java à base de composants • Intégration avec les systèmes d’information existants • Support pour les applications « critiques » de l’entreprise – haute disponibilité, – tolérance aux pannes, – montée en charge, – sécurité – etc. Architecture • Décompose le système à concevoir en o applications, en composants applicatifs, o analyse descendante jusqu’aux modules, aux classes gestionnaires, aux fonctions ou méthodes • Modules ou Objets gestionnaire, pour l’architecture logicielle o Représente les fonctions du système o Implémente les fonctions et sous-fonctions des cas d’utilisation o Services (ou fonctions) de gestion de données • CRUD (Create, Read, Update, Delete) sur les données métier • Services de recherche sur les données métier o services métiers • Transactions / Paiements • Calculs 5 Architectures informatiques • Architectures pour une solution projet : o Architectures logiques • applicative, • métier o Architectures techniques • logicielle, • système, • réseau, • matérielle. 6 Architecture logique 4 /ers • IHM (ou GUI) : client • Frontal (ou front-‐end) : présenta/on • Dorsal (ou back-‐end) : mé/er • Persistence : base de données T1 T2 T3 T4 T2+T3 Mutualiser le code mé/er T1 T2 Site Web T3 T4 T2 Frontal API T1+T2 Java EE – C’est quoi? • http://java.sun.com/javaee • Spécifications • Modèle de programmation • Implémentation de référence • Standard en évolution depuis 1997 – J2EE 1.0 à 1.4 en 2003, etc... • Au départ, applications Web n-tiers – Présentation (Servlets puis JSP), essentiellement HTTP – Logique métier : EJB – Données : JDBC • Puis infrastructure de support standard pour EAI – Facteurs de rationalisation majeurs (JTA, JMS, JCA, Web Services) – Evolution de progiciels existants vers Java EE Architecture 4 tiers JEE public static void main(…) { Servlets JSPs EJBs WEB Container EJB Container Java EE Application Server DB EIS Browser Java Application JDBC JMS JTA JCA JAAS JavaMail JNDI … java/flash Applets HTTP SOAP, REST RMI / IIOP RMI / IIOP Appel local JVM html jdbc xxxx T1 T2 T1+T2 T1+T2 T3 T4 T4 Offre • Commerciale • Oracle (ex BEA) WebLogic • IBM Websphere (n°1) • Open Source • JBoss (n°1 en nombre de déploiements) • Oracle (ex Sun) Glassfish (« Platform edition ») • OW2 JOnAS • Apache Geronimo (« Community edition » de IBM Websphere) • openEjb • Open Source conteneur web uniquement : • Tomcat • Jetty Conteneur Web couche de présentation Servlet - WAR – JSP – taglib Conteneur Web 1/2 webapp Webapp Servlet Servlet Servlet Servlet Servlet html html html jsp jpg css web.xml html js jar Conteneur Web 2/2 • Contient des applications Web dans un répertoire • Une application web est une arborescence de fichier o mywebapp/WEB-INF/web.xml o mywebapp/WEB-INF/classes/*.class o mywebapp/WEB-INF/lib/*.jar o mywebapp/**/*.* • Un fichier « .war » est une archive zip de cette arborescence Application Web • Servlets • Code java exécuté sur le serveur pour retourner une page HTML • Génération de contenu Web dynamique • JSP: Java Server Pages o Mélange de HTML/XML et de code java o Librairies d ’extensions (« taglibs ») o Pré-compilation en servlet Servlet • Programme java appelable depuis une URL • Classe qui hérite de javax.servlet.http.HttpServlet • Cycle de vie de HttpServlet o init() : 1er appel o service() : chaque appel, redirection vers doGet() ou doPost() o destroy() : arrêt du serveur WEB • Appel d’une servlet • URL GET : http://myserver/mywapp/HelloWorld : doGet() • <form method="post" target="…"> : doPost(), Exemple de servlet import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html><body>"); out.println("<h1>hello word !</h1>"); out.println("</body></html>"); } } Ecrire une Servlet • Classe qui hérite de la javax.servlet.Servlet • Surcharger la méthode d ’initialisation init(), o Utiliser la méthode getInitParameter() • Surcharger une méthode de gestion d’appel o doPost(), doGet(), doPut(), doDelete(), doOptions() • Analyser la requête, o Classe HttpServletRequest • getParameter(), getCookie(), getSession() • Utiliser la classe HttpServletResponse pour répondre • getWriter(), setContentType(), setCookie() formulaire et Servlet • Champs des formulaires directement dans des variables : <FORM ACTION="testServlet" METHOD="POST"> Votre nom : <INPUT TYPE=TEXT NAME="nom"> Votre âge : <INPUT TYPE=TEXT NAME="age"> <INPUT TYPE=SUBMIT VALUE="Ok"> </FORM> • Dans TestServlet.doGet(), l’objet request contient les saisies: o request.getParameter("nom") o request.getParameter("age") public void doGet( HttpServletRequest request, HttpServletResponse response) ... { … out.println("Bonjour " + request.getParameter("nom")); … 19 Déployer une servlet • Recopier l’application web sous $tomcat/webapps o une archive .war ou o Un répertoire • Contenu de l’application web o sous-répertoire « WEB-INF/ » • web.xml : déclaration et paramètres de servlets • /lib/ : pour les .jar, • /classes/ pour les .class Déclaration de la servlet <web-‐‑app> <servlet> <servlet-‐‑name>servletHello</servlet-‐‑name> <servlet-‐‑class>HelloWorld</servlet-‐‑class> </servlet> <servlet-‐‑mapping> <servlet-‐‑name>servletHello</servlet-‐‑name> <url-‐‑paYern>/hello</url-‐‑paYern> </servlet-‐‑mapping> </web-‐‑app> hYp://localhost:8080/myapp/hello apache-tomcat-7.0.30/webapps/myapp/WEB-INF/web.xml Autour des Servlets • Gestion de la session : HttpServletRequest.getSession() o données de contexte à durée de vie courte o stockées sur le serveur o addAttribute(), getAttribute(), setMaxInactiveInterval() • Gestion des cookies : HttpServletRequest.getCookies() o données de contexte à durée de vie plus longue o stockées sur le poste client o setName(), setValue(), setMaxAge() • Filtre o Transforme des requêtes et/ou des réponses o Classe qui implémente javax.servlet .Filter o Déclaré dans web.xml comme une Servlet JSP • Java Server Pages • Intégration de code serveur dans un fichier HTML o mêmes principes que PHP o Code java dans des balises <%...%> o Les pages JSP ont l’extension « .jsp » • L’interpréteur JSP génère une classe de servlet « .java » par JSP o des variables accessibles dans des pages (session, application, request, response) 23 Exemple de JSP <%@page import="java.util.*" %> <HTML> <HEAD> <TITLE>Test HelloWorl en JSP</TITLE> </HEAD> <BODY> <% out.println("Hello world !"); out.println("Hello " + request.getParameter("name"); %> <p>Today is <%= new Date() %> </BODY> </HTML> 24 Directive Scriptlet Expression interprétation script 25 Hello world Today number is 19 <HTML> <BODY> Hello world ! <script type="text/javascript"> <!– var now = new Date(); document.write("today is " + now.getDay()); //--> </script> </BODY></HTML> <HTML> <BODY> <%="Hello world !"%> <script type="text/javascript"> <!– var now = new Date(); document.write("today is " + now.getDay()); //--> </script> </BODY></HTML> Coté serveur Coté client Vue utilisateur interprétation client interprétation serveur variables prédéfinies JSP • out : flux de sortie dans la réponse HTTP au client. o utiliser println() • request : objet représentant la requête HTTP o utiliser getParameter("name"), getCookies(), forward() • response : objet représentant la réponse HTTP o out est retournée par response.getWriter() o utiliser setCookie(new Cookie("name","value")) • session : objet représentant la session HTTP o utiliser setAttribute("name"), getAttribute("name"), removeAttribute("name") o La session de l’utilisateur est retourner par request.getSession(false) o request.getSession(true) crée et retourne une nouvelle session (déconnexion ou logout) • pageContext : objet représentant le contexte d'une page • Facilite l'accès au contexte de l'application web • utiliser setAttribute("name") pour donner des paramètres aux taglibs • Utiliser foward("url") pour déléguer la réponse à une autre page formulaire et JSP • Champs des formulaires directement dans des variables : <FORM ACTION="test.jsp" METHOD="POST"> Votre nom : <INPUT TYPE=TEXT NAME="nom"> Votre âge : <INPUT TYPE=TEXT NAME="age"> <INPUT TYPE=SUBMIT VALUE="Ok"> </FORM> • Dans test.jsp, l’objet request contient les saisies: <% request.getParameter("nom") request.getParameter("age") %> • On peut écrire en réponse dans test.jsp: ... Bonjour <% out.println(request.getParameter("nom")); %> ... 27 syntaxe JSP • <% … %> : scriptlet • <%! … > : déclaration servlet <%! int myVariable = 0; %> • <%-- Voici un commentaire JSP --%> • <%= … %> : expression (pas de ; final) • <%@... %> : directive <%@page import="…", <%@include page="url" • <jsp:…> : tag jsp <jsp:include>, <jsp:forward> • TagLib JSTL <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> • Autres TagLib : Struts2, Tiles, Spring MVC, etc. Librairie URI Préfixe core hYp://java.sun.com/jsp/jstl/core c Format hYp://java.sun.com/jsp/jstl/fmt fmt XML hYp://java.sun.com/jsp/jstl/xml x SQL hYp://java.sun.com/jsp/jstl/sql sql Fonctions hYp://java.sun.com/jsp/jstl/functions fn Forward vs redirect • Forward utilisable dans un même war • Redirect sinon Page A Page B Page C forward redirect this.getServletConfig().getServletContext().getRequestDispatcher( "ʺ/JSP/Demo.hello.jsp"ʺ).forward(request,response); <jsp:forward page="ʺ/jsp/welcome.jsp"ʺ/> Forward pour les erreurs Page1.jsp Nb pizza incorrect … <% if (nbPizza<=0) { %> <jsp:forward page="ʺPage1.jsp"ʺ> <jsp:param name=”errMsg"ʺ value=”Nb pizza incorrect"ʺ /> </jsp:forward> <% } %> Page 2.jsp -2 Utilisation des taglibs 1/2 • Rajout des jars correspondant dans WEB-INF/lib o WEB-INF/lib/jstl.jar o WEB-INF/lib/standard.jar • Exemple : <%@ taglib uri="ʺhYp://java.sun.com/jsp/jstl/fmt"ʺ prefix="ʺfmt"ʺ %> <html><body> <% pageContext.setAYribute("ʺnow"ʺ,new java.util.Date()); %>"ʺ … <fmt:formatDate paYern="ʺyyyy-‐‑MM-‐‑dd"ʺ value="ʺ${now}"ʺ /> … </body></html> Utilisation des taglibs 1/2 … code HTML … <jsp:useBean id=“user” class=“com.acme.EndUser” scope=“session” /> … uploads/Management/ java-ee.pdf
Documents similaires
-
23
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Sep 06, 2021
- Catégorie Management
- Langue French
- Taille du fichier 7.1002MB