50 java servlet jsp
TRANSCRIPT
par Philippe Poulard
Servlet & JSP1
Philippe Poulard
par Philippe Poulard
Sommaire Servlets et JSP
Intro : Servlets et JSP dans J2EE Le conteneur Web Comparaison avec d'autres technos Web, avantages de Java
Servlet & JSP
Rappels HTTP Utilisation d'une servlet Cycle de vie d'une servlet Servlet Web : requtes et rponses, exemple Paramtres, cookies, sessions Porte des objets, partage des ressources Applications Web : dploiement Serveurs de servlet
JSPConstitution des pages Directives JSP et actions JavaBean dans les JSP Variables prdfinies Custom tags
Le paradigme MVCGnse MVC appliqu au Web Le modle La vue Le contrleur
2
exemple JavaBean exemple JSP exemple Servlet
par Philippe Poulard
Qu'est-ce ?
Spcifications : Composants Web de l'architecture J2EE Servlet http://java.sun.com/products/servlet/download.html http://java.sun.com/products/jsp/download.html Java Server Pages Firewall
EJB Container enterprise bean enterprise bean enterprise bean Web Container (Servlets, JSP, HTML, XML) JNDI JMS Javamail
Servlet & JSP
Client
Client Client
Enterprise Information Systems (RDBMS, ERP, Legacy Applications)
Client
3
Client Tier
Middle Tier
EIS Tier
par Philippe Poulard
Servlet
Une servlet est un composant qui tend les fonctionnalits d'un serveur web de manire portable et efficace. Un serveur web hberge des classes Java servlets qui sont excutes l'intrieur du container web. Le serveur web associe une ou plusieurs URLs chaque servlet. La servlet est invoque lorsque des requtes HTTP utilisateur sont soumises au serveur. Quand la servlet reoit une requte du client, elle gnre une rponse, ventuellement en utilisant la logique mtier contenue dans des EJBs ou en interrogeant directement une base de donnes. Elle retourne alors une rponse HTML ou XML au demandeur. Un dveloppeur de servlet utilise l'API servlet pour : Initialiser et finaliser la servlet Accder l'environnement de la servlet Recevoir ou rediriger les requtes et envoyer les rponses Interagir avec d'autres servlets ou composants Maintenir les informations de sessions du client Filtrer avant ou aprs traitement les requtes et les rponses Implmenter la scurit sur le tiers web
Servlet & JSP4
par Philippe Poulard JSP = Document Centric servlet ASP PHP La technologie JSP fournit un moyen simple et extensible pour gnrer du contenu dynamique pour le client web.
JSPJava Server Pages
Servlet & JSP5
Une page JSP est un document texte qui dcrit comment traiter la requte d'un client et comment crer une rponse. Une page JSP contient : Des informations de formatage (modle) du document web, habituellement en HTML ou XML. Les concepteurs web peuvent modifier cette partie de la page sans affecter les parties dynamiques. Cette approche permet de sparer la prsentation du contenu dynamique. Des lments JSP et de script pour gnrer le contenu dynamique du document Web. La plupart des pages JSP utilisent aussi des JavaBeans et/ou des Enterprise JavaBeans pour raliser les oprations complexes de l'application. Les JSP permettent en standard d'instancier des beans, de modifier ou lire leurs attributs et de tlcharger des applets. La technologie JSP est extensible en utilisant des balises personnalises qui peuvent tre encapsules dans des bibliothques de balises personnalises (taglibs)
par Philippe Poulard
Exemple JSPLe rsultat d'une page peut tre : HTML XML SVG WML
Localized Dates Locale:
Servlet & JSP6
Le rsultat est une page HTML dynamique
par Philippe Poulard
Le conteneur Web
Les composants web sont hbergs dans des conteneurs de servlets, conteneurs de JSP et conteneurs web. En sus des fonctionnalits normales d'un conteneur de composants, un conteneur de servlets (servlets container) fournit les services rseaux par lesquels les requtes et rponses sont mises.
Servlet & JSP
Il dcode galement les requtes et formate les rponses dans le format appropri. Tous les conteneurs de servlets doivent supporter le protocole HTTP et peuvent aussi supporter le protocole HTTPS. Un conteneur de JSP (JSP container) fournit les mmes services qu'un conteneur de servlets. Ces conteneurs sont gnralement appels conteneurs web (Web containers). container Web requte HTTP servlet service cration d'un Thread pour chaque requte
7
par Philippe Poulard
Technos Web
(pas de "bricolage") La technologie J2EE offre une approche beaucoup plus formelle pour le traitement des applications Web que les technologies alternatives apparentes (ASP, PHP, CGI, ISAPI, NSAPI) CGI Un processus par requte est lance sur le serveur Servlets Rsidentes pas de temps de lancement Multithreads Gestion de cache Connexions persistantes (BD) Plus efficaces Plus pratiques Plus puissantes Portables Gratuites On peut faire des choses impossibles raliser avec des scripts CGI C'est du Java !a rame
Servlet & JSP8
gratuit implment sur tous les serveurs Web supporte tous les langages (les utilisateurs l'utilisent surtout avec PERL) assez lent parfois difficile dvelopper Manque d'volutivit (plusieurs processus crs, serveur trs sollicit) Contournement : FastCGI : instance partage des programmes CGI mod_perl (Apache) : script CGI interprt et excut dans le serveur Web
par Philippe Poulard
Avantages de Java ct serveur
Servlet & JSP
Servlets plus pratiques : C'est du Java ! API pour grer : les cookies le suivi de session le protocole HTTP (headers HTTP)
Portabilit de Java Supportes sur tous les serveurs : Apache Microsoft IIS WebStar
Plus facile utiliser que CGI/PERL
Partage de donnes entre servlets Chanage de servlets Gestion de sessions
9
Inconvnient : Comme toutes les technos Web, l'interface graphique utilisateur est limite HTML
par Philippe Poulard
Requtes HTTP Contenu d'une requte HTTP
infos den-tte URL de la ressource donnes de formatage Requte GET : pour extraire des informations sur le serveur intgre les donnes de formatage l URLhttp://www.inria.fr/hello?param1=value1&
Servlet & JSP
Requte POST : pour modifier les donnes sur le serveur donnes de la page assembles/envoyes vers le serveur
Traitement d'une requte par le serveurAvec la requte HTTP, le serveur Web : identifie lenvironnement d exploitation charger (mapping) en fonction de l extension du fichier (.jsp , .cgi , .php...) ou du rpertoire o il se trouve ( cgi-bin/, servlet/) charge lenvironnement d excution (run-time) interprteur Perl pour les programmes CGI en Perl JVM pour les servlets Java
10
par Philippe Poulard
Utilisation d'une servlet
Une servlet doit implmenter linterface javax.servlet.Servlet soit directement, soit en drivant dune classe qui implmente dj cette interface (comme GenericServlet ou HttpServlet ) L'interface javax.servlet.Servlet possde les mthodes pour : initialiser la servlet : init() recevoir et rpondre aux requtes des clients : service() dtruire la servlet et ses ressources : destroy()import javax.servlet.*; public class MyServlet implements Servlet { public void init(ServletConfig config) throws ServletException { // phase d'initialisation } public void service( ServletRequest req, ServletResponse rep) throws ServletException, IOException { // phase de traitement des requtes } public void destroy() { // phase d'arrt }
Servlet & JSP
11
}
par Philippe Poulard
Cycle de viemoteur de servlet
dmarrage du serveur
cre un pool de Thread instancie la servlet initialise la servlet
Thread
Thread Servlet init()
Servlet & JSP
requte HTTP 1 requte HTTP 2 rponse HTTP 1 rponse HTTP 2arrt du serveur
affecter un Thread affecter un Thread service() service()
terminer le pool de Thread dtruire la servlet destroy()
12
par Philippe Poulard
Utilisation d'une servlet Web
Une servlet Web tend la classe javax.servlet.http.HttpServlet (elle implmente javax.servlet.Servlet) Plusieurs mthodes spcifiques au protocole HTTP remplacent la mthode service(), qui appelle la mthode correspondant au type de requte : Mthode Type de requte HTTP GET POST PUT DELETE HEAD OPTIONS TRACEimport javax.servlet.*; import javax.servlet.http.*; public class SimpleServlet extends HttpServlet {
Servlet & JSP
doGet() doPost() doPut() doDelete() doHead() doOptions() doTrace()
public void init(ServletConfig c) throws ServletException { // phase d'initialisation } public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { // phase de traitement des requtes HTTP GET } public void destroy() { // phase d'arrt } public String getServletInfo() { // dlivre des informations sur la servlet } }
Une servlet doit redfinir au moins l'une de ces mthodes
13
par Philippe Poulard
Requtes et rponses HTTP dans une servlet
Les mthodes doGet(), doPost(), doPut(), doDelete(), doHead(), doOptions()et doTrace() utilisent des objets HttpServletRequest et HttpServletResponse passs en paramtres pour implmenter le service. javax.servlet.http.HttpServletRequest contient les renseignements sur le formulaire HTML initial : la mthode getParameter() rcupre les paramtres dentre javax.servlet.http.HttpServletResponse contient le flux de sortie pour la gnration de la page HTML rsultat la mthode getWriter() permet de l'obtenirimport java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class MyServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Use "request" to read incoming HTTP headers (e.g. cookies) // and HTML form data (e.g. data the user entered and submitted) // Use "response" to specify the HTTP response line and headers // (e.g. specifying the content type, setting cookies). PrintWriter out = response.getWriter(); // Use "out" to send content to browser } }
Servlet & JSP14
par Philippe Poulard
Exemple de servlet
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class DateDuJour extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("plain/text"); PrintWriter out = response.getWriter(); out.println("Nous sommes le " + (new java.util.Date()).toString()); out.flush(); } }
Servlet & JSP
Web Explorer
Nous sommes le Fri Apr 4 10:00:00 MEST 2003
15
par Philippe Poulard
Rcupration des paramtres
Les paramtres sont crs par les formulaires HTML Visibles (GET) ou non (POST) Ces paramtres doivent tre dcods (CGI) tche prpare en amont avec les servlets !
Servlet & JSP
http://www.inria.fr/hello?param1=value1&
La mthode getParameter() de HttpServletRequest fonctionne indiffremment avec GET ou POSTpublic void doGet( HttpServletRequest req, HttpServletResponse rep) throws ServletException, IOException { Enumeration list = req.getParameterNames(); String value1 = req.getParameter("param1"); if(value1 == null) { // } // }
16
par Philippe Poulard
Cookies Cest quoi ?
Informations envoyes par le serveur, stocke sur le client et renvoyes par le client quand il revient visiter le mme URL Dure de vie rglable Permet d'avoir des donnes persistantes ct client
Servlet & JSP
Utilisations courantesIdentification des utilisateurs Eviter la saisie dinformations rptition (login, password, adresse, tlphone) Grer des prfrences utilisateur, profils
Cookie et scuritJamais interprt ou excut : pas de virus Pas partageable : le navigateur ne distribue le cookie qu'au serveur qui l'a mis Un cookie est limit 4KB et les navigateurs se limitent 300 cookies (20 par site) : pas de surcharge de disque Bien pour rendre prives des donnes non sensibles (pas n CB !) mais ne constitue pas un traitement srieux de la scurit
17
par Philippe Poulard Une API pour manipuler les cookies :
Gestion des Cookies
Classe : javax.servlet.http.Cookie crire/lire un cookie : addCookie(cookie), getCookies(), positionner des attributs dun cookie : Cookie#setXxx() caractres non autoriss : espace [ ] ( ) = , " / ? @ : ;
Servlet & JSP
Exemple d'envoi d'un cookie :Cookie unCookie = new Cookie("nom", valeur); // ici positionnement des attributs si ncessaire response.addCookie(unCookie);
Attributs des cookiesgetValue()/setValue() getName()/setName() getComment()/setComment() getMaxAge()/setMaxAge() : dlai restant avant expiration du cookie (en seconde) (par dfaut : pour la session courante) getPath()/setPath() : rpertoire o s'applique le cookie (rpertoire courant ou chemin spcifique)
18
par Philippe Poulard
Exemple de Cookie
Servlet & JSP
Cookie [] cookies = request.getCookies(); String nom = getCookieValue(cookies, "nom", "non trouv"); // public static String getCookieValue(Cookie [] cookies, String cookieName, String defaultValue) { for(int i=0; i < cookies.length; i++) { Cookie cookie = cookies[i]; if(cookieName.equals(cookie.getName()) return(cookie.getValue()); } return(defaultValue); }
19
par Philippe Poulard
Gestion des sessions
Servlet & JSP
Trs simple avec l'API des servlets Interface javax.servlet.http.HttpSession Un objet "session" peut tre associ avec chaque requte Il va servir stocker des informations temporairement Dure de vie limite et rglable si la session n'existe pas dj : true : cre l'objet false : renvoie nullHttpSession session = request.getSession(true); Caddy caddy = (Caddy) session.getValue("caddy"); if(caddy != null) { // le caddy n'est pas vide ! afficheLeContenuDuCaddy(caddy); } else { caddy = new Caddy(); // caddy.ajouterUnAchat(request.getParameter("NoArticle")); session.putValue("caddy", caddy); } //
getID() isNew()
Quelques mthodes :
getCreationTime()/getLastAccessedTime() getMaxInactiveInterval() getValue()/removeValue()/putValue() invalidate()
20
par Philippe Poulard
Porte des objets
Servlet & JSP
Scope objects Web context
Classe
Accessibilit depuis les composants web d'une application les composants web en rapport avec les requtes d'une session (maintient de l'tat client) les composants web en rapport avec une requte la page JSP qui a cr l'objet
javax.servlet.ServletContext
session
javax.servlet.http.HttpSession
request page
javax.servlet.ServletRequest
javax.servlet.jsp.PageContext
21
par Philippe Poulard
Partage de ressourcesContrle des accs concurrents donnes en mmoire fichiers connections aux bases de donnes connections aux rseaux
Servlet & JSP
public class Counter { private int counter; public Counter() { counter = 0; } public synchronized int getCounter() { return counter; } public synchronized int setCounter(int c) { counter = c; return counter; } public synchronized int incCounter() { return(++counter); } }
22
par Philippe Poulard
Pourquoi JSP ?
Servlet & JSP
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("\n" + "\nHello World\n" + "Hello World\n"); out.println("" + (new java.util.Date()).toString() + ""); out.println(""); } }
Hello World Hello World
23
Le conteneur gnre une servlet Java partir du code JSP, puis compile la classe. Cette opration n'est faite qu'une fois, et sera renouvele en cas de modification du code JSP.
par Philippe Poulard
Constitution d'une page JSPDirectives Dclaration de variable
Localized Dates Locale:
Servlet & JSP
Scriptlet
Expressions
Elements JSP
24
par Philippe Poulard
Directives JSP et actions Directives
Album Artiste Music shopping Prix Quantit Music shopping
Music shopping - Web Explorer quantit : 1 CD : Red hot chili peppers|Californication|16.95 Ajouter au panier Album Artiste Prix Quantit
Servlet & JSP
Music shopping
Cart.jsp37
best of OK computer
Rolling stones Radiohead
18.95 15.95
2 1
Supprimer Supprimer
par Philippe Poulard
Le contrleur
Servlet Struts XCL
Approche dclarative Approche procdurale
Servlet & JSP
Traite les requtes entrantes Invoque les composants appropris
38
par Philippe Poulard
Le contrleur : exemple servletCdShopServlet.java
39
import java.util.*; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import CD; public class CdShopServlet extends HttpServlet { public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOExcpetion { HttpSession session=req.getSession(false); if (session==null) { res.sendRedirect("error.html"); } Vector buyList= (Vector) session.getValue("shopping.cdCart"); String action = req.getParameter("action"); if ("CHECKOUT".equals(action)) { // order stuff here } else { if ("DELETE".equals(action)) { String del = req.getParameter("delIndex"); int d = Integer.parseInt(d); buyList.removeElementAt(d); } else if ("ADD".equals(action)) { CD newCd = getCD(req); int index = buyList.indexOf(newCd); private CD getCD(HttpServletRequest req) { if ( index!=-1) { String theCd = req.getparameter("CD"); CD cd = (CD) buyList.elementAt(index); String qty = req.getparameter("qty"); cd.setQuantity(cd.getQuantity()+newCd.getQuantity()); StringTokenizer t = } else { new StringTokenizer(theCd, "|"); buyList.addElement(newCd); CD cd = new CD(); } cd.setArtist(t.nextToken()); } cd.setAlbum(t.nextToken()); session.putValue("shopping.cdCart", buyList); int p = Integer.parseInt(t.nextToken()); String url="/cd/Shop.jsp"; cd.setPrice(p); ServletContext ctxt = getServletContext(); cd.setQuantity(Integer.parseInt(qty)); RequestDispatcher rd = ctxt.getRequestDispatcher(url); return cd; rd.forward(req, res); } } } }
Servlet & JSP
par Philippe Poulard Model : logique d'accs aux donnes View : page JSP qui assemble en HTML le rsultat Controler : servlet qui interprte les requtes du client
Publication Web avec une architecture MVCDveloppeur Web Dcode les requtes Rcupre les donnes brutes Applique les transformations XSLT Se connecte aux sources de donnes Accde aux donnes Programmeur du Systme dInformation Model
Servlet & JSP
ControlerWeb
requte PDF rponse JSP View
XHTML
Rcupre les donnes calcules Les insre dans la page HTML Web designer40