Cours - Intro JSP
Transcription
Cours - Intro JSP
Module de découverte Développement web en Java Mathieu Chatelain JSP ◦ Introduction – conteneur web – cycle de vie – Servlet ◦ Tags JSP ◦ Les objets implicites ◦ Les actions Sommaire JSP : JavaServer Page. Concurrent de PHP et ASP. Avantages : ◦ Puissance de Java ◦ Gratuit ◦ Facile à développer Inconvénients : ◦ Infrastructure lourde à mettre en place Extension : fichier .jsp Version actuelle : JSP 2.1 – Servlet 2.5 Page JSP : mélange HTML et Java. S’exécute dans un conteneur web. JSP Index.jsp <html> <head> <title>ma première jsp</title> </head> <body> <% out.println("hello world"); %> </body> </html> 1er exemple Logiciel qui exécute des applications orientées web. Implémente les spécifications J2EE fournis par Sun. Fournit notamment les API pour la sécurité et la gestion de la concurrence. Les plus connus : Tomcat (projet Apache, gratuit), WebSphere (IBM), Weblogic (BEA), JOnAS (OW2, gratuit). Ce cours utilise Tomcat. ◦ Version 5.0.28 ◦ Servlet 2.4 – JSP 2.0 Conteneur web Cycle de vie Le serveur reçoit la demande du navigateur. Transformée en Servlet (classe java exécutée dans un conteneur web) lorsque la JSP est appelée pour la première fois. La Servlet est compilée. La machine virtuelle exécute la Servlet. Le résultat est stocké sous forme d’un buffer de texte. Le buffer est renvoyé par le serveur vers le navigateur. 3 méthodes essentielles: ◦ jspInit () qui est appelée après le premier chargement (compilation) ◦ _jspService() qui est appelée à chaque fois que la JSP est sollicitée. ◦ jspDestroy() qui est appelée lors du déchargement (nouvelle version de la JSP compilée). Cycle de vie Classe java pur. Hérite de javax.servlet.http.HttpServlet S’exécute aussi dans un conteneur web. 5 méthodes essentielles: ◦ init() pour l’initialisation. ◦ destroy() pour détruire la servlet après exécution. ◦ service() pour l’exécution. ◦ doGet() appelée par service() pour traiter les requêtes de type GET. ◦ doPost() appelée par service() pour traiter les requêtes de type POST. Servlet Permettent de distinguer le code java du code HTML. Plusieurs tags : ◦ Les tags de directives: <%@ %> ◦ Les tags de déclarations: <%! %> ◦ Les tags de scriptlets: <% %> ◦ Les tags d’expression: <%= %> ◦ Les tags de commentaires: <%-- --%> Les tags JSP Placés entre <%@ et %> 3 types : ◦ include : sert à inclure d’autres fichier dans la JSP. Le fichier tout entier (variables, entrée/sortie etc.. ) est incorporé dans la JSP au moment de la transformation en Servlet. <%@ include file = "unfichier.html“ %> ◦ taglib : indique le chemin et le préfixe utilisé pour une librairie de tag. <%@ taglib prefix= "monprefix" uri= "WEB-INF/library.tld" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> ◦ page : définit les attributs de la page (type de contenu, librairies java importées, pages d’erreur ou non…). <%@ page import=" java.util.Date" contentType="application/vnd.ms-excel" isErrorPage="false" %> pour pouvoir utilisé la librairie java.util.Date, que le contenu reçu par le navigateur soit ouvrable avec Excel et que préciser ce n’est pas une page d’erreur. Les tags de directives Placés entre <%! et %> Permet de déclarer des variables et des méthodes accessibles dans toute la page. <%! public Objet monObjet=new Objet(); private int i=5; public int getValeur() { return i; } public void jspInit() {System.out.println("redéfinition de la méthode d’initialisation") ; %> Il est possible de redéfinir les méthode jspInit() et jspDestroy (mais pas _jspService()). Les tags de déclaration Placés entre <% et %> Permet d’insérer du code java dans la JSP, qui sera compilé lors de la transformation Servlet. Permet aussi d’accéder aux objet, variables et méthodes déclarés dans la partie déclarative. <%! private int i=5; public int getValeur() { return i; } %> <% for (int j = 1 ; j <= getValeur() ; j++ ){ out.print(j); %> <br /> <% } %> Les tags de scriptlet Placés entre <%= et %> Servent à évaluer une variable ou une expression et à renvoyer la valeur. Sont équivalent à <% out.println(variable);%> <%! int i=5;%> <%=i%> => affichera 5 sur la page. Les tags d’expressions accessibles seulement dans la partie scriptlet et expressions. request: Instance de la classe javax.servlet.http.HttpServletRequest, cet objet possède les méthodes qui permettent d'accéder aux informations de la requête en cours, comme les paramètres de requête via la méthode getParameter et les entêtes HTTP comme les cookies, le référent, etc... response: Instance de la classe javax.servlet.http.HttpServletResponse, cet objet possède les méthodes qui permettent de spécifier les entêtes HTTP comme les cookies, il contient de ce fait la réponse de la page JSP. session: Instance de la classe javax.servlet.http.HttpSession, cet objet est par défaut disponible à toutes les pages qui participe à une session sauf si l'attribut session de la directive page est positionné à faux. Il permet d'accéder aux objets dont la portée est session via la méthode getAttribute. out: Instance de la classe javax.servlet.jsp.JspWriter, cet objet représente le canal de sortie utilisé pour communiquer la réponse au client (navigateur). Les objets implicites application: Instance de la classe javax.servlet.ServletContext, cet objet contient le contexte de la servlet. context: Instance de la classe javax.servlet.jsp.PageContext, cet objet permet d'accéder à différentes informations sur l'environnement du serveur. config: Instance de la classe javax.servlet.ServletConfig, cet objet permet d'accéder à la configuration de la servlet. page: instance de la classe java.lang.Object, cet objet désignant la page JSP ellemême, c'est l'équivalent à this de Java. Prévu initialement pour permettre l'accès à des objets Java lorsqu'un autre langage de script était utilisé. exception: instance de la classe java.lang.Throwable, cet objet représentant une exception non interceptée par le code Java, très utile dans les pages d'erreur. Les objets implicites Permettent d’exécuter du code java au moment où la page est requise. Plusieurs possibilités : ◦ Inclusion dynamique de beans, ◦ Inclusion dynamique de fichier, ◦ Redirection vers une autre page. Syntaxe semblable à XML. <balise:action . . .> ... ... </balise:action> JSP – Les actions Syntaxe: <jsp:useBean id= "nomDuBean" class="com.package.class" scope= "request" /> ◦ id : nom du bean, ◦ class: classe du bean, ◦ scope: permet de déterminer la portée du bean avec les valeurs suivantes: request: pour la requête courante uniquement, session: pour la durée de la session entière, application: accessible dans toute l’application. Création de beans Besoin de connaître le nom du bean et ses méthodes. 3 méthodes d’accès aux beans: ◦ Via la partie scriptlet avec du code java « classique » <%out.println(unePersonne.getNom())%> ◦ Via la partie expression <%= unePersonne.getNom()%> ◦ Via la partie action <jsp:getProperty name= "unePersonne" property= "nom"/> Utilisation de beans Modification des attributs <jsp:setProperty name= "unePersonne" property= "nom" value= "toto" /> <jsp:setProperty name= "unePersonne" property= "nom" value= "<%=request.getParameter("nom")%>" /> Ceci ne fonctionne pas <jsp:setProperty name= "unePersonne" property= "age" value="<jsp:getProperty name= "unePersonne" property= "age"/>+1" /> Remplacer par <jsp:setProperty name= "unePersonne" property= "age" value="<%=unePersonne.getAge()+1%>" /> Utilisation de beans Syntaxe: <jsp:include page= "/mapage.jsp"/> . Inclusion dynamique, effectuée au moment de la requête. Possibilité de transmettre des infos à la page incluse. <jsp:include page= "/mapage.jsp"> <jsp:param name= "maVariable" value= "laValeur" /> </jsp:include> Récupération : <%out.println(request.getParameter(maVariable));%> Inclusion de pages Syntaxe: <jsp:forward page= "/mapage.jsp"/> . redirection dynamique, effectuée au moment de la requête. Possibilité de transmettre des infos à la page incluse. <jsp:forward page= "/mapage.jsp"> <jsp:param name= "maVariable" value= "laValeur" /> </jsp:forward> Récupération : <%out.println(request.getParameter(maVariable));%> Tous les traitements codés à la suite de la redirection ne sont pas exécutés. Redirection