La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Serveur dapplications JEE F.Renault. Introduction Java à la maison, java au boulot, java sur le chemin Le «Java Framework» (Java 2 Platform) est composé

Présentations similaires


Présentation au sujet: "Serveur dapplications JEE F.Renault. Introduction Java à la maison, java au boulot, java sur le chemin Le «Java Framework» (Java 2 Platform) est composé"— Transcription de la présentation:

1 Serveur dapplications JEE F.Renault

2 Introduction Java à la maison, java au boulot, java sur le chemin Le «Java Framework» (Java 2 Platform) est composé de trois éditions, destinées à des usages différents : J2ME : Java 2 Micro Edition est prévu pour le développement d'applications embarquées, notamment sur des assistants personnels et terminaux mobiles ;assistants personnels J2SE : Java 2 Standard Edition est destiné au développement d'applications pour ordinateurs personnels ; J2EE : Java 2 Enterprise Edition, destiné à un usage professionnel avec la mise en oeuvre de serveurs. Chaque édition propose un environnement complet pour le développement et l'exécution d'applications basées sur Java et comprend notamment une machine virtuelle Java (Java virtual machine) ainsi qu'un ensemble de classes.

3 Définition de J2EE J2EE (Java 2 Enterprise Edition) est une norme proposée par la société Sun, portée par un consortium de sociétés internationales, visant à définir un standard de développement d'applications d'entreprises multi-niveaux, basées sur des composants. Cela concerne larchitecture des logiciels On parle généralement de «plate-forme J2EE» pour désigner l'ensemble constitué des services (API) offerts et de l'infrastructure d'exécution. J2EE comprend notamment : Les spécifications du serveur d'application, c'est-à-dire de l'environnement d'exécution : J2EE définit finement les rôles et les interfaces pour les applications ainsi que l'environnement dans lequel elles seront exécutées. Ces recommandations permettent ainsi à des entreprises tierces de développer des serveurs d'applications conformes aux spécifications ainsi définies, sans avoir à redévelopper les principaux services. Exemple de serveur dapplication : Sun Java server Glassfich WebLogic Application Server Un serveur dapplication bien connu : TOMCAT Ce nest finalement quun serveur JEE partiel comme on pourra le voir plus tard, il nimplémente quune partie des spécifications J2EE. Des services, au travers d'API, c'est-à-dire des extensions Java indépendantes permettant d'offrir en standard un certain nombre de fonctionnalités. Sun fournit une implémentation minimale de ces API appelée J2EE SDK (J2EE Software Development Kit). Ainsi des bibliothèques de classes supplémentaires sont disponibles pour créer des logiciels aux fonctionnalités adaptées aux serveurs dapplications.

4 Les Api de J2EE Les API de J2EE peuvent se répartir en trois grandes catégories : Les composants. On distingue habituellement deux familles de composants : Les composants web : Servlet et JSP (Java Server Pages). Il s'agit de la partie chargée de l'interface avec l'utilisateur (on parle de logique de présentation). Les composants métier : EJB (Enterprise Java Beans). Il s'agit de composants spécifiques chargés des traitements des données propres à un secteur d'activité (on parle de logique métier ou de logique applicative) et de l'interfaçage avec les bases de données. Ces deux types de composant sont mis en place par le biais de conteneurs. On parle de conteneur de servlets ou de conteneur EJB

5 Les Api de J2EE Les services, pouvant être classés par catégories : Les services d'infrastructures : il en existe un grand nombre, définis ci-dessous : JDBC (Java DataBase Connectivity) est une API d'accès aux bases de données relationnelles. JNDI (Java Naming and Directory Interface) est une API d'accès aux services de nommage et aux annuaires d'entreprises tels que DNS, NIS, LDAP, etc. JTA/JTS (Java Transaction API/Java Transaction Services) est un API définissant des interfaces standard avec un gestionnaire de transactions. JCA (J2EE Connector Architecture) est une API de connexion au système d'information de l'entreprise, notamment aux systèmes dits «Legacy» tels que les ERP.ERP JMX (Java Management Extension) fournit des extensions permettant de développer des applications web de supervision d'applications. Les services de communication : JAAS (Java Authentication and Authorization Service) est une API de gestion de l'authentification et des droits d'accès. JavaMail est une API permettant l'envoi de courrier électronique. JMS (Java Message Service) fournit des fonctionnalités de communication asynchrone (appelées MOM pour Middleware Object Message) entre applications. RMI-IIOP est une API permettant la communication synchrone entre objets. Tous ces services sont donnés par des librairies de classes à partir desquelles on pourra créer facilement des objets utiles aux applications. Le cas typique JavaMail L'architecture J2EE permet ainsi de séparer la couche présentation, correspondant à l'interface homme-machine (IHM), la couche métier contenant l'essentiel des traitements de données en se basant dans la mesure du possible sur des API existantes, et enfin la couche de données correspondant aux informations de l'entreprise stockées dans des fichiers, dans des bases de données relationnelles ou XML, dans des annuaires d'entreprise ou encore dans des systèmes d'informations complexes.

6 Schema Serveur JEE complet Tomcat

7 Comparaison de serveurs…. Apache Serveur web simple : Pas de page dynamiques Fournisseur de fichiers Apache + CGI Comme un plug-in, permet à apache de rendre ses pages web dynamiques. Apache + php Plus connu aujourdhui, et plus simple à mettre en œuvre que cgi, php et son interpréteur mais il suis le même schéma. Cest sa bibliothèque dobjets qui le rend souple et la possibilité depuis php5 davoir une programmation objet plus normalisée permet des développements de bonnes envergures. Cependant…quelques limites… Apache + java …. TOMCAT Tomcat est un serveur dapplication plus évolué car cette fois, il ne se contente pas de rediriger les requêtes utilisateurs vers un programme simple ou comme php vers un interpréteur. Au lancement de tomcat, qui est écrit en java dailleurs, un conteneur de servlets est mis en place. Cest lui qui va gérer les redirections et créer un contexte pour les applications java. Il met aussi en place linterprèteur JSP…

8 Conteneur de servlet Logiciel démarré au lancement du serveur et actif à plein temps : Fait le pont entre le monde web(requêtes utilisateur http) et le monde java Possède son propre contexte Paramétrable par des fichiers xml (dans ses répertoires) ou un logiciel adapté : Serveur.xml Context.xml Web.xml Crée un contexte pour chaque application web Paramétrable par des fichiers xml dans le répertoire de chaque application : Le serveur cumul les informations globales et locales, les fichiers ont dailleurs les mêmes noms. Serveur.xml Context.xml Web.xml Nous travailleront essentiellement sur ces fichiers locaux. On peut voir un contexte comme une bulle dans laquelle vit lapplication, le serveur en définit les limites. Un espace mémoire réservé Un système de fichier dont une structure minimale est imposée et dont la racine définit le contexte. On parle aussi de chemin de contexte. Des ressources générales misent à disposition : Accès à une base de données (Datasources) Accès à des objets partagés entre les applications Des ressources spécifiques à une application. Gestionnaire des servlets et pages jsp, il peut filtrer des requêtes destinées à lun ou lune en particulier ou pour toute l application(Pour des statistiques par exemple) Gestionnaire des espaces mémoires, il peut écouter les modifications associées à des objets fabriqués par pour lapplication, les objets de contexte (modification dune session utilisateur par exemple) Gestionnaire des requêtes entrantes, il peut définir des droits daccès pour certaines ressources en fonction de lutilisateur, en fonction de ladresse ip du client ect…

9 Schéma : pour se faire une idée Contexte serveur Contexte dapplication Web.xml Context.xml Listener Filter Ressources. Listener Filter Ressources. Crée les objets java Request et Response. Lit les fichiers de config généraux et du contexte dapplication, crée Les objets implicites Si des filtres ou écouteurs généraux sont définit, ils sont appelés et ont accès aux objets créés ci-dessus. Ensuite idem pour les filtres et écouteurs de lapplication. Enfin passe le relai à le serlet. Rend la réponse de le serlet et/ou exécute les actions quelle demande. Request Response Objets implicites Web.xml Server.xml Context.xml Servlet Représentant la requête http de lutilisateur et la réponse à lui revoyer, encore vierge.

10 Servlet : Principe de base On demande une ressource http à un serveur web Le serveur passe la requête à un programme relai (le conteneur web, actif dès le démarrage du serveur) qui va instancier une classe java capable de gérer la requête et générer une réponse (cest la boucle de lappel). Le conteneur donne aussi au passage, un ensemble dinformations sur lui-même Une fois instanciée, cette classe reste en attente de sollicitations. La réponse est rendue au conteneur puis au client( fin de la boucle). Client Serveur WEB Conteneur de Servlet Servlet1 Request Response

11 Servlet : en pratique Une classe java pur qui herite de GenericServlet ou HttpServlet On ne lintancie pas (pas de new MaServlet), cest le conteneur de servlet qui se charge de tout le cycle de vie de lobjet. Création Initialisation Appel de ses méthodes Mise à disposition dobjet implicites Destruction On pense environnement comme en développement windows avec c++ et les fonctions de callback, en java avec les listeners et la machine virtuelle, cette fois, cest au conteneur quil faut penser.

12 Servlet : Anatomie SERVLET Accède à des objets dinformations sur le conteneur init() destroy() service(req, res) doGet(req, res) doPost(req, res) Conteneur -Crée les objets Req et Resp -Appel init() à linstanciation de le servlet -Appel à service() avec les objets req et resp Si une requête est destinée à la servlet : Service défini si la requête est de type post ou get et appel doGet() ou doPost en fonction. -Appel à destroy() lorsque le conteneur sarrête par exemple HttpServletGenericServlet

13 Du code ! import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class PremiereServlet extends HttpServlet { public void init() { } public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html"); PrintWriter out = res.getWriter(); out.println(" "); out.println(" Titre "); out.println(" "); out.println("Ma première servlet"); out.println(" "); out.close(); }

14 Servlet package servlets; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class NewServlet extends HttpServlet { protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); public String getServletInfo() { return "Short description"; }

15 JSP Dans sa forme une page jsp est un fichier texte qui comporte du code HTML que lon peut enrichir de code java à travers des balises (tags) spécifiques. La page jsp sapparente à une page php mais cache beaucoup plus de ressources. La page est prise en charge par le conteneur de servlet, en effet, au premier appel de celle-ci, le conteneur va construire une servlet à partir du fichier jsp à laide dun interpréteur. Mécanisme : Le fichier page.jsp est parser par linterpreteur qui construit un nouveau fichier texte page_servlet.java. Le fichier page_servlet.java est compilé, rendant une servlet transparente au développeur accessible par le chemin de la page jsp.

16 JSP : Phase de traduction

17 Du code ! Page JSP <% //Il est possible d'écrire du code Java ici Date date = new Date(); // On peut incrémenter une variable globale pour compter le nombre // d'affichage, par exemple. nombreVisites++; %> Exemple de page JSP Au moment de l'exécution de ce script, nous sommes le. Cette page a été affichée fois!

18 Schémas Client Serveur WEB Conteneur de Servlet Contexte App1 Contexte App2 Contexte App3 Web.xml Server.xml Context.xml Web.xml Context.xml Web.xml Context.xml Web.xml Context.xml Servlet 1 Servlet 2 Servlet 3 Interprète JSP Ressources

19 Sénario 1 : Appel dune servlet 1) Requête du client au serveur 2) Le serveur oriente la requête vers le conteneur 3) Le conteneur créer ici des objets java qui seront utilisables par la servlet (objets implicites) 4) Le conteneur recherche la Servlet2 dans le contexte App1. Cest le fichier web.xml de App1 qui va lui donner les informations necessaires 5) Le conteneur passe les objets implicites à la servlet 6) La servlet utilise les objets implicites (ou pas), créer une réponse 7) La réponse est remise au serveur web (par le conteneur en fait) qui se charge de la renvoyer au client. Le conteneur englobe toutes les servlets et gère le cycle de vie, leur création, initialisation, destruction. Nous verrons quil peut aussi mettre à disposition de celles-ci des ressources supplémentaires, intercepter des requêtes destinées à une application ou une servlet précise…

20 Schémas Client Serveur WEB Conteneur de Servlet Contexte App1 Contexte App2 Contexte App3 Web.xml Server.xml Context.xml Web.xml Context.xml Web.xml Context.xml Web.xml Context.xml Servlet 1 Servlet 2 Servlet 3 Interprète JSP MaPage.jsp Servlet_ MaPage Ressources

21 Sénario 2 : Appel dune page JSP 1) Requête du client au serveur 2) Le serveur oriente la requête vers le conteneur 3) Le conteneur créer ici des objets java qui seront utilisables par la serlet (objets implicites)…mais quel servlet ??? Les pages jsp sont en réalité transformées en servlet et le traitement est exécuté par cette dernière lorquelle est disponible. À la première demande dune page jsp, la serlet qui lui correspond nexiste pas ! Le conteneur sait quil faut alors la créer et passe la demande à linterpreteur JSP pour maPage.jsp 4) Pas de servlet pour cette requête jsp, linterprèteur le crée et le met à disposition pour le contexte dApp3 Attention, ceci est transparent pour le programmeur. Il ne verra pas se créer la serlet, celle-ci se cache dans larborescence de tomcat (cf TD) 5) Le conteneur passe les objets implicites à la serlet 6) Le servlet utilise les objets implicites (ou pas), créer une réponse 7) La réponse est remise au serveur web (par le conteneur en fait) qui se charge de la renvoyer au client. Remarque : attention aux abus de language… passez lobjet cest lui donner une référence. En réalité les choses se partagent et ne se transfert pas. La machine java est derrière tout ces méchanismes. La Page JSP est transformée une seule fois en servlet au premier appel, lexecution est donc plus lente à ce moment, mais les requêtes suivantes seront rapides car le conteneur utilisera directement la serlet produite.

22 Application web : structure

23 Une structure minimale dune application web est imposée par les spécifications J2EE. Assembly Root : Répertoire racine de lapplication. META-INF : Répertoire méta informations sur lapplication On y trouvera des fichiers de configuration utilisés par lapplication directement ou des ressources spécifiques (persistence.xml, struts-config.xml etc...) WEB-INF : Répertoire informations web contient 3 sous répertoires : lib : Répertoires des jars utilisés par lapplication. Il complète les bibliothèques misent à disposition par le serveur. classes : Répertoire des class compilées du projet tags : Répertoire des librairies de tags personnalisés (ou pas) pour lapplication. Fichier web.xml : Descripteur de déploiement de lapplication. Fichier très important pour le développeur il recense toutes servlets, pages jsp et dautres ressources auxquelles fait appel lapplication (source de donnée, filtres, écouteurs etc..)

24 Vue de développeur Arborescence NetBeanArborescence Eclipse

25 Descripteur de déploiement : web-xml Un aiguilleur Un aiguilleur pour les requêtes Le serveur doit pouvoir retrouver les servlets quil doit atteindre à partir de la requête du client. Pour cela le fichier web.xml décrit un mapping de correspondance en deux étapes: 1) La servlet est nommée Servlet exemple Hello com.test.servlets.Hello 2)La servlet est associée à une url Hello com.test.servlets.Hello

26 Descripteur de déploiement : web-xml Un paramètreur Ajouter des paramètres pour lapplication On peut définir des constantes textuelles accessibles dans tout le contexte de lapplication MON_PARAM valeurDe MON_PARAM Il seront accessibles aux servlets par le biais de lobjet implicite servletConfig getServletContext().getInitParameter("MON_PARAM"); Ajouter des paramètres pour une servlet Sur le même schéma que précédemment, on définit cette fois des paramètres dinitialisation entre les balises de le serlet concernée: maServlet Ma Servlet com.servlet.MaServlet MON_PARAM Bonjour Accessible par : getInitParameter("MON_PARAM");

27 Descripteur de déploiement : web-xml Un surveillant Il peut aussi mettre en place un Listener pour le contexte. Cette classe particulière réagit quand le contexte de lapplication est initialisé ou détruit. Pour la créer, il suffit décrire une classe qui implémente linterface ServletContextListener public class MyHttpServletContextListener implements ServletContextListener { /** Cette méthode appelée lors du démarrage de l'application*/ public void contextInitialized(ServletContextEvent sce) {System.out.println("L'application vient de démarrer"); } /** Cette méthode appelée lors de l'arret de l'application*/ public void contextDestroyed(ServletContextEvent sce) { System.out.println("L'application vient de s'arreter"); } } Ensuite pour la mettre en œuvre, on place sa définition dans le fichier web.xml : com.test.MonListenerDeContexte Ces fichiers java sont écrit dans lEDI, répertoire de fichiers sources qui se charge généralement de la compilation et place automatiquement les fichiers.class générés dans le répertoire adéquat. Nous verrons plus loin comment déployer lapplication sur le serveur.

28 Descripteur de déploiement : web-xml Un gardien Des filtres peuvent aussi être placés en fonction de la ressource à atteindre. Cela agît comme un aiguillage en boucle, on passe par le filtre avant datteindre la ou les urls designées dans un mapping. Pour créer un filtre on implémente cette fois linterface Filter public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) Implements Filter throws IOException, ServletException { //Actions du filtre…… chain.doFilter(request, wrapper); } La mise en place se fait en agrémentant le fichier web.xml monFiltre my.package.doFilter monFiltre /* Le mapping permet de définir quelles requêtes seront dirigées vers le filtre. REMARQUE : Depuis la version 3.0 des servlets, il est possible de zapper le fichier web.xml en utilisant des annotations directement dans le code qui seront comprises par le serveur ou à la compilation.

29 Descripteur de contexte : Context.xml Des ressources supplémentaires et gérées par le serveur peuvent être misent à disposition dune application. Le fichier context.xml décrit ces ressources, ici une DataSource :

30 Descripteur de contexte : Context.xml La DataSource précédemment décrite sera accessible ensuite aux servlets de lapplication : // Get DataSource Context ctx = new InitialContext(); DataSource ds =DataSource)ctx.lookup("java:comp/env/jdbc/mydatabase"); // Get Connection and Statement Connection c = ds.getConnection(); Statement s = c.createStatement(); Le serveur gère un espace de noms qui permet de stocker des objets hiérarchisés en arborescence (Comme des répertoires) La racine pour chaque application sera java:comp/env Le descripteur de contexte y place au chargement de lapplication une source de donnée, Objet DataSource quil sait instancier automatiquement. Il le place pour nous en « jdbc/mydatabase » relativement à la racine Lorsque lon veut utiliser cette ressource, il faut récupérer le contexte puis la datasource.

31 Descripteur de contexte : Context.xml Lintérêt de la DataSource : -Déclarée dans Contexte.xml, elle est à disposition de toute lapplication et cest le serveur qui va gérer lunicité ou un pool de connexions avec la base. -Il existe un autre fichier Context.xml qui lui est associé au serveur lui-même et non pas à lapplication et travailant de paire avec un fichier Server.xml. - Une DataSource déclarée dans ces fichiers pourra donc être mise à disposition de toutes les applications situées sur le serveur. Un seul chemin vers la base de données complètement géré par le serveur.

32 Servlet en pratique Accès à la requête utilisateur Accès au contexte de lapplication Accès à la réponse Création de beans Redirection

33 Les objets implicites Response : Paramètre de la méthode service Cest un lien avec la réponse envoyée au client qui est accessible par un buffer texte. On y trouve un ensemble de propriétés qui vont définir le format et les caractéristiques de renvoyées. Sa principale utilité est un accès direct au buffer pour y écrire : On écrit une réponse cest-à-dire du code HTLM par exemple. Il est possible de définir un autre format qui indiquera au client que lon envoie un fichier texte simple, pdf ou tout autre en définissant la propriété ContentType. Les méthodes de lobjet parlent delles même : Par exemple setHeader : redéfinit lentête de réponse La date du fichier, un code derreur etc… Ajout dun cookie (Class cookie puis response.setCookie) Request : Paramètre de la méthode service Accès aux propriétés de la requête émise par lutilisateur Récupération des paramètres de la requête Accès aux attributs de requêtes, se sont des objets java stockés dans une Map en mémoire et disponibles tant quune réponse définitive nest pas renvoyée. Accès à la lobjet session qui lui stocke de la même manière que précédemment des objets java qui eux seront gardés en mémoire pour toute la session utilisateur. Cest lobjet idéal pour créer un panier pour un site dachats en ligne par exemple ou encore stocker les caractéristiques dun client pour une interface personnalisée. Accès aux cookies de lutilisateurs.

34 session: Instance de la classe javax.servlet.http.HttpSession, cet objet est par défaut disponible à toutes les pages qui participe à une session(jsp : sauf si l'attribut session de la directive page est positionné à faux.) Il permet d'accéder aux objets dont la portée est session via la méthode getAttribute. out: Instance de la classe javax.servlet.jsp.JspWriter, cet objet représente le canal de sortie utilisé pour communiquer la réponse au client (navigateur).Buffer texte application: Instance de la classe javax.servlet.ServletContext, cet objet contient le contexte de la servlet. context: Instance de la classe javax.servlet.jsp.PageContext, cet objet permet d'accéder à différentes informations sur l'environnement du serveur. config: Instance de la classe javax.servlet.ServletConfig, cet objet permet d'accéder à la configuration de la servlet. Pour les pages jsp nous verrons des objets ajoutés. page: instance de la classe java.lang.Object, cet objet désignant la page JSP elle même, c'est l'équivalent à this de Java. Prévu initialement pour permettre l'accès des objets Java lorsqu'un autre langage de script était utilisé. exception: instance de la classe java.lang.Throwable, cet objet représentant un exception non interceptée par le code Java, très utile dans les pages d'erreur. Les objets implicites (servlet et jsp)

35 Les Attributs, objets de communication. Le serveur met à disposition du programmeur des espaces mémoires afin de stocker des objets de toutes sortes nommés attributs. Un attribut est caractérisé par un nom unique auquel est associé lobjet stocké comme dans une map. Exemple : Personne p_roger = new Personne(« roger »); Request.setAttribute(« roger »,p_roger); Pour récupérer lobjet on passe par la clef et on caste en spécifiant le type. Personne untel = (Personne)request.getAttribute(« roger ») La méthode renvoi soit null, soit une instance de la classe java Object quil faut donc caster. Qui peut stocker des attributs : request, session, application : ce qui définit la portée de lattribut, appelé aussi le scope. Suivant lobjet qui stocke lattribut et donc suivant son cycle de vie dans le serveur, lattribut sera disponible plus ou moins longtemps. Sur une requête, une session, ou sur lapplication entière.

36 Scope : request Un objet disponible au fil de la requête : Request.setAttribute

37 Scope : Session Objet disponible sur la session utilisateur: Request.getSession().setAttribute

38 Scope : Application Objet disponible pour dans toute lapplication, pour tout les utilisateurs. getServletContext().setAttribute(« nom »,objet); Application.setAttribute(« nom »,objet);

39 RequestDispatcher Aiguiller et transmettre la requête utilisateur. Cet objet très important permet à une servlet de passer le relais à une autre ou vers une jsp. Transmettant les objets request et response. Il accède au différentes ressources en se basant sur le chemin depuis la racine ou relativement à la servlet qui linvoque. Methode : forward Inclure le résultat dune servlet ou dune jsp Methode : include

40 On sy retrouve ? SERVLET response Session utilisateur Attributes request attributes parametres Servletconfig Servletcontext InitParameters Web.xml ServletName Web.xml Attributes Parametres Web.xml ServletDispatcher

41 Les objets du développeur Les servlets forment linterface avec le serveur. Elles sont sollicités par des requêtes externes (utilisateur, liens, formulaires) ou internes (autres servlet requestDispatcher). Lorsquon développe une application, on a bien sur besoin dobjets spécifiques : Objets réalisants des traitements Objets représentants des entités (personne ou autres) Objets de connections à une base de données Objet de communication entre objets de lapplication, etc. Ces types dobjets se créent dans le répertoire source de lapplication et sont à disposition des servlets Suivant leurs fonctions, certains auront de multiples instances et il est judicieux pour dautres dêtre uniques dans une session ou une application.

42 Design dapplication : définitions des rôles de nos objets. Servlets : Objets capables de manipuler les requêtes et les réponses, dutiliser les ressources de lapplication (objets du développeur) comme celles du serveur. Request, response Objets des packages sources Objets des packages java standards Objets des packages dentreprise JDK Objets des librairies du serveur Objets des librairies du répertoire WEB-INF/lib Mais il est pénible de coder une réponse HTML dans une servlet. JSP : On sait quelles sont en réalité des servlets, mais gérées par le conteneur, elles peuvent donc réaliser tout ce que les servlets peuvent faire mais ce nest pas leur but principal. Leur fonctionnalité première et de simplifier le codage des réponses HTML et donc dêtre orientées WEB. Elles seront donc la base des interfaces avec le client.

43 Jsp formulaire Jsp Réponse Objets Programmeur appelle utilise

44 Jsp formulaire Jsp Réponse Objets Programmeur Servlet traitement appelle utilise redirige

45 Jsp formulaire Jsp Erreur Servlet aiguillage 1 appelle utilise 2.1 Erreur de paramètres Jsp Réponse traitement 3.1 redirige Servlet traitement Objets Programmeur Vérifie les paramètres Objets Programmeur Traitement 3.2 réponse 4 réponse

46 Pause

47 JSP en pratique Une JSP est un fichier texte Il contient du code html (appelé template) et des balises spécifiques permettant de coder en java les scriptlets. Transformée par le serveur en servlet Tout ce quune servlet peut faire, une jsp peut le faire Il est utile daller voir le fichier java correspondant à la servlet générée afin de bien comprendre et situer ce que les balises de tags jsp produisent. Répertoire work pour tomcat

48 Transition : JSP => Servlet JSP Page Hello JSP World!

49 Transition : JSP => Servlet package org.apache.jsp; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*; public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent { private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory(); private static java.util.List _jspx_dependants; private javax.el.ExpressionFactory _el_expressionfactory; private org.apache.AnnotationProcessor _jsp_annotationprocessor; public Object getDependants() { return _jspx_dependants; } public void _jspInit() { _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory(); _jsp_annotationprocessor = (org.apache.AnnotationProcessor) getServletConfig().getServletContext().getAttribute(org.apache.AnnotationProcessor.class.getName()); } public void _jspDestroy() { }

50 public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { PageContext pageContext = null; HttpSession session = null; ServletContext application = null; ServletConfig config = null; JspWriter out = null; Object page = this; JspWriter _jspx_out = null; PageContext _jspx_page_context = null; try { response.setContentType("text/html;charset=UTF-8"); pageContext = _jspxFactory.getPageContext(this, request, response,null, true, 8192, true); _jspx_page_context = pageContext; application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); _jspx_out = out; out.write("\n"); out.write("\n"); out.write("\n"); out.write(" JSP Page \n"); out.write(" \n"); out.write(" Hello JSP World! \n"); out.write(" \n"); } catch (Throwable t) { if (!(t instanceof SkipPageException)){ out = _jspx_out; if (out != null && out.getBufferSize() != 0) try { out.clearBuffer(); } catch (java.io.IOException e) {} if (_jspx_page_context != null) _jspx_page_context.handlePageException(t); } } finally { _jspxFactory.releasePageContext(_jspx_page_context); }

51 Cycle de vie Identique aux servlet jspInit() _jspService() jspDestroy() Ces méthodes sont utilisées comme celles des servlets et sont redéfinissables On pourrait imaginer modifier init() tout court mais le server lutilise pour la génération de servlet de manière plus complexe, il est donc mis a disposition ces fonctions pour éviter des « collisions »

52 Eléments de script Quatres types déléments de script : Les directives : indiquent à la pages les informations globales (par exemple les instruction dimportations) Les déclarations : destinées à la déclaration de méthodes et de variables à léchelle dune page Les scriplets : code Java intégré dans la page Les expressions : sous forme de chaîne, en vue de leur insertion dans la sortie de la page

53 JSP : les directives de page Page : informations relatives à la page Include : fichiers à inclure littéralement Taglib : URI dune bibliothèque de balises utilisée dans la page page [language="java"] [extends="package.class"][import="{package.class|package.*},..."] [session="true|false"] [buffer="none|8kb|sizekb"] [autoflush="true|false"] [contentType="mimeType [charset=characterSet]" | "text/html;charset=ISO "] [iserrorPage="true|false"] %>

54 JSP : les directives de page Définir les "import" nécessaires au code Java de la JSP Définir le type MIME du contenu retourné par la JSP Fournir l'URL de la JSP à charger en cas d'erreur Définir si la JSP est une page invoquée en cas d'erreur Déclarer si la JSP peut être exécutée par plusieurs clients à la fois

55 JSP : les directives de page

56 JSP : les directives dinclusion – Permettent dinclure le contenu dun autre fichier dans la page JSP courante – Inclusion effectuée avant la compilation de la jsp

57 JSP : les directives dinclusion

58 JSP : les balises personnalisées – Permettent dindiquer une bibliothèque de balises adresse et préfixe, pouvant être utilisées dans la page

59 JSP : les déclarations – Permettent de déclarer des méthodes et des variables dinstance connus dans toute la page JSP

60 Les scriplets

61

62 Les expressions

63 Les commentaires

64 JSP : éléments de script-objets implicites

65 JSP : les éléments daction

66

67 JSP : include/param

68

69 JSP : forward

70 JSP : useBean

71 JSP : useBean-Java Bean

72

73

74

75 JSP : useBean

76 JSP : get/setproperty

77

78

79 Combinaison Servlet et JSP

80

81

82


Télécharger ppt "Serveur dapplications JEE F.Renault. Introduction Java à la maison, java au boulot, java sur le chemin Le «Java Framework» (Java 2 Platform) est composé"

Présentations similaires


Annonces Google