View
87
Download
1
Category
Preview:
DESCRIPTION
Cours Java 8
Citation preview
Programmation orienté objet
JAVA
Huitième partie
JAVA
Programmation orientée objet
Pr Hafidi Imad imad.hafidi@gmail.com
Huitième partie
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Architecture� 3 niveaux :
� niveau 1: présentation
� navigateur + serveur Web
� niveau 2: applicatif
script ou programme
Hafidi Imad -ENSA de Khouribga-Cours JAVA
� script ou programme
� niveau 3: données
� données nécessaires au niveau 2
Déroulement
�Une application Web type :�1: recueille les données utilisateur (niveau 1)
�2: envoie une requête au serveur Web
�3: exécute le programme serveur requis
Hafidi Imad -ENSA de Khouribga-Cours JAVA
�3: exécute le programme serveur requis (niveau 2&3)
�4: assemble/renvoie les données vers le navigateur (niveau 1)
Collecte des données des utilisateurs
�Quelques solutions pour le client :� simples : formulaire HTML� saisie de champs puis « submit »
� validation par scripts (javaScript)
Hafidi Imad -ENSA de Khouribga-Cours JAVA
� validation par scripts (javaScript)
� Autres : applets Java :� connexion socket / RMI avec le serveur Web
�mise en forme et validation des données
� ...
Requêtes HTTP vers le serveur web� contient :
� l ’URL de la ressource à accéder (page,script,prog)� les données de formatage (le cas échéant)� des infos d ’en-tête complémentaires
� requête GET :
Hafidi Imad -ENSA de Khouribga-Cours JAVA
� pour extraire des informations sur le serveur� intègre les données de formatage à l ’URL
� http://www.MonSite.com/servlet/hello?key1= value1&…
� requête POST :� pour modifier les données sur le serveur� données de la page assemblées/envoyées vers le serveur
Exécution d’un script sur un serveur
� Avec la requête http, le serveur Web :�1) identifie le type d ’environnement
d’exploitation à charger (mapping)� en fonction de l ’extension du fichier (.jsp, .cgi, ...)
Hafidi Imad -ENSA de Khouribga-Cours JAVA
� ou du répertoire où il se trouve (cgi-bin/, servlet/)
�2) charge l ’environnement d ’exécution (run-time)� interpréteur Perl pour les programmes cgi en perl
� JVM pour les servlets Java, ...
Retour des résultats au navigateur
� Le script/prog côté serveur :
�précise le type de contenu (HTML, XML, images,)
� intègre la réponse dans un flot de sortie
� Le navigateur :
Hafidi Imad -ENSA de Khouribga-Cours JAVA
� Le navigateur :
�définit le type MIME dans l ’en-tête (text/html,…)
� et affiche les données en fonction� duplication de l ’environnement (variables, exécution),
� mémoire allouée, copie du programme, …
� retourne (en général) du HTML
Historique� Développement de pages en HTML
� Scripts CGI� Programmes C, shell scripts, perl
� Langages spécifiques� PHP, JSP, ASP (Server Side scripting)� PHP, JSP, ASP (Server Side scripting)
� JavaScript (Client Side Scripting)
� Evolutions de HTML� XHTML, CSS, JavaScript
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Quels sont les problèmes ?� Application distribuée
� Concurrence d’accès
� Sécurité
� Protocole HTTP (stateless)� Identification des clients� Identification des clients
� Maintien des sessions
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Les Servlets
� Permettre la programmation d'applications coté serveur
� Permettre l'extension d'un serveur Web en java
� Permettre la construction d'appli Web dynamique
� Equivalent des CGI en java� Equivalent des CGI en java
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Fonctionnement d'un servlet
� Un servlet lit les données envoyées par un client Web (transmises par le serveur)� Données explicites (Formulaire)
� Données implicites (Request Header)
� Il génère un résultat
� Il envoit le résultat au client� Il envoit le résultat au client� Données explicites (Page HTML)
� Données implicites (Response Header, Status code)
Serveur Web
DatabaseJndiJava App
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Avantage des servlets
� Efficacité� Utilisent des threads plutôt que des processus comme les CGI
� Pratique� Librairie très développée (moins que PHP mais plus consistante)
� Portable� Déployable quelque soit le serveur (ou presque)
� Sécurisé� Fonctionne dans une machine virtuelle (plus maitrisable)
� Pas cher� Nombreux serveurs gratuits
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Les containers de servlet� Les servlets sont des composants
� Ils s'exécutent dans un container
� Ils doivent se conformer à une interface prédéfinie
� Ils ne sont jamais créés
� Les containersTomcat (jakarta.apache.org/tomcat)� Tomcat (jakarta.apache.org/tomcat)� Implantation de référence
� Jetty
� Weblogic
� ...
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Un premier servlet
� Le servlet HelloWorld
� Un servlet surcharge la classe HttpServlet
� Il doit implanter au moins une des méthodes� doGet
� doPostdoPost
� doPut
� doDelete
Hafidi Imad -ENSA de Khouribga-Cours JAVA
L’application Web
� Une archive war
� Déployée dans le serveur Web
� Web.xml = description de l’application
Structure d’une application� Package déployable
� Composants Web : Servlet et JSP
� Ressources statiques (images)
� Classes java (helper)
Librairies� Librairies
� Descripteurs de déploiement (web.xml)
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Les paramètres
� Les paramètres d'une requête sont accessibles dans l'objet (HttpServletRequest)request� request.getParameter("paramname");� request.getParameter("paramname");
� Il est possible de récupérer tous les noms des paramètres� request.getParameterNames()
Hafidi Imad -ENSA de Khouribga-Cours JAVA
L'interface HttpServletRequest
� Fournit les informations sur la requête du client au serveur
� Principales méthodes :� String getParameter(String name)
� Enumeration getParameterNames()� Retourne une énumération de tous les noms de paramètres
� String[] getParameterValues()� Retourne un tableau contenant toutes les valeurs des paramètres� Retourne un tableau contenant toutes les valeurs des paramètres
� String getHeader(String name)
� Enumeration getHeaderNames()� Retourne une énumération de tous les noms des propriétés du header
� String[] getHeaderValues()� Retourne un tableau de toutes les valeurs du header
Hafidi Imad -ENSA de Khouribga-Cours JAVA
L'interface HttpServletResponse
� Objet fournissant les services pour envoyer la réponse à un client.
� Les principales méthodes sont:� java.io.PrintWriter getWritergetWritergetWritergetWriter()
� Pour récupérer un printWriter qui permet d'envoyer du texte au client
� public void setContentLengthsetContentLengthsetContentLengthsetContentLength(int len)� Positionne le Content-Length Header
� public void setContentTypesetContentTypesetContentTypesetContentType(java.lang.String type) � public void setContentTypesetContentTypesetContentTypesetContentType(java.lang.String type) � Position le Content-Type header (exemple text/html)
� public void sendErrorsendErrorsendErrorsendError(int sc, java.lang.String msg) throws java.io.IOException� Envoi un message d'erreur au client (cf code dans l'API)
� public void setHeadersetHeadersetHeadersetHeader(java.lang.String name, java.lang.String value)
Hafidi Imad -ENSA de Khouribga-Cours JAVA
web.xml
� Le fichier web.xml donne des instructions sur le déploiement du servlet dans le container
� web-app� La description d'une Web Application
� Servlet� La relation entre le nom du servlet et la classe qui l'implante� La relation entre le nom du servlet et la classe qui l'implante
� Servlet-mapping� La relation entre le nom du servlet et l'url qui permet d'y accéder
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Les paramètres d'initialisation
� Les servlets peuvent avoir des paramètres d'initialisation. � Ces paramètres peuvent être changés sans avoir à recompiler
l'application� <init-param>
� <param-name>testValue</param-name>� <param-value>12</param-value><param-value>12</param-value>� <description>une valeur quelconque</description>
� </init-param>
� Ces paramètres peuvent être utilisés avec la méthode� javax.servlet.getInitParameter()
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Le servlet mapping
� Permet de construire la relation entre un servlet et son URL� <servlet-mapping>
� <servlet-name>Test</servlet-name>� <url-pattern>/Test/*</url-pattern>
� </servlet-mapping>
� Tous les urls correspondant à http://host:port/webapp/url-patterndéclencherons l’exécution du servletdéclencherons l’exécution du servlet
� Exemples� /*.do
� /Test
� /cours/test/*
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Les éléments du chemin de requête
� ContextPath : le chemin du contexte de déploiement
� ServletPath : la section du chemin qui a déclenché le mapping
� PathInfo : la partie de la requête qui n’est ni le ContextPath ni le ServletPathni le ServletPath� Request.getContextPath()
� Request.getServletPath()
� Request.getPathInfo()
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Le cycle de vie d'un servlet
� Tous les servlets ont le même cycle de vie� Le container charge le servlet
� La fonction init() est appelée (initialisation de variables, connection à des bases de données)
� Le servlet répond aux requêtes des clients� Le contaire détruit le servlet
� La fonction destroy() est appelée (fermeture des connections)
Hafidi Imad -ENSA de Khouribga-Cours JAVA
doGet et doPost
Request
Service( )
Server HttpServlet subclass
doGet( )
Service( )
Response
Key: Implemented by subclass
doPost( )
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Le Servlet Context� Maintien des données pour toute l’application
� Fournit le request dispatcher
� Données d’initialisations pour toute l’application
� Log
Un ServletContext par application et par JVM� Un ServletContext par application et par JVM
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Le ServletContext
� Objet permettant au servlet de communiquer avec le servlet container
� Obtenu avec� Servlet.getServletContext()
� Les principales méthodes de ServletContext� Object getAttribute(String name)
� Retourne un attribut du contexte
Void setAttribute(String name, Object value)� Void setAttribute(String name, Object value)� Ajoute ou remplace un objet dans le contexte
� String getInitParameter(String name)� Retourne un paramètre d'initialisation de l'application
� Void Log(String msg)� Ajoute un message dans le log file du servlet container
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Le RequestDispatcher
� L'objet RequestDispatcher est utilisé pour� Transférer la requête à un autre programme
� Inclure la réponse d'un autre programme
� Pour obtenir le request dispatcher
L'utilisation du RequestDispatcher
� La requête peut être transférée� rd.forward(request,response)
� L'utilisation classique consiste à avoir un servlet contrôleur qui transmet les commandes à des servlets spécialisés
� Le contrôle ne revient jamais au servlet
� La reponse peut être incluse dans la réponse en cours de � La reponse peut être incluse dans la réponse en cours de construction� rd.include(request,response)
� Ici, on peut implanter un equivalent de server side include.
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Les Sessions� Comment maintenir l’état d’un client au cours d’une série
de requêtes d’un même utilisateur pendant un temps donné ?
� HTTP est stateless
� Comment identifier le client ?
� Où mettre les données de la session ?� Où mettre les données de la session ?
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Servlet et sessions
� La gestion des sessions utilise les techniques classiques� url rewriting
� Cookies
� Champs cachés dans les formulaires
� L'API HttpServlet fournit des fonctions pour gérer les sessions
� L'implantation est transparente pour l'utilisateur
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Session & HttpServletRequest
� C'est le paramètre request qui maintient les informations sur la session
� Les méthodes sont� HttpSession request.getSession(boolean flag)
� Flag=true : retourne l'objet session courant ou en crée un s'il n'y en a pas.� Flag=false : Retourne l'objet session courant ou null s'il n'y en a pas
� isRequestedSessionIdValid()� Vrai si l'id de la session est valide dans le contexte courant� Vrai si l'id de la session est valide dans le contexte courant
� isRequestedSessionIdFromCookie()� Vrai si l'id de la session vient d'un cookie
� isRequestedSessionIdFromURL()� Vrai si l'id de la session vient d'un URL
Hafidi Imad -ENSA de Khouribga-Cours JAVA
L'objet HttpSession
� L'objet HttpSession permet de conserver des valeurs entre des appels d'un client
� Les principales méthodes sont� Object getAttribute(String name)
� Récupère la valeur de l'attribut par son nom
� Enumeration getAttributeNames()� Retourne la liste de tous les attributs
� Void setAttribute(String name, Object value)� Ajoute un attribut à la session� Ajoute un attribut à la session
� String getId()� Retourne l'identifiant de la session
� Void invalidate()� Invalide la session
� Long getCreationTime()� Long getLastAccessedTime()� Long getMaxInactiveInterval()� ServletContext getServletContext()
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Configuration des sessions
� Il est possible de fixer la durée d'une session par application (en minutes)� <session-config>
� <session-timeout>30</session-timeout>
� </session-config>
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Le contexte
� Il est possible d'avoir des paramètres d'initialisation du contexte� <context-param>
� <param-name>database</param-name>
� <param-value>testDB</param-value>
� <description>le nom de la base</description>
� </context-param>
� Ces paramètres peuvent être utilisés dans le servlet avec la méthode� Javax.servlet.ServletContext getInitParameter() et
� Javax.servlet.ServletContext.getInitParameterNames()
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Le ServletConfig
� Objet utilisé par le container de servlet pour passer des valeurs lors de l'initialisation du servlet
� Obtenu avec� Servlet.getServletConfig()
� Principales méthodes� String getInitParameter(String name)
� Retourne la valeur d'un paramètre d'initialisation du servlet
� ServletContext getServletContext()� Permet de récupérer l'objet servletcontext
� String getServletName()� Retourne le nom du servlet comme spécifié dans le fichier de description.
� Implanté par HttpServlet
Hafidi Imad -ENSA de Khouribga-Cours JAVA
La gestion des erreurs
� Il est possible de définir les pages à afficher� En fonction d'erreurs http
� En fonction d'exceptions java
<error-page><exception-type>
cours.event.EventException</exception-type><location>/erreur.html</location>
</error-page>
Dans web.xml
<error-page><error-code>404</error-code><location>/404.html</location>
</error-page>
Pour une erreur Http
Pour une erreur Http
Pour une exception java
Pour une exception java
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Mais qu'est ce que c'est ?
� Standard pour construire des applis Web� Portable
� En mélangeant le HTML et des directives
� Basé sur Java
� Equivalent PHP et ASP� Plus "propre" que PHP
� Plus indépendant que ASP
� Plusieurs spécifications� JSP 2.0 = la dernière
� De nombreuses librairies : les TagLibs
Hafidi Imad -ENSA de Khouribga-Cours JAVA
JSP et Servlets ?
� Les deux sont basés sur Java
� Les Servlets sont peu adapté à la génération de contenu
� Les JSP sont peu adaptés à l'extension de fonctions du serveur
� Note : Le JSP engine qui interprète les pages JSP est un Servlet
� Les JSP sont un moyen de construire des Servlet de façon déclarative� Un page JSP est transformée en un programme java (servlet) puis compilée et
exécutée
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Le cycle de vie d’un JSP� JspInit()
� JspService� Accept request
� Generate response
� JspDestroy()� JspDestroy()
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Cycle de vie
File
User Request
Server
File
Changed
?
Execute Servlet
Create Source
Compile
Hafidi Imad -ENSA de Khouribga-Cours JAVA
La syntaxe de base
� Les directives� Instruction pour le moteur JSP
� Encadrées par <%@ %>
� Les déclarations� Déclarations de variables ou de méthodes utilisables dans la page
� Encadrées par <%! %>
Les expressions� Les expressions� Un expression est évaluée, transformée en chaine et incluse dans la page
� Encadrées par <%= %>
� Les scriplets� Morceau de code java exécuté dans la page
� Encadrés par <% %>
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Les expressions
� Une expression est une expression java dont la valeur est calculée, tranformée en String et insérée dans la page.
Les déclarations
� Déclarations de variables et de fonctions locales à la page (en java)
<%! int i; %>
<%!
int i=0;
String text;String text;
%>
<%!
boolean f(int i)
{return (i>0);}
%>
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Les scriplets
� Peuvent contenir des fragments de code valide en java
� Ils sont exécutés quand la requête est évaluée<% if (compte>0) { %>
Tu as encore des sous… <BR>
<% } else { %>
Tu es dans le rouge cette fois <BR>Tu es dans le rouge cette fois <BR>
<% } %>
Hafidi Imad -ENSA de Khouribga-Cours JAVA
J'oubliais les commentaires
� Les commentaires sont les mêmes qu'en XML� <%-- tagada --%>
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Les objets implicites
� Objets utilisables sans déclaration dans les expressions et les scriplets� request (request scope) : HttpServletRequest
� response (page scope) : HttpServletResponse
� pageContext (page scope) : PageContext� L'objet représentant le contexte de la page
� session (session scope) : HttpSession� L'objet représentant le contexte de la session� L'objet représentant le contexte de la session
� page (=this) (page scope) : HttpJSPPage
� out (page scope) : JspWriter
� application (application scope) ServletContext
� config (page scope) : ServletConfig
� exception (page scope) : Throwable� Définit dans les pages de traitement des erreurs
Hafidi Imad -ENSA de Khouribga-Cours JAVA
L'interface de PageContext
� Fournit des méthodes pour retrouver des attributs en suivant la visibilité� Object findAttribute(String name)
� Recherche un attribut en utilisant l'ordre suivant : page, request, session, application
� Object getAttribute(String name)� Retourne un attribut dans le contexte de la page
� Object getAttribute(String name, in ctx)� Retourne un attribut dans le contexte donné (APPLICATION_SCOPE, PAGE_SCOPE,
REQUEST_SCOPE, SESSION_SCOPE)REQUEST_SCOPE, SESSION_SCOPE)
� Int getAttributeScope(String name)� Retourne le scope d'un attribut
� Fournit aussi des méthodes pour retrouver toutes les informations du contexte d'exécution de la page (session, jspWriter,request, response,…)� Cf PageContext API pour les détails
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Syntaxe XML� Depuis JSP 1.2
� <jsp:expression>Expression</jsp:expression>
� <jsp:scriptlet>
� <jsp:declaration>
� Permet� Permet� La validation
� Les transformations
� L’édition
Hafidi Imad -ENSA de Khouribga-Cours JAVA
jsp:forward
� Jsp:forward permet de chainer les requêtes pour invoquer� Une autre page jsp
� Un servlet
� <jsp:forward page="AutrePage.jsp"/>
� <jsp:forward page="/Servlet/control/>
From jGuruHafidi Imad -ENSA de Khouribga-Cours JAVA
Jsp:forward avec paramètres
� Il est possible d'ajouter des paramètres à la requête.
� Accessibles par request.getAttribute(name)
<jsp:forward page="chaine.jsp"><jsp:param name="name1" value="v1"/><jsp:param name="name2" value="v2"/></jsp:forward>
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Jsp:include
� Redirige la requête et inclut le résultat à l'endroit où se trouve l'action� <jsp:include page="checkBean.jsp"/>
� Cette action est exécutée à chaque fois
� L'action exécutée ne peut pas modifier le Header de la page (pas de cookie ni de type de contenu)de cookie ni de type de contenu)
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Les tags JSP (ou actions)
� Les tags sont des actions incluses dans une page Web suivant la syntaxe XML� <mod:tag attr="value">
� <mod:tag attr="value">body</mod:tag>
� Les actions de base font partie de la librairie jsp:� <jsp:useBean>� <jsp:useBean>
� <jsp:setProperty>
� <jsp:getProperty>
� <jsp:include>
� <jsp:forward>
� <jsp:text>
Hafidi Imad -ENSA de Khouribga-Cours JAVA
JavaBean et JSP
� Les action useBean, setProperty et getProperty permettent de manipuler des JavaBean sans programmation� jsp:usebean pour nommer, créer ou désigner un bean
� jsp:getProperty pour récupérer une propriété d'un bean
� jsp:setProperty pour changer la valeur d'une propriété.
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Les directives
� <%@ directive {attr="value"}* %>� Messages passés au moteur de JSP
� Page : propriétés de la page� extends="ClassName"
� La page est une sous-classe de la classe indiquée
� import="javax.jms.*,cour.test.util"� import des types ou des packages
� Les packages lang, servlet et jsp sont importés par défaut� Les packages lang, servlet et jsp sont importés par défaut
� session="true" ou "false" (defaut=true)� La page participe à une session
� isThreadSafe� buffer=16k
� Taille du buffer par défaut pour le PrintWriter.
� autoFlush="true" ou "false"� Vide le buffer automatiquement quand le buffer est plein
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Les directives (2)
� Page -la suite� isErrorPage="true" ou "false"
� La page est une page d'erreur
� errorPage="/error.jsp"
� Page chargée en cas d'exception
� contentType="text/html;charset=UTF-8"
� Type du contenu de la page et jeu de caractères
� Include� File="relative URL"
� Insère le fichier correspondant dans le fichier JSP
� Le fichier est évalué et compilé
� page="test.html”
� Inclut la ressource sans l'interpréter
Hafidi Imad -ENSA de Khouribga-Cours JAVA
La JSTL� But : Simplifier l'écriture des pages
� Langage pour les auteurs de pages
� Inclut un langage d'expression pour éviter le code java :� Langage d'expression pour calculer des valeurs
� Contrôle du flot d'exécution� Contrôle du flot d'exécution
� Validateur de librairie de tags� Permet des contrôler le style et les librairies utilisables dans une page
Hafidi Imad -ENSA de Khouribga-Cours JAVA
La JSTL� JSTL= Java Standard Tag Library
� Core tags� Sortie, gestion des variables, logique, boucles, importation de texte
� XML tags� Parsing, sélection, XSLT, flot de contrôle
� Database tags� Connection, accès, requêtes, mises à jour et transactions
� Formattage� Localisation, internationalisation
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Le langage d'expression� Le langage d'expression est invoqué par
� ${expr}
� Des objets implicites permettent d'accéder aux contextes de l'environnement� pageScope, requestScope, sessionScope, applicationScope donnent accès
aux variables de l'environnement
� param et paramValues donnent accès aux paramètres d'une requête
� ${param["nom"]} donne la valeur du paramètre nom d'une requête http
� ${paramValues["nom"]} donne toutes les valeurs associées au paramètre nom de la requête http dans un tableau
� pageContext donne accès aux valeurs associées au contexte
� initParams donne accès aux paramètres d'initialisation
� headerValues donne accès aux propriétés du header
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Beans et Collection� L'accès aux propriétés d'un bean se fait par un notation
pointée� ${cd.titre}
� ${personne.adresse.ville}
� Pour les collections (Map, List, Array) on peut utiliser la � Pour les collections (Map, List, Array) on peut utiliser la notation � mesCD[i] si mesCD est un tableau
� mesCD[cd.titre] si c'est une Map avec le titre comme clé
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Les opérateurs� On dispose de tous les opérateurs classiques
� +,-,*,/, mod,
� == ou eq, != ou ne, < ou lt, > ou gt (pour éviter les soucis avec XML
� empty pour vérifier si une variable est nulle ou vide� empty pour vérifier si une variable est nulle ou vide
� Les conversions de types sont automatiques dans les expressions en fonction des besoins
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Les actions générales� c:out pour générer du texte (équivallent du <%= %>
� <c:out value=${param.nom} default="N/A"/>� Affiche la valeur du paramèter ou N/A si elle est vide
� c:set affecte la valeur d'une variable dans le contexte courant� <c:set var="test" value="ca marche ?" scope="request"/>� La valeur peut être aussi calculée dans le body<c:set var="test2><c:set var="test2>
<ex:calc param1="pouet"/>
</c:set>� Peut être aussi utilisé pour changer la valeur d'une propriété d'un bean� <c:set target=${cd} property="titre" value="Mezzanine"/>� Peut être aussi utilisé pour ajouter un élément dans une collection� <c:set target=${myCD} property=${cd.titre} value=${cd}/>
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Les actions générales (suite)� <c:remove/> permet de supprimer une variable
� <c:remove var="test" scope="page"/>� Supprime la variable test de la page
� <c:catch/> permet de capturer les exceptions dans une page<c:catch var="exception">
… some code… some code
</c:catch><c:if test=”${exception != null}”>
Il y a eu un souci</c:if>� Attention ça ne remplace pas le traitement normal des erreurs
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Les conditionnelles� Les conditions simples
� <c:if test="${cd.annee<1990}">� C'est un vieux disque� </c:if>
� Les conditions exclusives<c:choose>
<c:when test="${cd.auteur=='bob'}">Quelle daubeQuelle daube
</c:when><c:when test=="${cd.auteur=='bill'}">
Ca swing</c:when>…<c:otherwise>
Beuh ?</c:otherwise>
</c:choose>
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Les Iterateurs� c:forEach répéte une action pour tous les éléments d'une
collection<table>
<c:forEach var=”cd” items=”${myCD}”>
<tr><td><c:out value=”${cd.titre}”/></td></tr>
</c:forEach></c:forEach>
</table>
� On peut aussi définir un interval<c:forEach var=”i” begin=”100” end=”110”>
<c:out value=”${i}”/>
</c:forEach>
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Encore des itérateurs� c:forTokens permet de parcourir une chaine contenant des
délimiteurs<c:set var="liste" value="a,b,c,d"/>
<c:forTokens var="item" items="${liste}" delims=","><c:out value="${item}"/>
</c:forTokens></c:forTokens>
Hafidi Imad -ENSA de Khouribga-Cours JAVA
MVC� Model
� l ’application métier, les données… ce qui est manipulé par l ’application.
� View� présentation de l ’état du modèle (généralement à un
utilisateur)
Hafidi Imad -ENSA de Khouribga-Cours JAVA
utilisateur)
� Controller� interface d ’action sur le modèle
� (par exemple, pour les mises à jour)
� L ’interface utilisateur, composée de vues, intéragit avec le contrôleur.
MVC Model (Servlet)
Request
1
(Controller)Servlet
3
BR
OW
SE
R
Redirect
Instantiate
MVC Design Pattern
(View)JSPResponse
5
3
4
BR
OW
SE
R
Servlet Container (EIS)
Redirect 2
(Model)Java Bean
Instantiate
Model � Le controleur prend en charge la requête
� Il effectue les contrôles et les actions
� Il sélectionne la vue
� Le servlet sert de� Filtre (erreur, sécurité)� Filtre (erreur, sécurité)
� Controleur (dispatching, actions, redirection)
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Recommended