log 02 bases de données avancées rappels sur jsp / servlet philippe salvan...
TRANSCRIPT
Architecture 3-niveaux Servlets/JSP
HTTP
Serveur SQL
JDBC, ODBC, SQL Net
Ser
veu
r H
TT
P
JSP
/Ser
vlet
sB
ean
s
Po
ol D
B
HTTP
HTTP
Servlets : Généralités
Qu’est-ce qu’une servlet ? Un composant (programme) d’un serveur
Serveur Web Serveur d’Application
Une class Java gérée par un Conteneur de Servlet Chargé dynamiquement par le serveur Générant dynamiquement des pages HTML/XML… Interagissant avec un client HTTP dans un mode requête/réponse
Equivalent à cgi-bin NS API, ISAPI Modules Apache
Servlets : Généralités
Conteneur de Servlet Elément d’un serveur Web ou J2EE
Partie du serveur (module) Plug-in ajouté au serveur Le serveur en personne !
Protocoles supportés HTTP1.1, HTTPS
Servlets : Généralités
WEB Browser(client)
HTTP
WEB ServerHTTP
request
response
Servlet Container
cgi-binServlet
API
jvm
jsp MyServlet
responserequest
The javax.servlet Package
L’interface Servlet Abstraction pour toute implémentation de servlet Déclare toutes les méthodes permettant de gérer une servlet et de
communiquer avec le client Web Les méthodes sont implémentées par le développeur dans la classe
HttpServlet (ou une sous-classe)
Servlet
L’interface Servlet
GenericServlet
HttpServlet
MaServlet
doGet(HttpServletRequest req, HttpServletResponse resp)
doPost(…, …)
doGet( HttpServletRequest req,HttpServletResponse resp)
doPost(…, …)
class
class
class
Communication avec le Client Web
Lors de la communication avec le client Web, la Servlet reçoit deux objets au travers d’une méthode parmi deux Un objet ServletRequest qui encapsule la communication en provenance du
client (requête) Un objet ServletResponse qui encapsule la communication vers le client
(réponse)
Communication avec le Client Web
Pour récupérer les requêtes de type GET Cas où le client envoie
Un paramètre au travers d’une URLhttp://myserver/aservlet?nom=foo
Un formulaire avec l’attribut METHOD positionné à GET<FORM
ACTION="http://myserver/aservlet"METHOD="GET" >
Méthode à utiliser :doGet(HttpRequest req, HttpRequest resp)
Communication avec le Client Web
Pour récupérer les requêtes de type POST Cas où le client envoie
Un formulaire avec l’attribut METHOD positionné à POST<FORM
ACTION="http://myserver/aservlet" METHOD=« POST" >
Méthode à utiliser :doPost(HttpRequest req, HttpRequest resp)
Communication avec le Client Web
Les deux méthodes peuvent exister simultanément
public void doGet( HttpServletRequest req, HttpServletResponse resp )
throws ServletException, IOException {… }
public void doPost( HttpServletRequest req, HttpServletResponse resp )
throws ServletException, IOException { doGet(req, resp); }
Communication avec le Client Web
Renvoi du type MIME approprié
public void doGet( HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/html");PrintWriter out = resp.getWriter(); out.println("<html>"); out.println("<body>");
out.println("<head>"); out.println("<title>Page1</title>"); out.println("</head>"); out.println("<body>");
out.println("<h3>ESSAI1 </h3> <br> Hi"); out.println("</body>");
out.println("</html>"); }
L’interface HttpServletResponse
Implémentation par le moteur de servlet
public void setContentType(java.lang.String type) Permet de typer l’objet de réponse adressé au client en précisant le type MIME du document
généré : "text/html", ….
public java.io.PrintWriter getWriter()throws java.io.IOException
Fournit un objet stream permettant de renseigner le document de sortie à générer
public void addCookie( Cookie cookie) Ajoute un cookie à la réponse
public void sendRedirect(java.lang.String URLlocation)throws java.io.IOException
Pour rediriger la réponse (la nouvelle URL est renvoyée au client)
L’interface HttpServletRequest
Implémentation par le moteur de servlet Permet de typer l’objet de requête et d’obtenir des informations sur le client
public java.lang.String getParameter(java.lang.String name) Récupère un paramètre par son nom (null si inexistant)
public java.lang.String [] getParameterValues( java.lang.String name)
Pour récupérer un tableau de valeurs, pour un paramètre multi-valué
public java.lang.Enumeration getParameterNames() Pour récupérer tous les noms de paramètres adressés par le client
public Cookie [] getCookies() Pour récupérer tous les cookies accessibles dans le navigateur du client; null si aucun cookies
L’interface HttpServletRequest
public HttpSession getSession() Récupère la session courante sous forme d’objet transient contenant les données de session; crée
la session si non encore existante
public HttpSession getSession(boolean create) Si create == true :
Crée la session si non encore existante
Si create == false : Renvoie null si l’objet de session n’existe pas
L’interface HttpSession
Implémentation par le moteur de servlet Type d’un objet de session transient Permet de sauvegarder des données transientes tout au long des communciations avec une même
instance de navigateur client Les objets ainsi stockés son appelés « valeurs » L’implémentation utilise un ID de session, sauvegardé sur le poste client sous la forme d’un cookie
public void putValue(java.lang.String name, java.lang.Object value)
Ajoute le couple (name, value) aux informations de session; remplace l’ancienne valeur le cas échéant
public void removeValue(java.lang.String name) Supprime le couple (name, value) des informations de session
public java.lang.Object getValue(java.lang.String name) Obtient la veleur d’une information de session repérée par son nom Renvoie null si aucune information de ce nom
JSP : Généralités
Extension de HTML/XML à l’aide de Tags propriétaires Permet d’ajouter du code Java et/ou Javascript directement dans du
HTML, et ainsi d’étendre des pages HTML statiques en pages dynamiques
Basé sur la technologie des Servlets Java
Le moteur de JSP est lui-même un servlet qui tranforme tout xxx.jsp en un servlet _xxx.java, puis le compile en un fichier _xxx.class
JSP : Commentaires
Commentaires HTML (envoyés au client) Syntaxe JSP
<!-- comment [ <%= JavaExpression %> ] -->
Exemple<% page language="java" %>
<HTML>
<HEAD><TITLE> Page 1 </TITLE></HEAD>
<BODY>
<H2> Essais de commentaires No 1 </H2>
<!–- Author: P.Salvan, Date :
<%=(new java.util.Date()).toLocaleString()%>
-->
………
</BODY>
JSP : Commentaires
Commentaires JSP (non envoyés au client) Syntaxe JSP
<%-- JSP comment --%>
Exemple<% page language="java" %>
<HTML>
<HEAD><TITLE> Page 2 </TITLE></HEAD>
<BODY>
<H2> Comment 2 </H2>
<%–- Auteur: P.Salvan, 28 oct 2008 --%>
………
</BODY>
JSP : Déclarations
Déclarations Java (non adressées au client) = attributs de classe du servlet Syntaxe JSP
<%! déclarations %>
Exemple 1<% page language="java" %>
<%! Int n=3; %>
<%! String user; %>
<HTML>
<HEAD><TITLE> Page de commentaires 1 </TITLE></HEAD>
<BODY>
<H2> Essais de commentaires No 1 </H2>
<% user= "richard" %>
………
Alors que <%= user %> était pour la <%=n%> eme fois …….
</BODY>
JSP : Declarations
Résultats<HTML>
<HEAD><TITLE> Page de commentaires 1 </TITLE></HEAD>
<BODY>
<H2> Essais de commentaires No 1 </H2>
………
Alors que richard était pour la 3eme fois ……
……
</BODY>
JSP : Directives
Permet de contrôler le traitement d’une page JSP Syntaxe JSP : <%@ directive [ attribute= value] %>
Exemple<%@ include file= "path" %>
Permet d’insérer une page dans la page JSP courante avant d’être traitée (path désigne une URL relative)
JSP : directives de page
<%@ page language = "java" %> Spécifie le langage
<%@ page import = "java.sql" %> Importe une librairie
<%@ page errorPage = "path" %> Renvoie une certaine page en cas d’erreur (exception non traitée). La page renvoyée
peut être une page JSP. La variable exception permet une gestion dynamique des exceptions
<%@ page isErroPage= "true" %> Simule une exception.
<%@ page buffer = "none" %> Le flux de sortie est renvoyé au fur et à mesure à ServletResponse
<%@ page buffer = « 12kb" %> Le flux de sortie est bufferisé avant d’être renvoyé à ServletResponse
JSP : Actions
Expressions : <%= expression %> L’expression est évaluée et insérée dans le flux HTML produit Equivalent à : out.print(expression)
Scriptlets <% javacode %> Le code java est exécuté; toute instruction du type out.print(expression) insère du texte dans le flux
de sortie HTML. Exemple
<% String name =request.getParameter("hisname"); …. out.print(name) %>
Redirection <jsp:forward page="path"/> Le contrôle de mla génération est transféré à une autre page; l’éventuel document en cours de
génération est perdu.
JSP : Création d’objets transients
<jsp:useBean id='objectname'
class= 'classname' scope= [page|request|session|application]> body</jsp:useBean>
Un objet transient est créé s’il n’existait pas déjà. Cet objet est accessible par son nom au sein du ‘scope’ choisi Une variable java nommée ‘objectname’ est déclarée dans la classe et
assignée à cette valeur.
JSP : Accès aux objets transients
<jsp:getProperty
name='objectname'
property= 'attributname'
/>
Permet d’ajouter un nouvel attribut
<jsp:setProperty
name= 'objectname'
property= 'attributname'
value= value
/>
Met à jour la valeur de l’attribut
JSP : Objets prédéfinis
HttpServletRequest request Représente la requête.
Permet l’accès aux paramètres passés par le client.
HttpServletResponse response Représente la réponse qui sera envoyée au client
HttpSession session Objet transient, géré par utilisation d’un cookie.
ServletContext application Objet transient, représente l’application qui contient la page JSP.
JspWriter out Permet d’écrire des informations dans la page HTML générée qui sera adressée au
client