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: