Vous êtes sur la page 1sur 8

06/10/2009

Plan du cours
MIF13
Programmation Web  Application Web
 Retour sur la définition

 Différents types d’applications

TECHNOLOGIES  Différentes technologies de programmation côté serveur

CÔTÉ SERVEUR  Programmation côté serveur en Java


 Principe d’un container de servlets
(H TTP ET SERVEUR WEB)
 Servlets

 JSP
LIONEL MÉDINI
SEPTEMBRE-DÉCEMBRE 2009  Taglibs

 Packaging et déploiement d’une application Web

Applications Web Applications Web

 Définition  Différents types d’applications


 Application dont l’interface est visible dans un navigateur  Site Web dynamique

 Nécessairement des programmes côté serveur  Ensemble de pages dynamiques simples


 Parfois une partie côté client  éventuellement interreliées

 mais pas d’inclusion


 Dépendent de l’infrastructure web choisie
 Exemples
 Exemple
 Traitement des données d’un formulaire
Client Serveur
 Composition pour l’affichage de données du serveur
Requêtes
HTTP
HTTP

HTTP

HTML Interface Métier Données


Réponses
HTTP

Applications Web Applications Web

 Différents types d’applications  Différents types d’applications


 Application Web localisée  Application Web localisée + AJAX
 Toute la programmation est sur le serveur  Cf. transparent précédent
 Modèle(s) de structuration de l’application  Déport d’une partie de l’application côté client
 couches, modules, composants, aspects…  cf. cours suivant…

 Principes de structuration (cf. MIF17)


 Affectation de responsabilités à chaque ressource

 Inclusion/appel des ressources les unes dans les autres

 Utilisation de patterns de conception (MVC, DAO…)

 Spécificité des applications Web


 Aiguillage du flux applicatif par redirection HTTP

 Choix des types d’objets (classe, servlet, JSP) en fonction du type


de composant (métier, interface, données…)

1
06/10/2009

Applications Web Applications Web

 Différents types d’applications  Exemples de technologies


 Php
 Application Web répartie
 Langage interprété
 Application localisée (AJAX ou non) +  Type de programmation : scripts / fonctions / objets
 Moteur : interpréteur existant sur la quasi-totalité des serveurs
 Appel à d’autres ressources / composants
 Java
 sur des machines distantes  Bytecode
 dont on n’est pas nécessairement propriétaire  Type de programmation : classes (servlets), scripts (JSP)…
 Moteur : container de servlets Jakarta (+ Apache = Tomcat)
 Nécessite des mécanismes (« middleware ») de communication
 Microsoft™ .Net Framework
 Exemples : RPC, CORBA, Services Web, REST…  Ensemble de technologies de développement
 Nécessite une modélisation du déploiement  Type de programmation : dépend du langage VB, C#, J#, ASP…
 Moteur : framework sur serveur IIS
 référencement/connectivité avec les ressources distantes,
 Python
performances, sécurité…  Langage interprété
 Cf. cours de M2  Type de programmation : scripts python, scriptlets, DTML…
 Moteur : serveur d’applications Zope, Plone

Programmation côté serveur en Java Programmation côté serveur en Java

 Principes de la programmation côté serveur en Java  Principes de la programmation côté serveur en Java
 Réception de la requête du client Serveur Web Machine serveur
Java VM
 Encapsulation de la requête Moteur de servlets
client dans un objet Java Container Web
HTTPServletRequest Interface Métier
Servlet Données
 Traitement de la requête et Composants Java
Serveur HTTP

Servlet Classe
génération de la réponse sous (servlets, JSP, JSP JSP
forme d’un objet Java classes, interfaces, Connecteur Classe
HTTPServletResponse JavaBeans…) JSP Classe
 Désencapsulation de la réponse Moteur de servlets Servlet
Servlet
Classe

 Envoi de la réponse au client Serveur Web

Programmation côté serveur en Java Servlets

 Quelques outils disponibles  Définition (officielle)


 Tomcat http://java.sun.com/products/servlet/whitepaper.html
 Projet d’Apache issu de Jakarta
 Servlets are protocol- and platform-independent server side
 Référence en matière de moteurs de servlets
 Contenu
components, written in Java, which dynamically extend Java
 Serveur web : Apache enabled servers.
 Connecteur : mod_jk (Jakarta) + AJP13  They provide a general framework for services built using the
 Moteur de servlets : Catalina request-response paradigm.
 Compilateur de JSP : Jasper
 Their initial use is to provide secure web-based access to data
 JServ
which is presented using HTML web pages, interactively
 À la fois un connecteur et un moteur de servlets pour Apache
viewing or modifying that data using dynamic web page
 Jetty
 Serveur + conteneur de servlets : « léger », issu d’Eclipse
generation techniques.
 …  Since servlets run inside servers, they do not need a graphical
user interface.

2
06/10/2009

Servlets Servlets

 Définition (courte)  Concrètement


 Implémentation Java d’un mécanisme de requête/réponse  Objet (classe) Java
 Initialement : indépendant d’un protocole  Composant d’application
 Avec encapsulation des données dans des objets
 Derrière un serveur (Web, mais pas seulement)
 Générique
 Mappée à une URL sur le serveur
• Requête
• Réponse  Dans un « Container »
• Contexte applicatif  Pas d’accès direct au serveur
 Spécifique HTTP  Accès protégé aux autres objets métier de l’application
• Méthode
 Gestion avancée par le container
• Type MIME de la réponse
• Headers
• Session
• Cookies

Servlets Servlets
« interface »
 L’API Servlet Servlet  Méthodes de gestion du cycle de vie
 Packages Java  Sont appelées par le conteneur
 javax.servlet  après l’instanciation (pour rendre une servlet opérationnelle) ou
 javax.servlet.http
 en fin de service (avant le garbage collecting)
 Méthodes
GenericServlet  Permettent des traitements spécifiques à l’application
 Gestion du cycle de vie
 Chargement / déchargement de données de configuration
 Service
 Activation de services annexes (logs, persistence…)

HttpServlet

Servlets Servlets

 Méthodes de gestion du cycle de vie  Méthodes de service


 javax.servlet.GenericServlet  Permettent de rendre le service
 public void init(ServletConfig config) throws  traitement de la requête
ServletException  génération de la réponse
 Il faut appeler super.init(config) en surchargeant cette méthode
 Implémentation différente avec/sans protocole HTTP
 public void init( ) throws ServletException  GenericServlet : une seule méthode
Inutile d’appeler super.init() ; il vaut mieux surcharger celle-ci

 HttpServlet : une méthode (de classe) par méthode (HTTP)
 public void destroy( )
 Utilisation
 GenericServlet
 surchager la méthode de service (abstraite)

 HttpServlet
 surchager au moins une méthode de service

3
06/10/2009

Servlets Servlets

 Méthodes de service  Accès aux données encapsulées


 javax.servlet.GenericServlet  Via les objets requête et réponse passés en paramètres des
méthodes de service
 public abstract void service(ServletRequest req,
ServletResponse res) throws ServletException,  ServletRequest  ServletResponse
IOException  getParameter  getWriter
 javax.servlet.http.HttpServlet  HttpServletRequest  HttpServletResponse
 protected void doGet(HttpServletRequest req,  getCookies  addCookie
HttpServletResponse resp) throws ServletException,  getHeader  addHeader
IOException
 getMethod  sendError
 protected void doPost(HttpServletRequest req,
 getSession  sendRedirect
HttpServletResponse resp) throws ServletException,
IOException
 … doDelete, doHead, doOptions, doPut, doTrace

Servlets Servlets

 Exemple de code (HTTP)  Conclusion sur les servlets


import javax.servlet.*;
import javax.servlet.http.*;  Avantages

public class NewServlet extends HttpServlet {  Composants simples…


 Classes Java
public void init(ServletConfig config) throws ServletException {
super.init(config); … }  …pratiques…
public void destroy() { … }
 Codage minimum : cycle de vie, traitement de la requête
protected void doGet(HttpServletRequest request, HttpServletResponse response)  Tous les autres aspects sont pris en charge par le conteneur
throws ServletException, IOException {
response.setContentType("text/html");  …et sûrs
PrintWriter out = response.getWriter();
 Isolation du serveur par le conteneur
out.println("<html><head><title>Hello page</title></head>");
out.println("<body><h1>Hello "+ request.getParameter("name") +  « rigueur » de l’orienté-objet
</h1></body></html>");
}  Inconvénients
protected void doPost(HttpServletRequest request, HttpServletResponse response)  Beaucoup de out.println( )
throws ServletException, IOException { … }
}  Difficile de comprendre le code HTML généré

Java Server Pages Java Server Pages

 Principe  Format simplifié


 Écrire une page Web dynamique comme si elle était statique  Programmation descriptive

 Ne mettre du code que quand nécessaire  (X)HTML classique


 Scripts : code « HTML-like » qui doit être compilé en code Java
 Même fonctionnalités que HttpServlet
 Bibliothèques de tags spécifiques
 Implémentation du mécanisme requête/réponse
 Définition de balises personnalisées
 Accéder aux même données/objets qu’une servlet
 Programmation impérative
 Inclure ou rediriger la requête vers une autre servlet/JSP
 Code Java à traiter directement par la JVM du serveur
 Spécifique à HTTP
 Génération de différents types de contenus : HTML, XML, SVG…
 Gestion des méthodes, headers, cookies, sessions…

4
06/10/2009

Java Server Pages Java Server Pages


« interface »
 L’API JSP  Traitement d’une JSP par le Javax.servlet.Servlet
 Packages Java serveur
 javax.servlet.jsp
 Une JSP est compilée en servlet à la
 javax.servlet.jsp.el « interface »
première utilisation
 javax.servlet.jsp.tagext Javax.servlet.jsp.JspPage
 Classe implémentant
 Méthodes identiques à celles de l’API Servlet javax.servlet.jsp.HttpJspPage
 Gestion du cycle de vie
 Service « interface »
Javax.servlet.jsp.HttpJspPage

index.jsp Compilateur Index_jsp.java

Container Web

Java Server Pages Java Server Pages


« interface »
 TraitementJavax.servlet.GenericServlet
d’une JSP par le Javax.servlet.Servlet  Syntaxe
serveur  2 types de syntaxes « classiques »

 Une JSP est compilée en servlet à la  Balises de scripts


« interface »
première utilisation  XML : plusieurs espaces de noms
Javax.servlet.http.HttpServlet Javax.servlet.jsp.JspPage
 Mécanisme spécifique au compilateur  jsp

 Jasper : classe abstraite intermédiaire  user-defined (JSTL, etc.)


org.apache.jasper.runtime.  Expression language
org.apache.jasper.runtime.
HttpJspBase « interface »
HttpJspBase Javax.servlet.jsp.HttpJspPage  Peuvent être combinées/imbriquées

index.jsp Jasper Index_jsp.java

Container Web

Java Server Pages Java Server Pages

 Scriptlets : <% code %>  Variables prédéfinies dans les scriptlets


 Morceaux de code Java dans la page  request

 Syntaxe XML  response


<jsp:scriptlet>  out
response.setContentType("text/plain");  session
</jsp:scriptlet>  application
 Syntaxe script  page
<% response.setContentType("text/plain"); %>
 ...

5
06/10/2009

Java Server Pages Java Server Pages

 Expressions : <% code %>  Déclarations : <%! code %>


 Des expressions, qui sont évaluées et insérées dans le corps de la  Permettent de définir des méthodes ou des champs qui seront
page insérés dans le corps de la servlet
 Syntaxe XML  Syntaxe XML
<jsp:expression> <jsp:declaration>
new java.util.date() private int VariableGlobale = 0;
</jsp:expression> </jsp:declaration>
 Syntaxe script  Syntaxe script
<%= new java.util.date() %> <%! private int VariableGlobale = 0; %>
 Equivalent à
 <% out.println(new java.util.date()); %>

Java Server Pages Java Server Pages

 Directives : <%@ code %>  Exemple de code simple : une JSP qui compte le
 Informations globales relatives à la page nombre de fois où elle a été appelée
 Trois types de directives <html>
 page : modifier les données de la page (import de packages, <head><title>Déclarations et expressions</title></head>
spécification d’un type de contenu, gestion des sessions) <body>
<%@ page import="java.util.*" %> <h1>Déclarations JSP</h1>

 include : inclure des fichiers ou autres servlets/JSP


<%! private int accessCount = 0; %>
<%@ include page="/monJSP.jsp" flush="true" %>
<p>Cette page a été accédée <%= ++accessCount %> fois depuis le
 taglib : utiliser des bibliothèques de balises personnalisées démarrage du serveur</p>
<%@ taglib uri="…" prefix="…" %>
</body>
</html>

Java Server Pages Java Server Pages

 Utiliser des JavaBeans  Les bibliothèques de tags


 But : déporter de la logique (métier, données) hors de la présentation  Permettent de prendre en charge différentes fonctionnalités sans écrire
de code Java
 Méthode
 Sont reliées à des classes Java, mappées à l’exécution des tags
 Définir un JavaBean (classe standard)
 Exemples
 Constructeur sans paramètre
 La Java Standard Tag Library (JSTL)
 Accesseurs pour des données membres
 Plusieurs bibliothèques de tags
• getChamp() / setChamp() • Core
 Définir le bean <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 <jsp:useBean id="toto" class="paquetage.TotoBean" />
• XML
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
 L’utiliser • Internationalisation
 <jsp:setProperty name=“toto" property=“nom" value="<%= <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
request.getParameter(\"nom\") %>" /> • SQL
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
 <h1> hello <jsp:getProperty name="toto" property="nom"
• Fonctions
value="<%= request.getParameter(\"nom\") %>" /></h1> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

6
06/10/2009

Java Server Pages Java Server Pages

 Les bibliothèques de tags  La syntaxe EL (Expression Language)


 Permettent de prendre en charge différentes fonctionnalités sans écrire
 Depuis JSP 2.0
de code Java
 Sont reliées à des classes Java, mappées à l’exécution des tags  Depuis JSP 2.1 (mai 2006) : Unified EL (commun avec JSF)

 Exemples  S’utilise
 Autres bibliothèques de code  dans les attributs de tags JSP
 « Quasi-standards » disponibles sur Internet
 directement dans le corps de la page
• <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean"
prefix="bean" %>  Syntaxe
• <%@ taglib uri="http://jakarta.apache.org/struts/tags-html"  ${ expression_el }
prefix="html" %>
• <%@ taglib uri="http://jakarta.apache.org/struts/tags-logic"  Exemple
prefix="logic" %> <c:forEach var="customer" items="${customers}"
 Que vous définirez pour une application donnée Customer: <c:out value="${customer}"/>
• Non présenté en cours
• Pointeur : http://adiguba.developpez.com/tutoriels/j2ee/jsp/taglib/ </c:forEach>

Java Server Pages Java Server Pages

 La syntaxe EL (Expression Language)  La syntaxe EL (Expression Language)


 Permet d’accéder facilement à  Les objets implicites
 des objets de la page  Accès aux différents composants d'une page JSP
 ${totoBean}  pageContext, initParam

 des propriétés de beans  param, paramValues, header, headerValues, cookie

 <c:out value="${totoBean.nom}" />  pageScope, requestScope, sessionScope, applicationScope

 des objets implicites  Exemples


 ${header['User-Agent']}  ${ pageContext.response.contentType }

 des opérateurs, des fonctions, des variables, etc.  ${ pageScope["name"] }

 ${ param["page"] }

 ${ header["user-agent"] }

Java Server Pages Retour sur JSP / Servlets

 La syntaxe EL (Expression Language)  Quoi mettre où ? (travailler en servlets ou en JSP ?)


 Types primaires  Dépend de la quantité de code Java / HTML
 Convertis en objet du type de la classe wrapper correspondante  Dépend de la couche dans laquelle on se trouve
 java.lang.Long, java.lang.String…  Plus objectivement
 Opérateurs  Servlets
 Unaires et binaires classiques : +, -, &&, and, !, not  Aiguillage des données

 Ne pas interpréter les EL  Accès aux autres méthodes que celles de service

 Dans toute la page  Définition d’autres méthodes


<%@ page isELIgnored="false" %>  JSP
 Au coup par coup  Inclusions d’autres JSP / intégration de composants
\${ ceci ne sera pas interprété comme une EL }  Appel à des JavaBeans

 Utilisation de taglibs

7
06/10/2009

Packaging et déploiement Packaging et déploiement

 Packaging d’une application Web Java  Déploiement d’une application Web Java
 Un fichier .war (Web ARchive)  Consiste à permettre à un conteneur Web d’exécuter l’application
 Contenu
 Dépôt dans un répertoire ad hoc du serveur
 Fichiers Web de l’application (HTML, JSP, js, css…)
 Exemple : répertoire « webapps » de Tomcat
 Répertoire « META-INF » : fichiers de configuration
 MANIFEST.MF : informations sur le zip
 Lecture des fichiers war au (re)démarrage du serveur
 Répertoire « WEB-INF » : contenu de l’application
 Analyse du fichier war et des paramètres de configuration du
descripteur de déploiement
 web.xml : descripteur de déploiement
 Création du répertoire correspondant dans webapps
 Répertoire « classes » : autres classes de l’application (beans…)
 Répertoire « lib » : bibliothèques supplémentaires (jars)  Mapping des URL de l’application vers le répertoire créé

 Répertoire « src » : sources Java  Autres méthodes de déploiement


 Ne contient pas nécessairement  http://tomcat.apache.org/tomcat-4.0-doc/appdev/deployment.html
 Les sources des classes Java
 Les jars nécessaires à l’exécution de l’application

Conclusion sur les applications Web Bibliographie utilisée pour ce cours

 Dans ce cours  Développement d’applications Web en Java :


http://fr.wikipedia.org/wiki/JavaServer_Pages
 Aperçu des technos de programmation côté serveur en Java  Java EE API :
 Servlets, JSP, JSTL, taglibs http://java.sun.com/javaee/5/docs/api/
 Ce ne sont pas les seules (JSF, EJB…)  JSP :
 À mixer avec les technos côté client http://fr.wikipedia.org/wiki/JavaServer_Pages
http://www.commentcamarche.net/contents/jsp/jspcarac.php3
 CSS, JavaScript, XML (SVG, transformation…)
 JSTL et EL :
 AJAX… http://java.sun.com/developer/technicalArticles/javaserverpage
 Ne dispensent pas de réfléchir à la structuration de l’application s/faster/
(au contraire !)  EL :
http://adiguba.developpez.com/tutoriels/j2ee/jsp/el/
 Utilisation de frameworks
http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JSPIntro7.html
 Permettent de mettre en place facilement des services complexes
 Taglibs :
 Assurent (?) un minimum de rigueur dans le développement http://adiguba.developpez.com/tutoriels/j2ee/jsp/taglib/

Vous aimerez peut-être aussi