cours java 8

103
Programmation orienté objet JAVA Huitième partie JAVA Programmation orientée objet Pr Hafidi Imad [email protected] Huitième partie Hafidi Imad -ENSA de Khouribga-Cours JAVA

Upload: zakaria-boulouard

Post on 27-Nov-2015

87 views

Category:

Documents


1 download

DESCRIPTION

Cours Java 8

TRANSCRIPT

Programmation orienté objet

JAVA

Huitième partie

JAVA

Programmation orientée objet

Pr Hafidi Imad [email protected]

Huitième partie

Hafidi Imad -ENSA de Khouribga-Cours JAVA

Rappelle sur les applications web

Hafidi Imad -ENSA de Khouribga-Cours JAVA

Application WEB

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

Servlets

Hafidi Imad -ENSA de Khouribga-Cours JAVA

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 technologies

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

Le servlet HelloWorld

Hafidi Imad -ENSA de Khouribga-Cours JAVA

Le fichier de configuration

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

Execution d’une requête

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

Exemples paramètres

Hafidi Imad -ENSA de Khouribga-Cours JAVA

Exemple POST

Hafidi Imad -ENSA de Khouribga-Cours JAVA

Exemple POST (suite)

Hafidi Imad -ENSA de Khouribga-Cours JAVA

La classe HttpServlet

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

Les request headers

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

Exemple

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

Exemples

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

La visibilité

(from jGuru)

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 Servlet Context

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

Exemple d’utilisation

Démonstration !

Hafidi Imad -ENSA de Khouribga-Cours JAVA

Les attributs du context

� Valeurs disponibles pour toute l’application

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

Création de la session

Hafidi Imad -ENSA de Khouribga-Cours JAVA

Requête dans la même session

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

Terminer une session

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

JSP

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

JSP et Servlets

Hafidi Imad -ENSA de Khouribga-Cours JAVA

Architecture

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

Exemple

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

Exemple

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

Un JavaBean

� Composant simple. Respecte des conventions d’écriture

Exemple UseBean

Hafidi Imad -ENSA de Khouribga-Cours JAVA

Autre exemple

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

Exemple : accès aux paramètres

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 et applications web

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.

Hafidi Imad -ENSA de Khouribga-Cours JAVA

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

Exemple simple

Hafidi Imad -ENSA de Khouribga-Cours JAVA

Exemple suite

Hafidi Imad -ENSA de Khouribga-Cours JAVA