Vous êtes sur la page 1sur 27

Aide mmoire servlets et JSP

Nathanal COTTIN http://www.ncottin.net Version 1.2

Comprendre
les servlets et Java Server Pages

simplement
par la pratique

Aide mmoire servlets et JSP

Version 1.2

Table des matires


Introduction....................................................................................................................4 Servlets..........................................................................................................................5 Cycle de vie...............................................................................................................5 Exemple.....................................................................................................................5 Gestion des paramtres............................................................................................6 Gestion des informations de session.........................................................................6 JSP................................................................................................................................6 Dfinition....................................................................................................................6 Rsum des directives..............................................................................................7 Scriptlets....................................................................................................................9 Rdaction des commentaires....................................................................................9 Utilisation avance...................................................................................................10 JavaBeans...............................................................................................................12 Exemple simple de mise en uvre.............................................................................14 Construction du bean...............................................................................................14 Cration de la page de formulaire index.html ....................................................15 Cration de la page display.jsp ......................................................................... 15 Cration de la page derreur error.jsp ................................................................16 Connexion aux bases de donnes..............................................................................18 Connexion dune page JSP une base de donnes..............................................18 Excution dune requte SQL..................................................................................18 Conclusion...................................................................................................................19 Annexe 1 : utilisation des servlets et JSP sous Tomcat............................................. 20 Installation................................................................................................................20 Mise en route...........................................................................................................20 Remarque dutilisation gnrale..............................................................................20 Servlets sous Tomcat..............................................................................................20 JSP et JavaBeans sous Tomcat..............................................................................22 Annexe 2 : description du protocole HTTP................................................................. 22 Annexe 3 : principaux codes dtat HTTP...................................................................22 Annexe 4 : JSP sous Tomcat et base de donnes MySQL........................................23 Installation du paquetage util.sql .......................................................................24 Utilisation de la classe DbConnection ...............................................................24 Nathanal COTTIN http://www.ncottin.net 2

Aide mmoire servlets et JSP

Version 1.2

Annexe 5 : uploads de fichiers....................................................................................25 Prsentation du paquetage util.more.web.form .................................................25 Utilisation du paquetage util.more.web.form .....................................................25 Annexe 6 : description de la librairie util ................................................................27

Nathanal COTTIN http://www.ncottin.net

Aide mmoire servlets et JSP

Version 1.2

Introduction
Ce document rcapitule les informations essentielles la conception de sites web faisant appel la technologie Java ct serveur par lutilisation de servlets et de scripts JSP. Les servlets constituent la rponse Java aux programmes CGI ( Common Gateway Interface ). Excutes sur un serveur dapplications, elles interceptent les requtes des navigateurs web et gnrent des rponses (souvent en DHTML) construites dynamiquement laide du langage Java. Les JSP sont lextension des servlets et se rapprochent du modle J2EE qui spare : Les contenus statiques et dynamiques La prsentation et la logique mtier, notamment grce aux JavaBeans.

Nathanal COTTIN http://www.ncottin.net

Aide mmoire servlets et JSP

Version 1.2

Servlets
Les servlets font usage de la technologie Java pour gnrer des pages HTML dynamiques (DHTML). Elles permettent lintgration de lensemble des fonctionnalits de J2EE, contrairement dautres langages web et notamment PHP.

Cycle de vie

init doGet service doPost destroy Les mthodes init() et destroy() ne sont appeles quune seule fois par le conteneur de servlets, respectivement la premire fois que la servlet est appele et au moment o le conteneur (donc le serveur dapplications) termine son excution, contrairement aux mthodes service() et doXXX() , appeles chaque invocation de la servlet.

Exemple
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class Hello extends HttpServlet { public void doGet( HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>"); out.println("Test de servlet"); out.println("</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Hello World!!!</h1>"); out.println("<p>This is a test servlet</p>");

Nathanal COTTIN http://www.ncottin.net

Aide mmoire servlets et JSP

Version 1.2

out.println("</body>"); out.println("</html>"); } }

Gestion des paramtres


Les paramtres peuvent tre indiqus : Directement dans lURL de la requte (rcriture dURL) :
http://serveur/servlet?param1=valeur1&param2=valeur2

Transmis par le biais dun formulaire (principalement GET, POST et POST/multipart, utilis pour les uploads de fichiers sur le serveur).

Les paramtres en entre sont rcuprs par la servlet laide de la mthode getParameter :
String request.getParameter(String paramName)

Gestion des informations de session


Les servlets permettent de simuler un mode connect entre les pages consultes par lutilisateur. En effet, le web noffre par dfaut aucun suivi de session. Cette fonctionnalit est supporte par les servlets laide de lobjet HttpSession obtenu laide de request.getSession(). Les mthodes public void putValue(String name, Object value) et public Object getValue(String name) permettent respectivement dattribuer (i.e. modifier) et consulter une valeur de session identifie par son nom.

JSP
Dfinition
La technologie JSP simplifie la mise en uvre de sites faisant appel Java ct serveur. Il sagit de code DHTML dans lequel sinsrent des scriptlets. Les pages JSP sont transformes la vole par un traducteur interne au serveur dapplications lors de leur premier appel. Cette traduction permet de gnrer, compiler puis instancier un objet Java correspondant. Ce dernier est comparable, dans son fonctionnement, une servlet pour laquelle la mthode service a t redfinie laide des instructions JSP. Le code DHTML est ainsi interprt par le traducteur afin de le retourner au client laide de commandes similaires linstruction out.println() des servlets. Le code Java nest soumis aucun traitement avant compilation de la classe Java rsultante.

Nathanal COTTIN http://www.ncottin.net

Aide mmoire servlets et JSP

Version 1.2

Rsum des directives


page include Informations relatives la page courante Fichier inclure littralement. Ce fichier peut donc lui-mme contenir du code JSP

Les directives JSP scrivent gnralement sous la forme


<%@ <nomDirective> <attributs> %>

Le balisage XML quivalent est


<jsp:<directive>:<nomDirective> <attributs> />

Directives de type page


<%@ <%@ <%@ <%@ <%@ <%@ <%@ <%@ <%@ <%@ <%@ <%@ page page page page page page page page page page page page language="java" %> info="description" %> import="paquetage1.*" %> imports="paquetage1.*, paquetage2.classe" %> extends="classe" %> session="true|false" %> buffer="none|tailleKo" %> autoFlush="true|false" %> errorPage="cheminRelatifPageErreur" %> isErrorPage="true|false" %> contentType="text/html;charset=ISO-8859-1" %> isThreadSafe="true|false" %>

Directives de type include


<%@ include file="chemin_fichier_local" %>

Le fichier indiqu par chemin_fichier_local est insr tel quel lendroit de lappel la directive include . Il est galement possible dutiliser la directive jsp:include :
<jsp:include page="URL_relative" flush="true" />

Ou, alternativement :
<jsp:include page="URL_relative" flush="true"> <jsp:param name="paramName" value="paramValue" /> </jsp:include>

Nathanal COTTIN http://www.ncottin.net

Aide mmoire servlets et JSP

Version 1.2

Dans ce cas, les ressources incluses nont accs qu lobjet out (de type JspWriter) JSP et ne peuvent faire usage des cookies. De plus, celles-ci ne peuvent contenir du code JSP gnral. Enfin, la premire directive dinclusion est excute au moment de la traduction du JSP en code Java (inclusion statique) alors que la seconde directive est excute au moment du traitement de la requte (inclusion dynamique).

Autres directives
La directive taglib permet de dfinir des balises personnalises dans des bibliothques de balises :
<%@ taglib uri="tagLibrairie" prefix="tagPrefix" %>

La commande forward permet de rediriger la page courante (JSP) vers une seconde page tout en conservant les informations de session collectes jusqualors (par les beans notamment) :
<jsp:forward page="autre_page.jsp" />

Ou alternativement (en mettant jour la valeur dun paramtre) :


<jsp:forward page="URL_relative"> <jsp:param name="paramName" value="paramValue" /> </jsp:forward>

Laction plugin est utilise pour gnrer des balises HTML de type <OBJECT> ou <EMBED> en fonction du navigateur client. Elle a pour effet le tlchargement du plug-in Java (si ncessaire) suivi de lexcution de lapplet ou du bean spcifi dans la balise :
<jsp:plugin type="bean|applet" name="objectName" code="objectCode" codebase="objectCodebase" hspace="hspace" vspace="vspace" width="width" jreversion="jreversion" nspluginurl="url" iepluginurl="url"> <jsp:params> <jsp:param name="param1" value="paramValue1" /> <jsp:param name="paramN" value="paramValueN" /> </jsp:params> <jsp:fallback>Texte alternatif si plugin non charg </jsp:fallback> </jsp:plugin>

Nathanal COTTIN http://www.ncottin.net

Aide mmoire servlets et JSP

Version 1.2

Scriptlets
Dfinition et intgration
Les scriptlets permettent dinsrer du code Java au sein du code DHTML des pages JSP laide des dlimiteurs <% et %> :
<% code Java %>

Il est galement possible dutiliser des balises XML. Les scriptlets sont alors dclares par :
<jsp:scriptlet> code Java </jsp:scriptlet>

Le code rdig est recopi tel quel par le traducteur Java des scripts JSP. Ces derniers autorisent galement la dclaration de variables de classe et de mthodes permettant dagrger les traitements de prsentation. Dans ce cas, les dlimiteurs <%! et %> sont employs.

Exemples
<% String str = "Boucle "; for (int i=0; i<10; i++) { out.println(str + i + "<br/>"); } %>

Le code prcdent utilise la variable out dfinie par le traducteur de pages JSP en code Java intgral. Il est strictement quivalent :
<% for (int i=0; i<10; i++) { %> Boucle <%= i %><br/> <% } %>

Laffichage dune variable ou dune expression (lvaluation dune mthode par exemple) se fait ainsi indiffremment par <% out.println(nomVariable); %>, <%= nomVariable %> ou en utilisant lopration getProperty approprie lorsquil sagit dun bean. Lquivalent XML est <jsp:expression>nomVariable</jsp:expression>.

Rdaction des commentaires


Les commentaires JSP ont leur propre syntaxe :
<%-- Dbut de commentaire JSP Fin de commentaire JSP --%>

Nathanal COTTIN http://www.ncottin.net

Aide mmoire servlets et JSP

Version 1.2

Les informations situes entre les balises de dbut et fin de commentaire ne sont pas intgres lors de la traduction de la page JSP. Par contre, les commentaires HTML apparatront comme tels lors de la gnration de la page HTML. Rappelons que les commentaires en langage HTML scrivent comme suit :
<!-- Dbut de commentaire HTML Fin de commentaire HTML -->

Les commentaires Java demeurent valides au sein des scriptlets.

Utilisation avance
Dclaration de mthodes et variables de classe
Lensemble du code Java (et des instructions DHTML) est plac par le traducteur de scripts JSP au sein de la mthode _jspService , similaire la mthode service des servlets. De fait, les variables dfinies dans le script JSP sont dclares comme locales cette mthode par le traducteur ayant gnr lobjet Java correspondant au JSP. Il est toutefois permis de : Dclarer des mthodes utilisables par les scriptlets du JSP. Par exemple, la mthode isEmpty qui vrifie si un paramtre est renseign ou non :
<%! private boolean isEmpty(String str) { return (str == null) || str.equals(""); } %>

De dclarer des variables de classe. Lexemple suivant dclare les variables prives non statiques monEntier et maChaine :
<%! private int monEntier = 0; private String maChaine = null; %>

Lquivalent XML de ce type de dclaration est :


<jsp:declaration> private int monEntier = 0; private String maChaine = null; </jsp:declaration>

Note : lintrt de recourir lutilisation de variables de classe semble beaucoup moins vident que la dclaration de mthodes. En effet, les variables dfinies au sein

Nathanal COTTIN http://www.ncottin.net

10

Aide mmoire servlets et JSP

Version 1.2

des scriptlets sont reconnues par lensemble des scriptlets situes en aval dans la page JSP.

Initialisation et destruction de page JSP


Conformment aux mthodes init() et destroy() des servlets, JSP met en uvre les mthodes jspInit() et jspDestroy() ayant pour signature :
public void jspInit(); public void jspDestroy();

Ces mthodes ont un comportement identique leurs quivalents servlets.

Liste des objets dfinis par dfaut par le traducteur de JSP


Objet request response pageContext session application Utilisation De type HttpServletRequest De type HttpServletResponse Fournit lensemble des objets implicites JSP Session HTTP correspondant la requte (HttpSession) Valeur retourne par getServletConfig().getContext(), permettant de manipuler des attributs communs tous les JSP : out config page exception void setAttribute(String, Object) Object getAttribute(String)

Flux de sortie, de type JspWriter (similaire PrintWriter) Valeur retourne par getServletConfig() Remplace le mot-cl this Erreur : Transmise la page derreur (si errorPage est spcifi dans la page ayant gnr lereur). Rcupre par la page derreur (uniquement si la proprit isErrorPage est positionne true ).

Page derreur
Les erreurs non captures par les scriptlets peuvent tre rediriges vers une page derreur via la directive <%@ page errorPage="cheminRelatifPageErreur" %> . Cette page derreur peut tre ou non une page JSP. Seul un chemin relatif est tolr.

Nathanal COTTIN http://www.ncottin.net

11

Aide mmoire servlets et JSP

Version 1.2

Dans le cas o la page derreur est un script JSP, lattribut isErrorPage doit explicitement tre indiqu de sorte que la variable intitule exception (de type Throwable) puisse tre utilise. Il est galement possible de faire appel lattribut javax.servletjsp.jspException de la requte (via lobjet implicite request ). Lorsquune exception est leve, le tampon de sortie est vid avant affichage de la page derreur. Nanmoins, si la page source de lexception non capture autorise lautoFlush, une erreur HTTP 500 (voir codes HTTP en annexe) peut survenir si une rponse partielle a dj t retourne au client.

JavaBeans
Dfinition
Un JavaBean est un composant Java permettant de sparer la logique mtier de la prsentation des donnes. Il sagit dune classe Java (souvent dclare finale ) qui dispose des proprits suivantes : Il doit tre dclar public afin dtre accessible depuis les scripts JSP. Le seul constructeur disponible est public sans argument. Ce dernier doit initialiser les valeurs par dfaut des attributs ( null par exemple). Les mthodes publiques set et get sont dfinies pour chaque attribut, selon le principe des DesignPatterns. Par exemple, un attribut att doit disposer des mthodes public void setAtt(String val) et public String getAtt() .

Dclaration
Les JavaBeans sintgrent au sein des JSP en les dclarant en en-tte laide de la directive useBean :
<jsp:useBean id="beanId" class="beanClass" scope="session" />

La porte du bean ( scope ) peut tre : application : le bean est persistant et partag entre tous les clients (et par consquent les pages JSP) qui en font usage. session : le bean est spcifique chaque client. Il permet de transmettre des informations de session dune page lautre. Il suffit de dclarer le mme bean dans la seconde page pour que celle-ci soit en mesure de rcuprer les informations de session enregistres par le bean. request : le bean est dtruit lorsque le client demande une nouvelle page. Le passage des paramtres de suivi de session doit ainsi tre ralis manuellement (par formulaire avec champs cachs ou par rcriture dURL). page : rarement employe, cette porte est limite la page en cours (aucune information de session ne peut tre rcupre) : ce bean est accessible nimporte quel endroit de la page.

Nathanal COTTIN http://www.ncottin.net

12

Aide mmoire servlets et JSP

Version 1.2

Cette directive doit tre complte par linstruction suivante :


<jsp:setProperty name="beanId" property="*" />

Cette dernire permet de limiter ventuellement les informations que le bean doit mettre jour. Par dfaut, le caractre gnrique * permet de spcifier que le bean rcupre autant dinformations que possible. Cette dclaration de mise jour doit tre indique dans le code JSP : dans le cas contraire, les attributs du bean ne seront pas mis jour. Une restriction cependant : lutilisation des JavaBeans au sein des pages JSP ne permet pas de diffrentier directement (sans recourir lobjet implicite request ) la mthode denvoi HTTP (GET, POST, etc.).

Utilisation
Lorsquun bean est dclar et porte didentifiant beanId , il peut tre utilis directement au sein du code DHTML ou depuis une scriptlet. Chaque bean dispose dun ensemble dattributs (et des mthodes set et get correspondantes). Lors de lappel dun script JSP avec envoi dinformations, les attributs dclars dans les beans sont mis jour (par appel interne des mthodes set ). Lorsquune valeur dattribut nest pas mentionne par la requte, deux cas sont envisageables (la porte page est ici hors de propos) : La porte du bean est application ou session : lancienne valeur de lattribut est conserve (la requte ne mettant pas jour cet attribut). La porte du bean est request : dans ce cas, la valeur de lattribut est rinitialise (souvent null , mais toute autre valeur peut tre spcifie par le constructeur, appel lors de la cration de linstance du bean). Utilisation directe En rgle gnrale, lutilisation directe nest pas conseille car il est souvent ncessaire deffectuer des vrifications (validation) avant affichage. Nanmoins, laffichage de lattribut att du bean beanId utilise la syntaxe suivante :
<jsp:getProperty name="beanId" property="att" />

Lorsque le paramtre att na pas t transmis, le rsultat de cet appel sera null (conversion du pointeur null en chane de 4 caractres valant null ). La mise jour de cet attribut emploie la directive jsp:setProperty :
<jsp:setProperty name="beanId" property="att" value="valeur" />

Le caractre gnrique * peut remplacer att afin dindiquer que lensemble des proprits du bean doivent tre mises jour. Dans ce cas, le dernier paramtre nest pas mentionn :

Nathanal COTTIN http://www.ncottin.net

13

Aide mmoire servlets et JSP

Version 1.2

<jsp:setProperty name="beanId" property="*" />

Le serveur dapplications utilise le principe de rflexion (ou miroir ) Java pour appeler les mthodes de type set dclares par le bean. Consulter le paquetage java.lang.reflect de lAPI Java pour en savoir davantage. Utilisation au sein des scriptlets Il est possible dappeler lensemble des mthodes dclares publiquement par le bean, comme lindique lexemple suivant :
<% String valeur = beanId.getAtt(); if (valeur == null) { // La requte ne mentionne pas le paramtre "att" } else { // La requte mentionne effectivement le paramtre "att" } %>

Exemple simple de mise en uvre


Cet exemple propose de remplir un formulaire puis dafficher les informations saisies par lutilisateur laide dun script JSP et dun bean SimpleBean (qui devra tre compil). Pour simplifier, seul le nom de lutilisateur est rcupr.

Construction du bean
Le bean simpleBean est dclar comme faisant partie du paquetage test afin dtre compatible avec le serveur dapplications Tomcat. A lattribut priv name sont associes les mthodes setName et getName . Enfin, le constructeur sans argument est indiqu (mme sil est dans ce cas facultatif). Le code du bean propos est donc conforme la dfinition dun JavaBean.
package test; // La dfinition dun paquetage est ncessaire sous Tomcat public final class SimpleBean { private String name = null;

// Attribut priv

public SimpleBean() { // Il nest pas ncessaire dindiquer le constructeur dans ce cas // car lattribut dj t initialis } public void setName(String value) { this.name = value; } public String getName() { return this.name; } }

Nathanal COTTIN http://www.ncottin.net

14

Aide mmoire servlets et JSP

Version 1.2

Cration de la page de formulaire index.html


<html> <head> </head> <body> <!-- Lappel la page JSP suppose que la connexion est dj tablie, par exemple sous "localhost" en indiquant le port 8080 --> <br/><br/> <form action="display.jsp" method="post"> Nom : <input type="text" name="name"> <!-- Le champ sappelle "name" afin que lattribut correspondant soit mis jour par le bean via "setName(String)" dans la page JSP --> <br/><input type="submit" value="Envoyer"> </form> </body> </html>

Cration de la page display.jsp


Premire version
Le paramtre name fourni par lenvoi du formulaire est rcupr par le bean simpleBean . Il est ensuite affich deux fois : en utilisant un affichage direct par la directive jsp:getProperty puis laide de la chane de caractres nameStr :
<%@ page language="java" %> <jsp:useBean id="simpleBean" class="test.SimpleBean" scope="request" /> <jsp:setProperty name="simpleBean" property="*" /> <html> <head> </head> <body> <!-- Affiche 2 fois le nom, laide de 2 techniques diffrentes --> Nom saisi : <jsp:getProperty name="simpleBean" property="name" /> <% // Le nom a t mis jour automatiquement par le bean (cf setProperty) String nameStr = simpleBean.getName(); %> <br/> Nom saisi: <%= nameStr %> <br/><br/> <form action="display.jsp" method="post"> Nouveau nom : <input type="text" name="name"> <br/><input type="submit" value="Envoyer"> </form>

Nathanal COTTIN http://www.ncottin.net

15

Aide mmoire servlets et JSP

Version 1.2

</body> </html>

Seconde version
Le paramtre name fourni par lenvoi du formulaire est rcupr par le bean simpleBean . Si une valeur a t transmise, celle-ci est affiche. Dans le cas contraire, le script redirige vers la page derreur error.jsp via la directive JSP <%@ page errorPage="error.jsp" %> :
<%@ page language="java" %> <%@ page errorPage="error.jsp" %> <jsp:useBean id="simpleBean" class="test.SimpleBean" scope="request" /> <jsp:setProperty name="simpleBean" property="*" /> <%! // Ajout de la mthode "isEmpty" pour valider le paramtre "name" private boolean isEmpty(String str) { return (str == null) || str.equals(""); } %> <% String nameStr = simpleBean.getName(); if (isEmpty(nameStr)) { throw new Exception("Veuillez saisir un nom"); } %> <html> <head> </head> <body> Nom saisi: <%= nameStr %> <br/><br/> <form action="display.jsp" method="post"> Nouveau nom : <input type="text" name="name"> <br/><input type="submit" value="Envoyer"> </form> </body> </html>

Cration de la page derreur error.jsp


Premire version
La page derreur affiche le texte du message indiqu par la page ayant gnr lerreur.
<%@ page language="java" %> <%@ page isErrorPage="true" %>

Nathanal COTTIN http://www.ncottin.net

16

Aide mmoire servlets et JSP

Version 1.2

<html> <head> </head> <body> <h1>Erreur : <span style="color:red;"> <!-- Utilisation de la variable "exception" dclare automatiquement lors de la gnration du code Java correspondant la page JSP --> <%= exception.getMessage() %> </span> </h1> <br/><br/> <form action="display.jsp" method="post"> Nouveau nom : <input type="text" name="name"> <br/><input type="submit" value="Envoyer"> </form> </body> </html>

Seconde version
Cette version propose dafficher la pile des erreurs, notamment en cas de dbogage.
<%@ page language="java" %> <%@ page isErrorPage="true" import= "java.io.*" %> <html> <head> </head> <body> <h1>Erreur : <span style="color:red;"> <!-- Utilisation de la variable "exception" dclare automatiquement lors de la gnration du code Java correspondant la page JSP --> <% StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); excetion.printstackTrace(pw); out.println(sw); %> </span> </h1> <br/><br/> <form action="display.jsp" method="post"> Nouveau nom : <input type="text" name="name"> <br/><input type="submit" value="Envoyer"> </form> </body> </html>

Utilisation de la directive include


Considrons le bloc de code HTML suivant :

Nathanal COTTIN http://www.ncottin.net

17

Aide mmoire servlets et JSP

Version 1.2

<br/><br/> <form action="display.jsp" method="post"> Nouveau nom : <input type="text" name="name"> <br/><input type="submit" value="Envoyer"> </form>

Ce bloc est commun lensemble des pages JSP. Il serait judicieux de lextraire dans un fichier tiers form.dat (par exemple) qui sera ensuite intgr au sein des pages JSP laide de la commande <%@ include file="form.dat" %> .

Connexion aux bases de donnes


La cration dapplications ncessite gnralement une communication avec une base de donnes. Ceci suppose dune part linstallation de la base de donnes et dautre part lexcution dun dmon sur la machine hbergeant la base. Lintgration des appels la base de donnes au sein du code java des JSP est ralis laide de la directive :
<%@ page import="java.sql.*" %>

Connexion dune page JSP une base de donnes


Les JSP doivent ensuite se connecter la base choisie via JDBC ( Java DataBase Connectivity ), lquivalent Java des pilotes ODBC. Lannexe 4 traite spcifiquement de la connexion une base MySQL sous Tomcat. Lide est dinstancier le pilote appropri (il sagit par exemple de la classe org.gjt.mm.mysql.Driver ) dans une scriptlet laide de linstruction :
<% Class.forName("ClasseDuDriver").getInstance(); %>

Linterface java.sql.Connection permet dtablir la connexion avec la base de donnes ( laide du service java.sql.DriverManager ). Elle indique de plus lensemble des tables qui composent la base ainsi que les proprits de ces tables (description) :
<% String urlBase = "jdbc:TypeBase://Hte/NomBase?user=UtilisateurParDfaut"; Connection c = DriverManager.getConnection(urlBase); %>

La machine hte est souvent rfrence comme tant localhost . La portion dadresse dbutant par ?user= est facultative.

Excution dune requte SQL


Le langage SQL ( Simple Query Language ) est le langage standard de manipulation de bases de donnes (cration, suppression, slection, mise jour). Nathanal COTTIN http://www.ncottin.net 18

Aide mmoire servlets et JSP

Version 1.2

Lexcution dune requte laide de linterface java.sql.Statement suppose que la connexion avec une base de donnes est tablie. Dans une premire phase, la requte est prpare. Deux alternatives sont proposes : effectuer une prparation statique ou une prparation dynamique. La prparation statique revient spcifier la requte directement sous forme dune chane de caractres :
<% int id = 10; String query = "SELECT * FROM MA_TABLE WHERE `id` = '" + id + "'"; Statement stmt = c.createStatement(); ResultSet rs = stmt.executeQuery(query); %>

De fait, appeler cette mme requte avec un identifiant diffrent ( id ) revient recrer entirement la requte et demander sa r-excution. Pour pallier ce dfaut, le paquetage java.sql fournit la possibilit de crer une requte pour laquelle certaines valeurs sont omises :
<% PreparedStatement ps = c.prepareStatement(query) ; ps.setInt(1, 10); Statement stmt = c.createStatement(); ResultSet rs = stmt.executeQuery(); %>

Note : linstruction executeQuery doit tre remplace par executeUpdate dans le cas o la requte SQL est de type INSERT ou UPDATE .

Conclusion
Les JSP (et les JavaBeans) sont en rgle gnrale plus intuitifs que les servlets, cependant le recours aux servlets peut savrer utile dans certains cas : Besoin de contrle total du code pour viter les lignes de code inutiles gnres par le serveur dapplications lors de la transformation des JSP en code Java. Envoi de donnes qui ne sont pas au format HTML (le contenu dun fichier zip par exemple), c'est--dire dont le type de contenu ( content-type ) nest pas text/html .

Les JSP permettent en outre de sparer au maximum la logique mtier (traitements) de la prsentation. La possibilit dinclure textuellement des fichiers annexes permet de conserver une certaine cohrence dans la prsentation des informations. Enfin, les JSP (et les servlets) ouvrent la conception web lensemble de la technologie Java ct serveur dcrite par J2EE et notamment aux systmes distribus par le biais des EJB ( Enterprise Java Beans ) ou par le recours aux solutions de type CORBA. Nathanal COTTIN http://www.ncottin.net 19

Aide mmoire servlets et JSP

Version 1.2

Annexe 1 : utilisation des servlets et JSP sous Tomcat


Installation
Lexcutable Tomcat peut tre tlcharg depuis lURL http://jakarta.apache.org . Avant de procder son installation, un JDK (1.2 ou suprieur) doit tre install et la variable denvironnement JAVA_HOME dfinie. Cette dernire indique le chemin menant au dossier racine du JDK ( C:\jdk1.4.2 sous Windows, par exemple).

Mise en route
Tomcat coute le port 8080 ( alternate HTTP ) par dfaut. Les URL permettant de se connecter avec le serveur dapplications sont donc de la forme http://serveur:8080/ . Les tests en mode local sont de fait excuts avec http://localhost:8080/ ou http://127.0.0.1:8080/ . Pour y accder, il faut : Dmarrer Tomcat. Ouvrir un navigateur web et indiquer lURL http://localhost:8080/ .

Ces deux dernires URL ouvrent la page daccueil de Tomcat, partir de laquelle il est possible daccder un ensemble dexemples avec leur code source.

Remarque dutilisation gnrale


Lensemble des sources (notamment des JSP) doit tre inscrit dans le dossier webapps situ sous la racine dinstallation de Tomcat. Il est fortement recommand de crer un sous-dossier pour chaque projet (servlets ou JSP). Chaque sous-dossier doit tre de la forme suivante :
webapps/ mon_dossier/ (mon_sous_dossier/) mes_sources (.java, .jsp) WEB-INF/ classes/ (web.xml)

Lorsquune modification dun fichier source demande une compilation manuelle, Tomcat doit tre redmarr pour que celle-ci soit prise en compte. De plus, des problmes lis la mise en uvre de caches par le navigateur web peuvent survenir. Il est conseill de fermer galement toutes les fentres de navigateur ouvertes (afin de vider le cache) avant de procder de nouveaux essais.

Servlets sous Tomcat


Chaque servlet est compile manuellement. Le rsultat de cette compilation (fichier portant lextension class ) doit tre plac dans le dossier WEB-INF/classes .

Nathanal COTTIN http://www.ncottin.net

20

Aide mmoire servlets et JSP

Version 1.2

Cette phase de compilation demande lintgration des paquetages drivant de javax.servlet . Deux solutions sont envisageables : Installer un JSDK (et non un JDK). Utiliser la librairie servlet-api.jar de Tomcat : dans ce cas, il faut penser lajouter au CLASSPATH avant de demander la compilation de la servlet. Cette mise jour peut tre ralise temporairement au moment de la compilation laide de linstruction (sous environnement Windows) :
set TOMCAT_HOME=C:\Program Files\Apache Software Foundation\Tomcat 5.0 set CLASSPATH=%TOMCAT_HOME%\common\lib\servlet-api.jar;%CLASSPATH%

La compilation nest cependant pas suffisante pour pouvoir excuter la servlet : celleci doit en effet tre dclare dans le fichier web.xml situ sous le dossier WEBINF voqu prcdemment (attention : il ne sagit pas du fichier web.xml du dossier conf de Tomcat !). La commande de compilation suivante ralise ce travail, en supposant que les servlets sont cres dans le dossier webapps/servlets/ :
javac *.java d ./WEB-INF/classes

Voici un exemple de fichier web.xml simplifi dclarant les servlets Test et Hello :
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <display-name>Servlet examples</display-name> <description>Servlet examples</description> <servlet> <servlet-name>Test</servlet-name> <servlet-class>Test</servlet-class> </servlet> <servlet-mapping> <servlet-name>Test</servlet-name> <url-pattern>/Test</url-pattern> </servlet-mapping> <servlet> <servlet-name>Hello</servlet-name> <servlet-class>Hello</servlet-class> </servlet> <servlet-mapping> <servlet-name>Hello</servlet-name>

Nathanal COTTIN http://www.ncottin.net

21

Aide mmoire servlets et JSP

Version 1.2

<url-pattern>/Hello</url-pattern> </servlet-mapping> </web-app>

JSP et JavaBeans sous Tomcat


Tomcat supporte les JSP v1.0 et v2.0. Contrairement aux servlets, la modification dun fichier JSP ne demande pas de redmarrage de Tomcat. Cependant, toute modification dun bean (suivie dune compilation manuelle) entrane ncessairement un redmarrage pour que celle-ci soit rpercute. Pour quun bean soit reconnu par les pages JSP, ce dernier doit ncessairement faire partie dun paquetage ( package test; par exemple). De manire similaire aux servlets, le rsultat de la compilation des beans doit tre plac dans le dossier WEB-INF/classes . Enfin, le fichier web.xml nest plus requis. Les classes Java correspondant la traduction des scripts JSP par le moteur Catalina sont gnres dans un sous-dossier de work/Catalina/localhost . Le radical de chaque fichier JSP produit un code source Java nomm comme suit : radical_jsp.java . Par exemple, le fichier index.jsp sera traduit par Catalina pour produire le fichier index_jsp.java . Lorsquun script JSP semble ne pas produire le rsultat attendu, il convient : De vrifier que les beans sont compils. De supprimer les fichiers Java (et classes pseudo-compiles partir de ces fichiers sources) de ce sous-dossier afin de forcer Tomcat les gnrer nouveau.

Annexe 2 : description du protocole HTTP


HTTP ( HyperText Transfer Protocol ) est un protocole hypermdia dconnect permettant dchanger des informations indpendamment de la nature du matriel employ. Les communications HTTP utilisent par dfaut le port TCP 80 mais peuvent tre ralises par le biais dautres ports de communication (tel que TCP 8080 ou alternate HTTP ). Son fonctionnement en mode dconnect ne permet pas a priori de conserver une information autrement quen la transmettant au sein de chaque requte.

Annexe 3 : principaux codes dtat HTTP


Liste des codes HTTP les plus employs :

Nathanal COTTIN http://www.ncottin.net

22

Aide mmoire servlets et JSP

Version 1.2

Code HTTP 200 201 202 204 400 401 403 404 500

Constante HttpServletResponse SC_OK SC_CREATED

Description La requte a abouti La requte a abouti et a cr une ressource sur le serveur La requte est accepte mais nest pas effectue La requte a abouti mais na produit aucun contenu nouveau La syntaxe de la requte est incorrecte La requte exige une authentification HTTP Le serveur interprte correctement la requte mais ne peut la traiter La ressource demande est inaccessible Une erreur survenue au sein du serveur HTTP a fait chouer lexcution de la requte Le serveur HTTP ne prend pas en charge les fonctionnalits ncessaires au traitement de la requte Le serveur HTTP est surcharg et ne peut traiter la requte

SC_ACCEPTED

SC_NO_CONTENT

SC_BAD_REQUEST SC_UNAUTHORIZED

SC_FORBIDDEN

SC_NOT_FOUND SC_INTERNAL_SERVER_ERROR

501

SC_NOT_IMPLEMENTED

503

SC_SERVICE_UNAVAILABLE

Ces codes derreur peuvent tre retourns au client laide de la mthode sendError de la classe HttpServletResponse . Depuis les servlets ou les pages JSP, lappel est effectu comme suit :
response.sendError(400, "Message")

Annexe 4 : JSP sous Tomcat et base de donnes MySQL


Cette annexe suppose quune base de donnes MySQL est (installe et) active sur la mme machine que Tomcat.

Nathanal COTTIN http://www.ncottin.net

23

Aide mmoire servlets et JSP

Version 1.2

Installation du paquetage util.sql


La librairie util , disponible sur le site http://www.ncottin.net, propose un grand nombre de foctionnalits. Dans le cas prsent, le paquetage util.sql fournit une classe DbConnection simplifiant linterrogation dune base de donnes. La reconnaissance de ce paquetage par les scripts JSP se ralise comme suit : 1. Tlcharger le paquetage sur le site www.ncottin.net 2. Installer larchive dans le dossier shared/lib de Tomcat 3. Inclure la directive <%@page import "util.sql.*" %> dans les pages JSP.

Utilisation de la classe DbConnection


Cet exemple simple permet de compter le nombre dentres dans la table TABLE de la base de donnes simpledb . Bien sr il existe linstruction SQL count(*) mais lobjectif est de montrer lintrt de la classe DbConnection

Requte statique
<%@ page import="java.sql.*" %> <%@ page import="util.sql.*" %> <% DbConnection dbc = new DbConnection( "org.gjt.mm.mysql.Driver", "jdbc:mysql://localhost/simpledb"); String query = "SELECT * FROM `TABLE`"; ResultSet rs = dbc.execute(query); if (dbc.isEmpty(rs)) { throw new Exception("EMPTY TABLE"); } int i = 0; dbc.prepareIteration(rs); while (dbc.canIterate(rs)) { i++; } %> <p>Nombre denregistrements : <%= i %></p>

Requte dynamique
<%@ page import="java.sql.*" %> <%@ page import="util.sql.*" %> <% DbConnection dbc = new DbConnection( "org.gjt.mm.mysql.Driver", "jdbc:mysql://localhost/simpledb"); String query = "SELECT * FROM `TABLE` WHERE `privilege` = '?'";

Nathanal COTTIN http://www.ncottin.net

24

Aide mmoire servlets et JSP

Version 1.2

PreparedStatement ps = dbc.prepareQuery(query); ps.setString(1, "admin"); ResultSet rs = dbc.execute(ps); if (dbc.isEmpty(rs)) { throw new Exception("EMPTY TABLE"); } int i = 0; dbc.prepareIteration(rs); while (dbc.canIterate(rs)) { i++; } %> <p>Nombre denregistrements : <%= i %></p>

Annexe 5 : uploads de fichiers


La mise jour de fichiers sur le serveur laide dune servlet ou dune page JSP pose le problme de la rception des donnes. En effet, les requtes traditionnelles (GET et POST) ne soumettent que le nom du fichier correspondant un champ de type file

Prsentation du paquetage util.more.web.form


La librairie util , disponible sur le site http://util.ncottin.net, propose un paquetage util.more.web.form . Ce dernier permet de raliser (entre autres fonctionnalits) les uploads de fichiers. Ce paquetage a lavantage deffectuer un contrle sur les donnes reues, de telle sorte quil est possible de refuser une requte dont le fichier soumis dpasse une taille maximale fixe par exemple. Toute requte dont un paramtre est inconnu peut tre galement refuse. Enfin, le nombre maximum de valeurs dun champ multivalu (des cases cocher par exemple) peut tre indiqu. Pour rsumer, ce paquetage est indispensable toute application Java sur le web. La prsentation des autres fonctionnalits de cette librairie est accessible ladresse http://util.ncottin.net.

Utilisation du paquetage util.more.web.form


Le paquetage util.more.web.form permet de recevoir des donnes issues de la soumission dune requte HTTP. En plus de fournir les fonctionnalits de base attendues (rception des valeurs des champs notamment), ce paquetage permet de recevoir des fichiers (upload) et de contrler les donnes attendues. Ce contrle peut seffectuer sur les noms de champs attendus (afin que lon ne soumette pas nimporte quels champs), les valeurs des champs (en cas de choix restreint de valeurs), et leur taille maximum (valable aussi bien pour un champ textuel il sagit de la longueur du champ que pour un fichier en limitant la taille maximale attendue, exprime en octets).

Nathanal COTTIN http://www.ncottin.net

25

Aide mmoire servlets et JSP

Version 1.2

Les requtes reues ne rpondant pas aux contraintes spcifies par la servlet (ou la page JSP) sont automatiquement rejetes. Voici un exemple gnrique de description XML des contraints de validation de formulaires HTTP :
<formDesc method="get|post|multipart|any" extraAllowed="true|false" tmpDirPath="..." bufferSize="..."> <forms> /* Restricted to listed forms (if present) */ method="get|post|multipart|any" extraAllowed="true|false" tmpDirPath="..." bufferSize="..."/> ... </forms> <params> <param name="..." mandatory="true|false" isFile="true|false"> <values> ... </values> <minSize>...</minSize> <maxSize>...</maxSize> <maxOccur>...</maxOccur> <regex>...</regex> <validations> ... </validations> </param> </params> <validations> ... </validations> </formDesc> /* Form validation constraints */ <validation id="..."/> /* Parameter validation constraints */ <validation id="..."/> /* If isFile="true" only */ <value>...</value> <form name="..."

Nathanal COTTIN http://www.ncottin.net

26

Aide mmoire servlets et JSP

Version 1.2

Annexe 6 : description de la librairie util


Depuis plusieurs annes, cette librairie et son API complte, rgulirement mises jour, sont en libre tlchargement sur le site http://util.ncottin.net. Cette librairie propose la fois une simplification de certaines classes fournies par le JDK (gestion des fichiers, des chanes de caractres, des flux XML via DOM, accs aux bases de donnes, ), une amlioration de certaines fonctionnalits du JDK ainsi que de nouvelle fonctions (dcoupage de chanes de caractres avec choix de prise en compte de la casse, traducteurs de code source en HTML, uploads de fichiers sur un serveur web, ). util est employe dans ce manuel pour raliser une connexion une base de donnes et excuter des requtes sur cette base dune part, et pour poster des fichiers sur le serveur Tomcat (upload) dautre part. Ce ne sont que quelques fonctionnalits parmi lensemble mis disposition. Veuillez vous rfrer lanne 5 pour quelques prcisions concernant les uploads de fichiers faisant appel au paquetage util.more.web.form .

Nathanal COTTIN http://www.ncottin.net

27

Vous aimerez peut-être aussi