2 Java EE 5 - JSP Servlets
2 Java EE 5 - JSP Servlets
2 Java EE 5 - JSP Servlets
Dveloppement Web
avec les technologies
JSP/Servlets
Sommaire
Architecture dune application Web Installation et configuration du Conteneur Tomcat Les Java Server Pages Les JavaBeans Les servlets HTTP Les bibliothques de balises JSP
JSP/Servlets
JSP/Servlets
JSP/Servlets
Contexte
Utiliser lIntranet pour linfrastructure applicative
Protocole standard (HTTP de TCP/IP) Clients lgers : Portabilit Architectures multi-tiers
JSP/Servlets
Couche de donnes
JSP
Base de donnes
Navigateur
Servlet
HTML, XML
Les applications web connaissent un engouement ces derniers temps La J2EE Facilite le dveloppement dapplications web
JSP/Servlets
*.html, *.jsp
/WEB-INF
/WEB-INF/web.xml /WEB-INF/classes/ /WEB-INF/lib/
fichier de configuration (XML) classes des servlets et de beans fichiers jar des servlets et utilitaires
Lensemble des fichiers et rpertoire peut tre mis dans un war (Web Archive) grce la commande jar. Le war est automatiquement djarr sil est plac dans le rpertoire webapps.
M.Romdhani, INSAT, Dcembre 2007
JSP/Servlets
JSP/Servlets
Suite linstallation de Tomcat, positionner les 2 variables denvironnement suivantes : JAVA_HOME : Elle doit pointer le rpertoire
dinstallation du JDK
JSP/Servlets
Arborescence de Tomcat
scripts startup & shutdown jar utiliss par Tomcat (Ant, Servlet, etc.) configuration: server.xml, web.xml, users.xml fichiers de logs fichiers jar propres Tomcat fichiers jar communs toutes les servlets zone de dploiement
JSP/Servlets
Configuration Tomcat
Le fichier server.xml
Server Racine, spcifie le port de shutdown. Service Associe des connecteurs un engine. Connector Ils correspondent un point daccs un service, soit via un serveur soit en connexion directe. Engine correspond au conteneur de servlet en lui-mme. Logger Ils effectuent la journalisation. Host Dclare o sont stockes les servlets pour un nom de machine. Context Chaque Context reprsente la configuration associe un chemin dans la hirarchie
10
JSP/Servlets
11
JSP/Servlets
Un Context reprsente lassociation entre un chemin sur le serveur (URI) et un chemin sur le disque URI daccs path= "/examples" docBase="examples" Chemin daccs des fichiers reloadable="true" (relatif ou absolu par rapport webapps)
JSP/Servlets
13
JSP/Servlets
servlet 1
HttpServletResponse
Conteneur de Servlets
JSP/Servlets
15
JSP/Servlets
champs den-tte: informations additionnelles concernant la requte et le client (nom:valeur) Ligne vide corps de la requte: informations supplmentaires (plutt pour les POST) Requtes GET
Variables visibles dans l'URL Limitation de la taille (dpend de l'OS) Simplicit d'extraction des donnes Donnes dans le fichier log
Requtes POST
Les variables ne sont pas visibles dans l'URL Les variables sont envoyes dans les enttes HTTP Pas de limitation de la taille Possibilit d'upload
M.Romdhani, INSAT, Dcembre 2007
16
JSP/Servlets
champs den-tte
informations additionnelle concernant le serveur et le document retourn (syntaxe = nom:valeur)
corps de la requte
la ressource retourne (page HTML)
17
JSP/Servlets
La ServletRequest et la ServletResponse
L'interface ServletRequest permet de rcuprer les paramtres de la requte :
public abstract int getContentLength() public abstract String getContentType() public abstract String getProtocol() public abstract String getScheme() public abstract String getServerName() public abstract int getServerPort() public abstract String getRemoteAddr() public abstract String getRemoteHost() public abstract ServletInputStream getInputStream() throws IOException public abstract String getParameter(String name) public abstract String[] getParameterValues(String name) public abstract Enumeration getParameterNames() public abstract Object getAttribute(String name)
18
JSP/Servlets
19
JSP/Servlets
Descripteur de dploiement
Le fichier web.xml
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">
<web-app> <display-name>Mon application Web</display-name> <servlet> <servlet-name>maServlet</servlet-name> <servlet-class>mRomdhani.MaServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>maServlet</servlet-name> <url-pattern>*.test</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>maServlet</servlet-name> <url-pattern>/toto</url-pattern> </servlet-mapping> </web-app>
M.Romdhani, INSAT, Dcembre 2007
nom de la servlet
JSP/Servlets
21
JSP/Servlets
<servlet> <servlet-name>initParam</servlet-name> <servlet-class> mRomdhani.InitParamServlet </servlet-class> <init-param> <param-name>count</param-name> <param-value>5</param-value> </init-param> <init-param> <param-name>message </param-name> <param-value>hello config </param-value> </init-param> </servlet>
22
JSP/Servlets
Un exemple de Servlet
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html><head><title>Mon adorable Servlet </title> </head>"); out.println("<body><h1>Bienvenue lINSAT </h1>"); out.println("</body>"); out.println("</html>"); } }
23
JSP/Servlets
HttpServletRequest contient les renseignements sur le formulaire HTML initial (utile pour doPost()) - La mthode getParameter() rcupre les paramtres dentre
HttpServletResponse contient le flux de sortie pour la gnration de la page HTML rsultat (getWriter() )
24
JSP/Servlets
25
JSP/Servlets
26
JSP/Servlets
27
JSP/Servlets
Ceci permet dintgrer des valeurs dans le code HTML Les valeurs sont values, converties en chanes de caractres et affiches Les objets implicites (request, response, session, out, ...) disponibles
28
JSP/Servlets
Cest un bloc de code Java Il est plac dans _jspService() de la servlet gnre ayant accs :
o aux variables et beans dclars ( <%! %> ) o aux objets implicites
29
JSP/Servlets
Directives
Syntaxe : <%@ directive attribut1="valeur" attribut2="valeur"... %>
3 directives possibles :
page : informations relatives la page include : fichiers inclure littralement taglib : importer des bibliothques de balises
30
JSP/Servlets
Actions
- Syntaxe la XML - Permettent de faire des actions au moment o la page est demande par un client
Inclure dynamiquement un fichier Utiliser des JavaBeans Rediriger vers une autre page
31
JSP/Servlets
Actions (suite)
<jsp:include page="relative URL" flush="true" /> Inclusion au moment o la page est servie, pas au moment o elle est traduite en servlet. <jsp:usebean id="name" class="package.class" /> permet d'instancier un bean depuis une page JSP. associ <jsp:getProperty.../> et <jsp:setProperty.../> <jsp:forward page="/unAutreURI" /> redirige vers un autre URI/URL
32
JSP/Servlets
Objets implicites
Ce sont des variables prdfinies accessibles dans les scriptlets :
request : le HttpServletRequest response : le HttpServletResponse session : le HttpSession out : flot de sortie (idem response.getWriter()) application : le ServletContext (idem) config : le ServletConfig de la page
33
JSP/Servlets
Les JavaBeans
34
JSP/Servlets
Notion de JavaBean
Un JavaBean est un POJO qui dfinit des mthodes qui excuteront la logique mtier afin dcharger la servlet ou la JSP de le faire. Se conformer aux design pattern MVC qui vise la sparation des propos afin de faciliter la maintenance des applications Web Un JavaBean est un composant Java permettant de raliser un traitement mtier spcifique Attributs simples Mthodes set/get permettant lintrospection En simplifiant, on peut voir les JavaBeans comme des classes semblables aux autres, si ce n'est qu'ils proposent des mthodes accesseurs pour accder leurs attributs. Les JavaBeans sont cres automatiquement et gres par le conteneur Les JavaBeans sont dploys sous WEB-INF/classes
35
JSP/Servlets
36
JSP/Servlets
Usebean et getProperty()/getProperty()
Mcanisme trs puissant !
<jsp:usebean id="name" (rfrence l'instance du composant) class="paquetage.class" (nom qualifi de la classe) scope="page|request|session|application" (porte) />
<jsp:setProperty name="name"
M.Romdhani, INSAT, Dcembre 2007
property= * />
37
JSP/Servlets
38
JSP/Servlets
MVC 1 et MVC 2
MVC Model 1 et MVC Model 2 diffrent essentiellement en ce qui concerne l'entit responsable au traitement de la requte. Dans le Model 1, c'est la JSP qui se charge de la requte Dans le Model 2, c'est une servlet (Controller) qui fait le travail
Un seul contrleur frontal Un ensemble de contrleurs spcialiss
MVC Model 1
M.Romdhani, INSAT, Dcembre 2007
MVC Model 2
39
JSP/Servlets
40
JSP/Servlets
41
JSP/Servlets
42
JSP/Servlets
Les Cookies
Un cookie est constitu des paires cl=valeur envoys par le serveur sous forme dinstructions insres dans lentte de la rponse HTTP Un cookie permet : didentifier des utilisateurs (e-commerce, membres...) dviter la saisie dinformation rptition
o Login, password, adresse, tlphone
Grer des prfrences utilisateur pour les sites portails Cookie et scurit : Jamais interprt ni excut : pas de virus Limit 4KB Ne doit pas concerner des donnes sensibles
M.Romdhani, INSAT, Dcembre 2007
43
JSP/Servlets
44
JSP/Servlets
Certaines applications Web (e-commerce : caddie) ont besoin de maintenir une "mmoire" entre deux requtes
maintenir une connexion de lutilisateur sur le serveur pour se faire : concept de "suivi de sessions"
45
JSP/Servlets
46
JSP/Servlets
Serlvet session
Trs simple avec l'API des servlets objet HttpSession
Principe :
Un objet "session" peut tre associ avec chaque requte Il va servir de "container" pour des informations persistantes Dure de vie limite et rglable
47
JSP/Servlets
Exemple de Sessions
Programmation simplifie avec l'API des servlets (JSDK) objet HttpSession
// Dans le code de doPost() HttpSession session = request.getSession(true); Caddy caddy = (Caddy) session.getValue("caddy"); if(caddy != null) { // le caddy nest pas vide ! afficheLeContenuDuCaddy(caddy); } else { caddy = new Caddy(); ... caddy.ajouterUnAchat(request.getParameter("NoArticle")); session.putValue("caddy", caddy); .... }
M.Romdhani, INSAT, Dcembre 2007
48
JSP/Servlets
49
JSP/Servlets
50
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
<?xml version = "1.0"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <!-- Fig. 10.30: customTagWelcome.jsp --> <!-- JSP that uses a custom tag to output content. --> <%-- taglib directive --%> <%@ taglib uri = "advjhtp1-taglib.tld" prefix = "advjhtp1" %> <html xmlns = "http://www.w3.org/1999/xhtml"> <head> <title>Simple Custom Tag Example</title> </head> <body> <p>The following text demonstrates a custom tag: </p> <h1> <advjhtp1:welcome /> </h1> </body> </html>
JSP/Servlets
Use taglib directive to taglib Fig. 10.30 library include use tags in tag JSP
51
JSP/Servlets
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
// Fig. 10.31: WelcomeTagHandler.java // Custom tag handler that handles a simple tag. package com.deitel.advjhtp1.jsp.taglibrary; // Java core packages import java.io.*; // Java extension packages import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; public class WelcomeTagHandler extends TagSupport { // Method called to begin tag processing public int doStartTag() throws JspException { // attempt tag processing try { // obtain JspWriter to output content JspWriter out = pageContext.getOut(); // output content out.print( "Welcome to JSP Tag Libraries!" ); } // rethrow IOException to JSP container as JspException catch( IOException ioException ) { throw new JspException( ioException.getMessage() ); } return SKIP_BODY; } } // ignore the tag's body
WelcomeTag Class WelcomeTagHandler Handler implements interface Tag by extending class handler. TagSupport
JSP container calls 15-32 Lines method doStartTag when it encounters the starting custom tag Line 20 Use custom tag handlers pageContext to obtain JSPs JspWriter object for outputting text
52
JSP/Servlets
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
<?xml version = "1.0" encoding = "ISO-8859-1" ?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd"> <!-- a tag library descriptor --> <taglib> <tlibversion>1.0</tlibversion> <jspversion>1.1</jspversion> <shortname>advjhtp1</shortname> <info> A simple tab library for the examples </info> <!-- A simple tag that outputs content --> <tag> <name>welcome</name> <tagclass> com.deitel.advjhtp1.jsp.taglibrary.WelcomeTagHandler </tagclass> <bodycontent>empty</bodycontent> <info> Inserts content welcoming user to tag libraries </info> </tag> </taglib>
tag element describes Line 18 welcome custom tag Specify custom tag name and class
53
JSP/Servlets
54
JSP/Servlets
JSTL
Depuis la version JSP 1.2 Spcification dvelopp par le groupe dexperts JSR 52 Collection de Tag Librairies personnalises qui implmentent la plus part des fonctions communes aux pages web: Itrations et conditions (core) Formatage des donnes (format) Manipulation de XML (xml) Accs au bases de donnes (sql) Utilisation du langage EL (Expression Language) Avantages Code simple, lisible et facile maintenir Le concepteur de page est libr de code Java vite au dveloppeur dcrire chaque fois les fonctions de bases.
55
JSP/Servlets
56
JSP/Servlets
Un identificateur dans EL fait rfrence une variable retourn par lappel de pageContext.findAttribute(identificateur) et qui est dans la porte (scope): page, request, session ou application. ${ var } = pageContext.getAttribute("var") Objets implicites: pageScope, requestScope, sessionScope, applicationScope Accs au paramtres dune requte HTTP via param (objet de type Map) et paramValue Un objet implicite pageContext qui donne accs aux proprits associs au contexte de la page JSP
57
JSTL
JSP/Servlets
<%=
expression %>
Affectation <c:set value="value" var=" varName " scope=" application " /> <% pageContext.setAttribute("varName",value,SCOPE) %> Exception java.lang.Throwable <c:catch [var="varName"] > actions a surveiller </c:catch> <% try{ actions surveiller }catch(Throwable varName){} %>
58
JSTL
JSP/Servlets
<% if(user.visitCount == 1){ %> <%= "Prmire visite.Bienvenue" %> <% } %>
59
JSP/Servlets
JSTL
en JSTL
forEach
<c:forEach var=user items=sessionScope.members [begin] [end] [step]> <c:out value="nom: </c:forEach> 60 ${user.name}" />