50 Java Servlet Jsp

Embed Size (px)

Citation preview

par Philippe Poulard

Servlet & JSP1

[email protected]

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