COMPTE RENDU M. Mouad EL MERCHICHI CRJJ GB. Ceci est un résumé du travail effectué dans les TP concernant les scriptlets et le modèle MVC.



Documents pareils
Connexion à SQL Server 2005 à partir du serveur d application SJSAS 9 Utilisation d une interface JDBC

Application web de gestion de comptes en banques

Documentation CAS à destination des éditeurs

Web Tier : déploiement de servlets

A DESTINATION DES SERVICES TIERS. Editeurs d applications et ressources pédagogiques connectées à l ENT

Aspects techniques : guide d interfaçage SSO

Introduction à JDBC. Accès aux bases de données en Java

Groupe Eyrolles, 2005, ISBN :

Java - MySQL. Code: java-mysql

TP JEE Développement Web en Java. Dans ce TP nous commencerons la programmation JEE par le premier niveau d une application JEE : l application web.

OpenPaaS Le réseau social d'entreprise

JavaServer Pages (JSP)

Programmation Par Objets

Java DataBaseConnectivity

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Architecture Orientée Service, JSON et API REST

1. Installation d'un serveur d'application JBoss:

Package Java.util Classe générique

Programmer en JAVA. par Tama

Configurer la supervision pour une base MS SQL Server Viadéis Services

PHP et les Bases de données - Généralités

Construire une base de donnée pour bibliothèque

Olivier Mondet

TP Programmation Java / JDBC / Oracle

Programmation d application Bases de données avec Java

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

Modélisation PHP Orientée Objet pour les Projets Modèle MVC (Modèle Vue Contrôleur) Mini Framework

Création d une application JEE

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

Pratique et administration des systèmes

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Les frameworks au coeur des applications web

PHP 5. La base de données MySql. A. Belaïd 1

Avant-propos 1. Avant-propos Organisation du guide À qui s'adresse ce guide?...4

Cours Bases de données 2ème année IUT

Grenoble INP Genie Industriel G-SCOP Université Joseph Fourier CNRS. Stages d excellence L2 Mathématiques Informatiques

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Installation d'un serveur FTP géré par une base de données MySQL

CREATION WEB DYNAMIQUE

Gestion de base de données

Développement Logiciel

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Tutoriel d installation de Hibernate avec Eclipse

Historisation des données

Création d un service web avec NetBeans 5.5 et SJAS 9

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

I. MySQL : Serveur et SGBD

WEBSERVICES. Michael Fortier. Master Informatique 2ème année. A308, Université de Paris 13

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Formation Webase 5. Formation Webase 5. Ses secrets, de l architecture MVC à l application Web. Adrien Grand <jpountz@via.ecp.fr> Centrale Réseaux

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

TD/TP PAC - Programmation n 3

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

CONCOURS DE L AGRÉGATION INTERNE «ÉCONOMIE ET GESTION» SESSION 2015 SECONDE ÉPREUVE

1. Langage de programmation Java

Corrigés des premiers exercices sur les classes

Corrigé des exercices sur les références

Grille fluide. Une grille fluide sert à structurer la mise en page, la rendre harmonieuse et faciliter le passage au responsive web design

Un ordonnanceur stupide

Projet de programmation (IK3) : TP n 1 Correction

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Dossier Technique. Détail des modifications apportées à GRR. Détail des modifications apportées à GRR Le 17/07/2008. Page 1/10

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Cours 1: Java et les objets

I4 : Bases de Données

INSTALLATION DE L APPLICATION DU CONTEXTE ITASTE

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Application BdD et JDBC. Introduction 1/28. I Dans tout les cas, une seule problématique. I Quelques alternatives :

Chapitre 10. Les interfaces Comparable et Comparator 1

7 Développement d une application de MapReduce

Alfstore workflow framework Spécification technique

Extension SSO Java. Cette note technique décrit la configuration et la mise en œuvre du filtre de custom SSO Java.

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Java Database Connectivity (JDBC) - Langage SQL

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Une introduction à la technologie EJB (2/3)

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

DOM - Document Object Model

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines)

BASES DE DONNEES TP POSTGRESQL

Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des Bases de Données avec PHP

Accès aux bases de données

PDO : PHP Data Object 1/13

Les architectures 3-tiers Partie I : les applications WEB

Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ;

Dis papa, c est quoi un bus logiciel réparti?

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki

Java et les bases de données

[BASE DE DONNEES MULTIMEDIA]

Transcription:

COMPTE RENDU M. Mouad EL MERCHICHI CRJJ GB Ceci est un résumé du travail effectué dans les TP concernant les scriptlets et le modèle MVC. Page 0

Sommaire Introduction... 2 TP I : Scriptlets et Actions... 3 Première méthode : Les scriptlets JSP :... 4 Deuxième méthode : Les actions JSP :... 6 TP II : Architecture MVC... 7 A - Base de données... 8 B - L'application... 9 Conclusion... 14 Page 1

Introduction Dans le cadre du module «Java Server Pages», nous avons été chargés de réaliser deux TP afin de voir de plus près l utilisation des scriptlets et actions dans une page JSP ainsi que l architecture MVC. Dans le premier TP, nous allons faire une authentification avec un login et un mot de passe en utilisant un Java Bean représenté par la classe User. Cette authentification va être faite en utilisant deux méthodes : les scriptlets JSP et les actions en JSP. Dans le deuxième TP, nous allons réaliser une application JSP en se basant sur le modèle Model- View-Controller (MVC). MVC est une manière idéale qui consiste à modéliser un composant selon trois parties indépendantes : Le modèle (Model) qui stocke les données qui défi nit la composante. La vue (View) qui crée la représentation visuelle de la pièce à partir des données du modèle. Le contrôleur (Controller) qui traite l'interaction de l utilisateur avec le composant et modifie le modèle et/ou la vue, en réponse à une action de l'utilisateur selon les besoins. Page 2

TP I : Scriptlets et Actions Page 3

Première méthode : Les scriptlets JSP : Premièrement nous allons créer une page «login.html» qui jouera le rôle de page de saisie du login et du mot de passe. Après clique sur le bouton «Envoyer», l utilisateur sera redirigé vers la page «load.jsp». Le code html utilisé est le suivant : <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>authentification</title> <link rel="stylesheet" href="css/style.css" /> </head> <body> <div class="authentification"> <form action="load.jsp" method="post"> <h1>authentification</h1> <table> <tr> <td><label for="login">login : </label></td> <td><input type="text" id="login" name="login" size="30" /></td> </tr> <tr> <td><label for="password">mot de passe : </label></td> <td><input type="password" id="password" name="password" size="30" /></td> </tr> <tr> <td colspan="2"> <input type="submit" id="submit" name="submit" value="envoyer" /> </td> </tr> </table> </form> </div> </body> </html> La page «load.jsp» sert à récupérer le login et mot de passe envoyés de la page «login.html» et les stocker dans un objet de classe User contenu dans le package ma.projet et ce en utilisant les scriptlets. Cet objet sera par la suite stocké dans une variable de session et sera récupéré dans la page «affiche.jsp». Voici le code de la classe «User» et la page «load.jsp» : package ma.projet; public class User { private String login; private String password; public User() { public String getlogin() { return login; public String getpassword() { return password; public void setlogin(string login) { Page 4

this.login = login; public void setpassword(string password) { this.password = password; La page «load.jsp» : <%@page contenttype="text/html" pageencoding="utf-8" errorpage="erreur.jsp"%> <%@page import="ma.projet.user" %> <% String l = request.getparameter("login"); String p = request.getparameter("password"); User u = new User(); u.setlogin(l); u.setpassword(p); session.setattribute("user", u); response.sendredirect("affiche.jsp"); %> Finalement, dans la page «affiche.jsp», on récupère l objet «user» depuis la session puis en affiche le login et le mot de passe en utilisant les expressions. Voici le code utilisé dans la page «affiche.jsp» : <%@page contenttype="text/html" pageencoding="utf-8" %> <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>résultat</title> <style type="text/css"> h1 { margin-top: 20px; width : 400px; margin-left: auto; margin-right: auto; background-color: lemonchiffon; font-size: 26px; </style> </head> <body> <% User u = (User)session.getAttribute("user"); %> <h1> Votre login est : <%= u.getlogin() %><br /> Votre mot de passe est : <%= u.getpassword() %> </h1> </body> </html> Page 5

Deuxième méthode : Les actions JSP : Cette deuxième méthode consiste à utiliser les actions dans le code précédent au lieu des scriptlets. Cette fois, la page «login2.html» redirige l utilisateur vers la page «load2.jsp» : <form action="load2.jsp" method="post"> Dans la page «load2.jsp», on utilise l action <jsp:usebean /> pour créer un objet User au niveau de la session. Ensuite, on stocke les valeurs du login et mot de passe envoyé de la page «login.html» dans les attributs de l objet crée et ce à l aide de l action <jsp:setproperty />. Enfin, on redirige l utilisateur vers la page «affiche2.jsp». Voici le code de la page «load2.jsp» : <%@page contenttype="text/html" pageencoding="utf-8" errorpage="erreur.jsp"%> <%@page import="ma.projet.user" %> <jsp:usebean id="u" class="ma.projet.user" scope="session"/> <jsp:setproperty name="u" property="login" param="login"/> <jsp:setproperty name="u" property="password" param="password"/> <jsp:forward page="affiche2.jsp" /> Finalement, dans la page «affiche2.jsp», on récupère l objet «user» depuis la session en utilisant l action <jsp:usebean /> puis en affiche le login et le mot de passe en utilisant l action <jsp:getproperty />. Voici le code utilisé dans la page «affiche2.jsp» : <%@page contenttype="text/html" pageencoding="utf-8" %> <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>résultat</title> <style type="text/css"> h1 { margin-top: 20px; width : 400px; margin-left: auto; margin-right: auto; background-color: lemonchiffon; font-size: 26px; </style> </head> <body> <% User u = (User)session.getAttribute("user"); %> <h1> <jsp:usebean id="u" class="ma.projet.user" scope="session"/> Votre login est : <jsp:getproperty name="u" property="login" /><br /> Votre mot de passe est : <jsp:getproperty name="u" property="password" /> </h1> </body> </html> Page 6

TP II : Architecture MVC Page 7

A - Base de données Nous avons créé la base de données «Scolarité» qui contient une seule table «Notes». Nous nous sommes basés sur cette table pour réaliser l application JSP en utilisant le modèle MVC. Voici le script de création de la base de données «Scolarité» : CREATE DATABASE IF NOT EXISTS Scolarite; USE Scolarite; -- Création de la table notes CREATE TABLE IF NOT EXISTS Notes ( ID_Note INT AUTO_INCREMENT NOT NULL, NUM_INS VARCHAR(12) NOT NULL, MATIERE VARCHAR(25) NOT NULL, NOTE FLOAT NULL DEFAULT 0, CONSTRAINT PK_Notes PRIMARY KEY (ID_Note) ) ENGINE=INNODB; -- Jeu d'enregistrement INSERT INTO Notes VALUES (NULL, 'HE1', 'Maths', 12.0), (NULL, 'HE1', 'Java', 16.0), (NULL, 'HE1', 'TCP/IP', 11.0), (NULL, 'HE2', 'Algorithme', 14.0), (NULL, 'HE2', 'JSP', 15.0); Page 8

B - L'application LE MODÈLE Dans cette section, nous avons commencé par crée la partie «Model» de l application : La première classe du modèle est la classe «Note» qui un Java Bean. Cette classe contient quatre attributs correspondant aux champs de la table Notes. Elle contient aussi un constructeur sans paramètres et les getters et les setters : package modele.scolarite; public class Note { private int idnote; private String numinscription; private String matiere; private double note; public Note() { public int getidnote() { return idnote; public String getnuminscription() { return numinscription; public String getmatiere() { return matiere; public double getnote() { return note; public void setidnote(int idnote) { this.idnote = idnote; public void setnuminscription(string numinscription) { this.numinscription = numinscription; public void setmatiere(string matiere) { this.matiere = matiere; Page 9

public void setnote(double note) { this.note = note; Ensuite, vient la création d une classe «Utilitaire» dont le rôle est de charger le driver d accès à la base de données et de créer une instance de type «Connection» : package modele.scolarite; import java.sql.connection; import java.sql.drivermanager; import java.sql.sqlexception; public class Utilitaire { private static Connection connection; static { try{ Class.forName("com.mysql.jdbc.Driver"); connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/Scolarite", "root", "root"); catch(classnotfoundexception ex) { System.out.println("driver introuvable"); catch(sqlexception ex) { ex.printstacktrace(); public static Connection getconnection(){ return connection; La classe «Scolarité» est la classe principale du modèle, puisqu elle accède à la base de données pour récupérer les tous les enregistrements de la table «Notes» qui correspondent à un numéro d inscription fourni. Les enregistrements sont stockés dans une collection de type «Vector» : package modele.scolarite; import java.sql.connection; import java.sql.preparedstatement; import java.sql.resultset; import java.sql.sqlexception; import java.sql.types; import java.util.vector; public class Scolarite { public Vector getnotes(string numinscription) { Vector lesnotes = new Vector(); Connection connection = Utilitaire.getConnection(); try { PreparedStatement preparedstatement = connection.preparestatement( "SELECT * FROM Notes WHERE NUM_INS =?;"); preparedstatement.setobject(1, numinscription, Types.VARCHAR, 12); ResultSet result = preparedstatement.executequery(); while (result.next()) { Page 10

Note note = new Note(); note.setidnote(result.getint("id_note")); note.setnuminscription(result.getstring("num_ins")); note.setmatiere(result.getstring("matiere")); note.setnote(result.getdouble("note")); lesnotes.add(note); catch (SQLException ex) { ex.printstacktrace(); return lesnotes; Nous avons créé par la suite une classe «NoteForm» dans laquelle on stocke le numéro d inscription et la liste des notes associée à ce numéro : package forms.beans; import java.util.vector; public class NoteForm { private String numinscription; private Vector lesnotes = new Vector(); public String getnuminscription() { return numinscription; public Vector getlesnotes() { return lesnotes; public void setnuminscription(string numinscription) { this.numinscription = numinscription; public void setlesnotes(vector lesnotes) { this.lesnotes = lesnotes; LE CONTRÔLEUR Le contrôleur sert d intermédiaire entre la vue et le modèle. C est en fait celui qui alimente la vue par les données fournit par le modèle. Il consiste en une Servlet appelé «ControleurServlet». Dans cette dernière, on récupère le numéro d inscription depuis l objet «request» puis on fait appel à la méthode «getnotes()» du modèle pour récupérer les notes associées. Enfin, on stocke le résultat dans une variable session puis on redirige l utilisateur vers la page «Notes.jsp» de la vue : package controleur; import forms.beans.noteform; import java.io.ioexception; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; Page 11

import javax.servlet.http.httpsession; import modele.scolarite.scolarite; public class ControleurServlet extends HttpServlet { protected void processrequest(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { NoteForm noteform = new NoteForm(); Scolarite sco = new Scolarite(); noteform.setnuminscription(request.getparameter("numinscription")); noteform.setlesnotes(sco.getnotes(noteform.getnuminscription())); HttpSession session = request.getsession(); session.setattribute("noteform", noteform); response.sendredirect("notes.jsp"); @Override protected void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { processrequest(request, response); @Override protected void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { processrequest(request, response); LA VUE La vue c est ce que voit l utilisateur. C est l interface graphique qui offre les différentes options et informations fournit par le contrôleur. Dans la page «Notes.jsp», qui joue le rôle de vue dans ce cas, on utilise les scriptlets pour récupérer la liste des notes correspondante au numéro d inscription fournit par l utilisateur, puis l affiche sous forme d un tableau. La moyenne des notes est aussi calculée et affichée : <%@page contenttype="text/html" pageencoding="utf-8" language="java"%> <%@page import="forms.beans.*" %> <%@page import="java.util.*" %> <%@page import="modele.scolarite.*" %> <% NoteForm noteform; if (session.getattribute("noteform") == null) { noteform = new NoteForm(); else { noteform = (NoteForm) session.getattribute("noteform"); Iterator it = noteform.getlesnotes().iterator(); double somme = 0.0; int compteur = 0; %> <!DOCTYPE html> < <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> Page 12

<title>gestion des notes</title> </head> <body> <form action="controleur" method="post"> <table> <tr> <td> <label for="numinscription">num Inscription : </label> <input type="text" id="numinscription" name="numinscription" /> <input type="submit" id="action" name="action" value="ok" size="10" /> </td> </tr> </table> </form> <table style="width: 80%;" border="1"> <tr> <th>matière</th> <th>note</td> </tr> <% while (it.hasnext()) { Note note = (Note) it.next(); somme += note.getnote(); compteur++; %> <tr> <td><%= note.getmatiere()%></td> <td><%= note.getnote()%></td> </tr> <% %> <tr> <td><label>moyenne : </label></td> <td><%= somme / compteur %></td> </tr> </table> </body> </html> Page 13

Conclusion La différence entre les scriptlets et les actions réside dans le faite que ces dernières permettent de minimiser l utilisation du code java au sein du code html et ainsi assurer une seule structure (celle basée sur XML) de la page JSP. Un avantage apporté par le modèle MVC est la clarté de l'architecture qu'il impose. Cela simplifie la tâche du développeur qui tenterait d'effectuer une maintenance ou une amélioration sur le projet. En effet, la modification des traitements ne change en rien la vue. Par exemple on peut passer d'une base de données de type MySQL à XML en changeant simplement les traitements d'interaction avec la base, et les vues ne s'en trouvent pas affectées. Page 14