Cours JSF PDF [PDF]

  • 0 0 0
  • Gefällt Ihnen dieses papier und der download? Sie können Ihre eigene PDF-Datei in wenigen Minuten kostenlos online veröffentlichen! Anmelden
Datei wird geladen, bitte warten...
Zitiervorschau

Java EE

Les applications Web JAVA

Les objectifs ●

Avoir une vision globale du développement d'application Java EE



Mettre en œuvre des exemples simples



Comprendre et éviter les pièges du débutant



Pouvoir aller de l'avant par soi-même pour approfondir chaque brique technique

Les applications multi-tiers ●





Le client (Web ou Lourd) appelle un service hébergé sur un serveur



Le serveur Web gère les parties IHM et présentation Le ou les serveurs de traitement exécute(nt) la logique métier ainsi que la synchronisation des données La base de données s'occupe de stocker les données

Le jeux de piste ● ●

● ● ● ●

HTML/XML/CSS JavaScript Applet Java

● ● ●

Servlet JSP JSF Rest

● ● ● ● ●

Navigateur JVM

Tomcat GlassFish …

EJB JPA (+ORM) : ● Hibernate ● EclipseLink JTA JMS JDBC JNDI JAAS

Tomcat GlassFish …

● ●

SQL « Proc-Stock »

Oracle MySQL JavaDB

Applet ●

C'est quoi ? –

Du code Java SE traditionnel qui s'exécute dans un contexte particulier d'accès limité aux ressources



La classe « main » de démarrage doit étendre l'une des classes suivantes : java.applet.Applet ● javax.swing.JApplet Le cycle de vie du code correspond à l'exécution des méthodes ●



init() : appelée 1 fois après son chargement ● start() : appelée lorsque l'applet est visible (votre main) ● stop() : appelée lorsque l'applet n'est plus visible ● destroy() : appelée 1 fois après sa destruction Le reste du code est le même que pour une application Java traditionnelle « awt » ou « swing » ●



Applet ●

Où cela s'exécute ? –

Dans une JVM démarrée par le navigateur client suite à la lecture d'une balise HTML«  »



Mais attention le code n'accède pas à toutes les ressources locales (fichiers et réseaux)  ● ● ●

Par défaut le code s'exécute dans une SandBox Signature du code : possibilité d'accéder aux ressources locale Possibilité de gérer l'accès aux ressources avec des fichiers « policy »



grant Principal Administrateur "root" { permission java.util.PropertyPermission "java.home", "read"; permission java.util.PropertyPermission "user.home", "read"; permission java.io.FilePermission "c:\\foo.txt", "write,read"; }; grant Principal Etudiant { permission java.io.FilePermission "c:\\foo.txt", "read"; };

Servlet ●

C'est quoi ? –

Du code Java qui répond aux requêtes HTTP GET, POST, PUT, DELETE, HEAD, TRACE



La classe « main » de démarrage doit étendre la classe javax.servlet.http.HttpServlet nb : il peux y avoir plusieurs classes « main »



Le cycle de vie du code dépend des méthodes HTTP écoutées par la Servlet en surchargeant une ou plusieurs méthodes de la classe HttpServlet : ●

doGet : point d'entrée d'une requête GET



doPost : point d'entrée d'une requête POST



doPut :  : point d'entrée d'une requête PUT

● ● ●

doDelete : point d'entrée d'une requête DELETE doHead : point d'entrée d'une requête HEAD doTrace  : point d'entrée d'une requête TRACE

Servlet package com.sdzee.servlets; import java.io.IOException; import import import import

javax.servlet.ServletException; javax.servlet.http.HttpServlet; javax.servlet.http.HttpServletRequest; javax.servlet.http.HttpServletResponse;

public class Test extends HttpServlet { public void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException{ response.setContentType("text/html"); response.setCharacterEncoding( "UTF-8" ); PrintWriter out = response.getWriter(); out.println(""); out.println(""); out.println(""); out.println(""); out.println("Test"); out.println(""); out.println(""); out.println("

Ceci est une page générée depuis une servlet.

"); out.println(""); out.println(""); } }

Servlet ●

Où cela s'exécute ? –

Sur un Conteneur Java EE WEB qui est lui même démarré dans une JVM

Servlet ●

Quel est le rôle du conteneur Web ? –

Mettre à disposition des outils qui gèrent les flux HTTP (écoute ports système, sécurité, gestion de cache, compression, ...)



Héberger, déployer, supprimer des applications Web Java



Gérer le cycle de vie des Servlets



Diriger les requêtes HTTP vers la bonne application

Servlet – Arbo livré ●

Comment s'effectue la gestion de l'hébergement applicatif ? –

Toute application Web Java doit être une archive « war » dont l'arborescence est normalisée !

Servlet – Arbo source ●

Attention : Arborescence de livraison (ou de packaging) n'est pas arborescence des sources !

Servlet ●

A quoi sert le « web.xml » ? –

Ce fichier est obligatoire, il s'appelle le descripteur de déploiement



Comme son nom l'indique, il fait comprendre au conteneur Web ● ● ●

Quel est le nom de l'application Où sont situées les Servlets Comment configurer leur cycle de vie : – – – –

Paramètres d'exécution non passés par l'utilisateur Association entre URL et Servlet Filtres écouteurs à exécuter avant la Servlet ...

Servlet



MaServlet mon.package.servlets.MaServletTest

UnParametre La Valeur Associé



MaServlet /MonUrlTest/*

Servlet ●

Le fichier web.xml est obligatoire mais les informations de description des Servlets peuvent maintenant être remplacées par des annotations directement dans les Servlets

package mon.package.servlets;

... @WebServlet(name="MaServlet"urlPatterns="/MonUrlTest/*", initParams={@WebInitParam(name="UnParametre",value="La Valeur associée")}) public class MaServlet extends HttpServlet { ... }

Servlet ●

Quel est le cycle de vie ?

init()

destroy()

doGet() Client 3

Il n'y a qu'une seule instance qui répond en parallèle à toutes les requêtes ! DoGet() Client 1

doPost() Client 2

Chargement de la servlet : Démarrage du conteneur Web Ou premier appel de la servlet

doGet() Client n

Extinction du conteneur Web

Servlet ●

Javax.servlet.HttpServletRequest –

getAttribute() : les attributs sont positionnés par le conteneur ou de manière programmatique



getParameter() : les paramètres sont positionnés par la requête (query string ou post paramètre)



getSession() : recupère un objet qui stocke les données de session (permet également de créer automatiquement une session)



getServletContext() : récupère un objet qui gère le contexte d'exécution de la servlet et permet de récupérer par exemple des paramètres d'initialisation



getRequestDispatcher() : récupère un objet permettant de faire suivre le traitement vers une autre Servlet

Servlet ●

Javax.servlet.HttpServlerResponse –

getOutputStream() / getWriter() : récupère un flux pour écrire la page réponse à la requête



setContentType() : permet de positionner le type MIME de la réponse



setHeader() : permet de positionner un header particulier



setStatus() : permet de positionner un code HTTP particulier pour la réponse



addCookie() : permet d'ajouter un cookie



sendRedirect() : permet de générer une réponse de redirection

Servlet ●

Javax.servlet.Filter : –

L'implémentation de cette interface permet de modifier la requête et / ou la réponse à la volée.



Les filtres sont gérés par le conteneur de la même manière que la Servlet et possède le même cycle de vie avec déclaration XML ou annotation. ● ● ●

init() destroy() doFilter() 

@WebFilter(filterName="LogFilter", urlPatterns={"/*"}, initParams={@WebInitParam(name="test-param",value="MaValeur")})public class LogFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; String ipAddress = request.getRemoteAddr();

    LogFilter              net.viralpatel.servlet.filters.LogFilter                   test-param         MaValeur     

    LogFilter     /*

System.out.println("IP "+ipAddress + ", Time " + new Date().toString());

chain.doFilter(req, res); } public void init(FilterConfig config) throws ServletException { String testParam = config.getInitParameter("test-param"); System.out.println("Test Param: " + testParam); } public void destroy() { //add code to release any resource } }

JavaBean ●

C'est quoi ? –

Une simple classe contenant des propriétés et des accesseurs, pas de code métier !



Cela permet de stocker des informations structurées et de les transférer aux différentes classes traitant une requête



Attention JavaBean n'est pas EJB !



On appelle également cela un POJO

public class Person { private String name; private String email; private long phoneNo; public Person() { } public void setName(String name) { this.name = name; } public String getName() { return name; } public void setEmail(String email) { this.email = email; } public String getEmail() { return email; } public void setPhoneNo(long phoneNo) { this.phoneNo = phoneNo; } public long getPhoneNo() { return phoneNo; } }

public class BeanInServlet extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { Person p = new Person(); p.setName("Sam Dalton"); p.setEmail("[email protected]"); p.setPhoneNo(1111111111);

req.setAttribute("person", p); RequestDispatcher rd = req.getRequestDispatcher("/jsp/beandata.jsp"); rd.forward(req, res); } }

JSP ●

C'est quoi ? –

Une servlet qui prend directement la forme d'une page HTML: ● ●



Dans une Servlet on écrit la page HTML dans un flux de sortie Java Dans une JSP on écrit du code Java au sein d'une page HTML

Pas besoin de déclarer leur présence (que ce soit dans le web.xml ou par annotation)





Exemple de page JSP

Au moment de l'exécution de ce script, nous sommes le .

Cette page a été affichée fois !



JSP ●

Quel est le cycle de vie ? –

La JSP est traduite en Servlet puis elle est compilée avant d'être chargée en mémoire et exécutée et gérée comme toutes les autres Servlets.



Si une mise à jour de la JSP est détectée alors elle est re-traduite puis re-compilée ...

JSP ●

Directives



Déclarations



Expressions



Fragments de code/scriptlet



Commentaires

JSP ●

Utiliser/Créer un JavaBean avec une portée « request », « session » ou « application »

Nouveau produit !



Nom:



Nom: