architecture web – cours iii

48
10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 1 / 48 ARCHITECTURE WEB – COURS III [email protected] [email protected] (01 44 27 88 77)

Upload: alfreda-mayer

Post on 02-Jan-2016

29 views

Category:

Documents


2 download

DESCRIPTION

ARCHITECTURE WEB – COURS III. ARCHITECTURE WEB. [email protected] [email protected] (01 44 27 88 77). OBJECTIFS. Introduction à un langage objet pour le Web Montrer les avantages de l’objet appliqué au Web Serveurs d’applications. PLAN. Java et le Web Les Servlets Les JSP. - PowerPoint PPT Presentation

TRANSCRIPT

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 1 / 48

ARCHITECTURE WEB – COURS III

[email protected]

[email protected]

(01 44 27 88 77)

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 2 / 48

OBJECTIFS

• Introduction à un langage objet pour le Web

• Montrer les avantages de l’objet appliqué au Web

• Serveurs d’applications

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 3 / 48

PLAN

• Java et le Web

• Les Servlets

• Les JSP

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 4 / 48

Java et le Web

• Java et le Web– Applets, Servlets, JSP– Apports de Java pour le Web– Les serveurs de servlets Java

• Les Servlets

• Les JSP

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 5 / 48

Java et le Web

• Applet Java– « Petite Application » Java compilée

• Téléchargée à partir d’un serveur Web• Exécution sécurisée par la JVM du client Web

• Servlets– Équivalent du CGI pour Java avec des extensions– Application Java compilée

• Réside sur le serveur• Exécution par la JVM du serveur

• Java Server Pages (JSP)– Langage de script

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 6 / 48

Java et le Web (2)

• Quel est l’apport de Java pour le web?– Langage de haut niveau (OO)– Un ensemble de classes/packages dans l ’API

• HTTP• Servlet/Jsp

• De l’objet dans le web…– Encapsulation du protocole– Objets request, response

• Accesseurs sur des attributs d’objets plutôt que sur des chaînes de caractères

– Gestion plus fine et plus simple des fonctionnalités• Authentification, session ...

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 7 / 48

Servlet2Servlet1

Java et le Web (3)

HTTP

Client Web Serveur Web

Servlet container

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 8 / 48

Les serveurs de servlet

• Tomcat, Jakarta Project (gratuit)– Open Source– Respecte toujours les dernières spécifications des normes

• WebSphere Application Server ($795 à $6000)

• BEA Weblogic Application Server ($4000)– Écrit entièrement en Java

• Allaire Jrun Web Server– Gratuit pour une utilisation non commerciale

• iPlanet Web Server Entreprise Edition ($1495/processeur)– Netscape/Sun– Une des meilleures implantations d’un serveur de Servlet

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 9 / 48

Le serveur applicatif Tomcat

• Jakarta (http://jakarta.apache.org)– Ensemble de projets Open Source autour d’Apache et

Java• Librairies, outils, Api (Ant, Log4j, Taglibs, …)• Frameworks, moteurs (Struts, Turbine, cactus, …)• Serveurs d’applications (Tomcat, Jetspeed, James, …)

• Respect des normes du W3C– Tomcat 4.x

• Java Servlet 2.2• Java Server Page 1.2

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 10 / 48

Les Servlets

• Java et le Web

• Les Servlets– Rappel sur le CGI– Introduction aux Servlets– Structure et exemples– API– Gestion des sessions (Session Tracking)

• Les JSP

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 11 / 48

Rappel sur les formulaires et CGI

Client Web Serveur WebScript CGI

1- Requête

2- Envoi

3- Validation4- Envoi vers CGI

5- Expédition sortie6- Envoi

sortie

Chargement du formulaire

Traitement des données

Réception sortie (HTML)

Complètement puis

HTML/HTTP CGI

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 12 / 48

Exemple de CGI

• Affiche les variables d’environnement#!/bin/bash# Affiche les variables d’environnement##En-tête HTTPecho “Content-type: text/html “echo “”echo “”#Corps HTTPecho "<html> "echo "<body> "echo "<h1>Variables CGI</h1> "echo "<pre> "##La commande set affiche les variables d’environnement#set##Fermeture des balises ouvertesecho "</pre> "echo "</body> "echo "</html> "

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 13 / 48

Les Servlets

• Modèle objet des servlets

Servlet1Objet Request Objet Response

Objet Session

• setBufferSize

• setHeader

• setRedirect

• getParameter

• getAttribute

• getHeaders

• getCookies

• getAttribute

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 14 / 48

Les Servlets (2)

• Parallèle CGI / servlet– Procédurale (C, script shell, perl, …) / OO

• Avantages des servlets– Efficacité :

• CGI : 1 utilisateur / 1 processus• Servlet

– Initialisation = JVM– Processus légers (thread)

• Système // objet

– Convivialité• Pas de nouveau langage (!)• Langage OO, haut niveau

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 15 / 48

Les Servlets (3)

– Puissances• Fonctionnalités dans l’API

– HTTP est invisible pour le programmeur (protocole de transport)– Facilités de l’API Java (JDBC, caching, tracking, …)

– Portabilités (API standard)• Code indépendant du système• Code indépendant du serveur d’applications

• Une servlet est du bytecode Java (.class)– Elle doit être compilée! (javac)

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 16 / 48

Les Servlets - structures

• MaServlet.javaimport java.io.*;import javax.servlet.*;import javax.servlet.http.*;

public class MaServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Objet "request" permet de lire l’en-tête HTTP (ex: cookies, …) // ainsi que les données d’un formulaire HTML // Objet "response" permet de spécifier la réponse (en-tête HTTP) comme // le type des données en retour (Cf. content-type) PrintWriter out = response.getWriter(); // objet out permet de renvoyer le contenu HTML au navigateur client}}

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 17 / 48

Les Servlets - exemples

• HelloWWW.javaimport java.io.*;import javax.servlet.*;import javax.servlet.http.*;

public class HelloWWW extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " + "Transitional//EN\">\n" + "<HTML>\n" + "<HEAD><TITLE>Hello WWW</TITLE></HEAD>\n" + "<BODY>\n" + "<H1>Hello WWW</H1>\n" + "</BODY></HTML>");}}

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 18 / 48

Les Servlets – exemples (2)

• UtilitaireServlet.javapackage monPackage;

public class UtilitaireServlet { public static final String DOCTYPE = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">";

public static String headWithTitle(String title) { return(DOCTYPE + "\n" + "<HTML>\n" + "<HEAD><TITLE>" + title + "</TITLE></HEAD>\n"); } }

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 19 / 48

Les Servlets – exemples (3)

• HelloWWW2.javapackage monPackage;

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;

public class HelloWWW2 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println(UtilitaireServlet.headWithTitle("Hello WWW") + "<BODY>\n" + "<H1>Hello WWW</H1>\n" + "</BODY></HTML>"); }}

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 20 / 48

API javax.servlet.*

• Javax.servlet.HttpServlet– Méthode d’initialisation

• Init()

– Traitement et réponse à une requête HTTP GET• doGet(HttpServletRequest request, HttpServletResponse

response)

– Traitement et réponse à une requête HTTP POST• doPost(HttpServletRequest request, HttpServletResponse

response)

– Traitement et réponse à une requête HTTP GET ou POST• service(HttpServletRequest request, HttpServletResponse

response)

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 21 / 48

API javax.servlet.*(2)

• Objets utiles et fonctionnement de base– javax.servlet.http.HttpServletRequest

• Gestion de la requête HTTP– Lire des données d’un formulaire / URL– Lire l’entête HTTP

• Méthodes sur Header– Enumeration getHeaderNames()

• Méthodes sur données d’un formulaire et des cookies– Enumeration getParameterNames()– String getParameter(String nomParam)– String[] getParameterValues(String nomParam)– Cookie[] getCookies()

• Variables CGI– String getRemoteHost()– String getMethod()– String getQueryString()– Enumeration getHeaderNames()

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 22 / 48

API javax.servlet.*(3)

– javax.servlet.http.HttpServletResponse

• Méthodes sur le code de retour (status code)– Les codes de retour sont des attributs static– Ex : response.sendError (int code, String message)

• Méthodes sur Header– setContentType(String type)– setContentLength()– addCookie(Cookie cookie)– sendRedirect(String location)– SetHeader(String name, String value)

• Méthodes sur les données (corps HTTP)– PrintWriter getWriter()

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 23 / 48

Formulaires et Servlets

• Lecture de trois paramètrespackage monPackage;

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import java.util.*;

public class TroisParams extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String title = « Lecture de trois paramètres d’un formualire"; out.println(ServletUtilities.headWithTitle(title) + …. ….

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 24 / 48

Formulaires et Servlets (2)

• Lecture de trois paramètres (suite) "<BODY>\n" + "<H1 ALIGN=CENTER>" + title + "</H1>\n" + "<UL>\n" + " <LI>param1: " + request.getParameter("param1") + "\n" + " <LI>param2: " + request.getParameter("param2") + "\n" + " <LI>param3: " + request.getParameter("param3") + "\n" + "</UL>\n" + "</BODY></HTML>"); }

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }}

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 25 / 48

API javax.servlet.*(4)

– javax.servlet.http.Cookie

• Constructeur– Cookie Cookie(String name, String value)

• Accesseurs sur attributs d’un Cookie– String getName()– String getValue()– setValue(String newValue)

• Exemple d’envoie d’un cookie au client

Cookie userCookie = new Cookie(" user " , " uid1234"  );Response.addCookie(userCookie);

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 26 / 48

Session Tracking

• Le protocole HTTP bien que persistant est un protocole sans état (respect des propriétés des transactions pour le télécommerce)

• Solutions– Problème: bien que simple dans leur implantation, mécanisme

complexe sont nécessaires• Cookie (solution la plus répandue)• URL rewriting• Hidden form fields

– <input type=«hidden» name=« session » value=« valeur »>

• Session tracking API (HttpSession API)– Offre une interface de haut niveau pour gérer ces solutions

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 27 / 48

Session Tracking (2)

– Créer une session• HttpSession session = request.getSession(true)

– Obtenir des informations sur une session– boolean isNew()

• Obtenir l’identifiant d’une session– String getId()

• Obtenir la date de création d’une session– Long getCreationTime() …

– Associer des informations à une session• Associer un objet à une session:

– setAttribute(String name, Object objet)

• Retourne un objet à partir d’une clé: – Object getValue(String name)

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 28 / 48

Session Tracking - exemple

• Gestion d’un caddyHttpSession session = request.getSession(true);//Ici on écrase la précédente valeur de la page de référencesession.setAttribute("referringPage", (String)request.getHeader("Referer"));

Caddy articles = (Caddy)session.getAttribute("articles"); if (articles == null) { articles = new Caddy(...); }

String itemID = request.getParameter("itemID"); articles.addArticles(Catalog.getArticles(itemID)); // On fait un setAttribute pour sauvegarder le caddy au cas où // c’est la création du caddy. Ici, on met maj le Caddy session.setAttribute("articles", (Caddy) articles);

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 29 / 48

Les JSP

• Java et le Web

• Les Servlets

• Les JSP

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 30 / 48

Les JSP

• Parallèle avec les langage de scripts PHP ou ASP– Langage de script– Au sein du code HTML, on insert du code java qui sera

compilé (lors du premier accès à une page JSP)– Exécutées sur le serveur– Extensible via des librairies de tag existantes ou définis

par le développeur

• Avantages par rapport au Servlet et CGI– Une page dynamique générée par un CGI ou une servlet

possède toujours une partie statique– Les JSP permettent de bien séparer les deux

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 31 / 48

Les JSP - exemples

• Mapage.jsp<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD> <TITLE>Bienvenue au cours d’architecture Web</TITLE></HEAD><BODY> <H1>Bienvenue</H1> <SMALL>Bonjour, <!– getUserName renvoie le nom de l’utilisateur associé à son cookie --> <% out.println(Utils.getUserNameFromCookie(request)); %> Pour accéder au serveur Tomcat, cliquer <A HREF=« http://tparchiweb:8080">ici.</A></SMALL> <P> <!– Reste de la page --></BODY></HTML>

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 32 / 48

Les JSP (2)

• Vie d’une JSP– Le serveur d’applications (tomcat) transforme le

fichier .jsp en source java– Le code source correspond au code d’une servlet

• Le HTML est transformé en – out.print(« mon code HTML »)

• Le code java est transformé et inclus dans le corps de la méthode servlet.service()

– Le fichier java est ensuite compilé en .class• la servlet est prête à être exécutée

• Importance du serveur d’applications dans la phase de génération du code (respect de l’API et de ses spécifications)

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 33 / 48

Les JSP – exemple de code généré

• Mapage.javapublic void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException {

printWriter out = response.getWriter(); out.println(" <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0

Transitional//EN">\n");…out.println(Utils.getUserNameFromCookie(request));...out.println("Pour accéder au serveur Tomcat, cliquer");out.println("<A HREF="http://tparchiweb:8080">ici.</A></SMALL>");…out.println("</HTML>");out.close();

}

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 34 / 48

Les JSP (3)

• Balises– JSP Expressions

• <%= expression java %>• out.print(expression java)

– JSP Scriptlets• <% … %>• Code java inclus dans le corps de la méthode service()

– JSP Déclarations• <%! Java code %>• Déclaration d’attributs ou de méthodes de la classe servlet

générée• Ex : redéfinition de la méthode init()

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 35 / 48

Les JSP (4)

– JSP Directives• JSP page directive

– Ensemble de raccourcis vers des attributs du protocoles HTTP et du contenu HTML» Content-Type» Session» isErrorPage

• JSP include directive– Inclus un fichier dans la jsp juste avant la génération du code java– ex : header, tailer, menu, …

– Actions• jsp:include

– Inclus une page(URL) au moment ou la servlet répond à une requête– Inclusion dynamique de contenu

» choix dynamique de la page à inclure : l ’attribut page peut être une expression java» si la page est une jsp, celle-ci est executée avant d ’être incluse

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 36 / 48

Les JSP (5)

• jsp:useBean, jsp:setProperty et jsp:getProperty– Instancie un objet et l’initialise en dehors d’une JSP Scriptlet

• jsp:forward– Équivaut setLocation()

• jsp:plugin– Description XML d’un plugin dans une page HTML

• Variables prédéfinies– request, response, out, session, ..– Accesseurs sur des attributs des objets

• Servlet– session

• Les arguments de la méthode service– request– response

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 37 / 48

Les JSP (6)

• Limites des JSP– Propreté du code : mélange code applicatif et code de

présentation• Ex : connexion JDBC, mise en page, …• Les JSP doivent essentiellement (exclusivement) être

utilisées pour la présentation (modèle MVC)• Solution : JSP Action et taglib qui permettent de décrire en

XML du code

– une JSP est son propre contrôleur• Pas de génération de code dynamique• Problèmes rencontrés lors d’inclusions multiples

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 38 / 48

JSP Expressions

• Variables ou constantes intégrées dans la page résultat

<%= "tralala" %> Code JSP

Code Java

public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { ...

out.print( "tralala" ); …}

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 39 / 48

JSP Scriptlets

• Bloc de code Java intégrés dans la JSP<%

String s = "tralala";out.print(s);

%>Code JSP

Code Java

public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException {

...String s = "tralala";out.print(s);...

}

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 40 / 48

JSP Declarations

• Comme en Java<%!

String s = "tralala";

public String maMethode(String s) {return "Chaine à traiter : " + s;

}%>

Code JSP

Code Java

public class test$jsp extends HttpJspBase {

String s = "tralala"; public String maMethode(String s) { return "Chaine à  traiter : " + s;}

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 41 / 48

JSP Page Directive

• Traitées lors de la compilation de la page en servlet: include

<%@ page import="java.util.Vector" %>ou<jsp:directive.page import="java.util.Vector"/> Code JSP

Code Java

package org.apache.jsp;

import java.util.Vector;import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.jsp.*;import org.apache.jasper.runtime.*;

public class test$jsp extends HttpJspBase {...

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 42 / 48

JSP Page Directive (2)

• Paramètres HTTP

<%@ page contentType="text/plain"%>ou<% response.setContentType("text/plain"); %>

Code JSP

Code Java

public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { ... response.setContentType("text/plain"); ...}

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 43 / 48

JSP Include Directive

• Include<%@ include file="file.txt" %> Code JSP

Code Java

public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { ...

out.write("Contenu du fichier file.txt"); ...}

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 44 / 48

JSP useBean, setProperty, getProperty

• Accesseurs et modifieurs d’attributs<jsp:useBean id="monBean" class="test.MonBean"> <jsp:setProperty name="monBean"  property="att1"  value="valeur1"/> <jsp:setProperty name="monBean" property="att2" value="valeur2"/>

</jsp:useBean>

Code JSP

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 45 / 48

JSP useBean, setProperty, getProperty (2)

• Code Javapublic void _jspService(HttpServletRequest request, HttpServletResponse response)

throws java.io.IOException, ServletException { ...

test.MonBean monBean = null; boolean _jspx_specialmonBean = false; synchronized (pageContext) { monBean= (test.MonBean)

pageContext.getAttribute("monBean",PageContext.PAGE_SCOPE);if ( monBean == null ) { _jspx_specialmonBean = true;

try {monBean = (test.MonBean)

java.beans.Beans.instantiate(this.getClass().getClassLoader(), "test.MonBean"); } catch (ClassNotFoundException exc) { throw new InstantiationException(exc.getMessage()); } catch (Exception exc) {

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 46 / 48

JSP useBean, setProperty, getProperty (3)

• Code Java (suite)throw new ServletException (" Cannot create bean of class "+"test.MonBean", exc);

} pageContext.setAttribute("monBean", monBean, geContext.PAGE_SCOPE); } } if(_jspx_specialmonBean == true) {

JspRuntimeLibrary.introspecthelper(pageContext.findAttribute("monBean"), "att1","valeur1",null,null, false);

JspRuntimeLibrary.introspecthelper(pageContext.findAttribute("monBean"), "att2","valeur2",null,null, false);} ...}

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 47 / 48

Formulaires et JSP

• Lecture de deux paramètres<html> <head> <title> Exemple JSP </title> </head> <body> <h1>Exemple JSP </h1> <% String sn1, sn2; int param1,param2; sn1 = request.getParameter(" param1");sn2 = request.getParameter(" param2");param1 = Integer.parseInt(sn1);param2 = Integer.parseInt(sn2);out.println("Les paramètres sont: " + sn1 + " et " + sn2);out.println("<br>");out.println("La somme est égale à: " + (param1+param2));%></body></html>

10 / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB 48 / 48

Questions

?

?

?

??

??