Ala Eddine BEN SALEM T.P. 5 JSTL, MVC



Documents pareils
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.

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

Web Tier : déploiement de servlets

JavaServer Pages (JSP)

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

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

Architecture Orientée Service, JSON et API REST

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

Alfstore workflow framework Spécification technique

Refonte front-office / back-office - Architecture & Conception -

Le développement d applications Web

SIO Page 1 de 5. Applications Web dynamiques. Prof. : Dzenan Ridjanovic Assistant : Vincent Dussault

Application Web et J2EE

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

OpenPaaS Le réseau social d'entreprise

Application web de gestion de comptes en banques

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

Plan. Department of Informatics

Groupe Eyrolles, 2005, ISBN :

Authentification et contrôle d'accès dans les applications web

Compte Rendu d intégration d application

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)

Programmation Par Objets

Projet de programmation (IK3) : TP n 1 Correction

Best Practices : Utilisation des APIs de Lotus Web Content Management

Formation en Logiciels Libres. Fiche d inscription

Outil de planification en ligne pour des créations de rendez-vous ou de sondage

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

Les architectures 3-tiers Partie I : les applications WEB

Architectures client/serveur

Programmer en JAVA. par Tama

Traitement des données de formulaires. Accès aux BD avec JDBC Servlets - M. Baron - Page

10. Base de données et Web. OlivierCuré

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)

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

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

1. Base de données SQLite

Remote Method Invocation (RMI)

HTTP 1.1. HyperText Transfer Protocol TCP IP ...

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

1 Position du problème

2 Chapitre 1 Introduction

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

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

Cours en ligne Développement Java pour le web

Education Delivery Intelligent Tool

Auto-évaluation Programmation en Java

Documentation CAS à destination des éditeurs

I4 : Bases de Données

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)

Développement Web - Object Relational Mapping and Hibernate

Stockage du fichier dans une table mysql:

Une introduction à la technologie EJB (2/3)

Gestion de base de données

SYNC FRAMEWORK AVEC SQLITE POUR APPLICATIONS WINDOWS STORE (WINRT) ET WINDOWS PHONE 8

La programmation orientée objet Gestion de Connexions HTTP Manipulation de fichiers Transmission des données PHP/MySQL. Le langage PHP (2)

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Projet Java EE Approfondi

7 Développement d une application de MapReduce

La base de données XML exist. A. Belaïd

Gestion du cache dans les applications ASP.NET

Le développement d applications Web. François Charoy Pascal Molli Pascal Urso

Jahia CMS ET Portal Version 5.0

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

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

JOnAS 5. Serveur d application d

Programmation Web TP1 - HTML

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Module BD et sites WEB

EJB. Karim Bouzoubaa Issam Kabbaj

Aspects techniques : guide d interfaçage SSO

Modules Prestashop - ExportCatalogue / EXPORT IMPORT POUR MODIFICATIONS EN MASSE DANS PRESTASHOP VERSION Optim'Informatique

Applications des patrons de conception

Bases Java - Eclipse / Netbeans

J2EE - Introduction. Développement web - Java. Plan du chapitre

Technologie Web. Conception de sites Web. Alexandre Pauchet. INSA Rouen - Département ASI. INSA - ASI TechnoWeb : Rappels UML 1/21

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

Rafraichissement conditionné d'une page en.net

Arbres binaires de recherche

Première coupe : Introduction à la plateforme Java EE JAVA JAVA. Introduction à la plateforme Java EE. Introduction à la plateforme Java EE

TP JAVASCRIPT OMI4 TP5 SRC

Plateforme Systempay Descriptif de l interface avec la page de paiement

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Le hub d entreprise est une application de déploiement des applications mais aussi un outil de communication

Corrigé des exercices sur les références

Le Modèle de Sécurité dans JAVA

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

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

Cours 14 Les fichiers

Nouvelles Plateformes Technologiques

TP au menu «UI ANDROID»

Application de lecture de carte SESAM-Vitale Jeebop

Introduction aux composants logiciels : JavaBeans Master des Technologies de l'internet

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

Evaluation du couplage entre Designer & JDeveloper d Oracle

Transcription:

EPITA Ala Eddine BEN SALEM App-Ing2 J2EE T.P. 5 JSTL, MVC Dans ce TP, l'utilisation des tags JSTL est obligatoire pour écrire les JSPs, il est interdit d'utiliser du code java dans les JSPs (c'est-à-dire, il ne faut pas utiliser des scriplets <%=...%> ou <%...%>). Pour le mapping des tables de la base de données, vous pouvez utiliser EJB3 ou JDBC. L'objectif de ce TP est de développer une application Web permettant de gérer des contacts (créer un contact, rechercher un contact, modifier un contact,...). Cette application doit être conforme au design pattern MVC (i.e, des JSPs pour les vues, une Servlet comme contrôleur et des classes Java (EJB3 ou JDBC) pour le modèle). Pour cela, nous allons créer des JSPs responsables de l'affichage d'un contact, de son édition,... Chacune de ces JSPs communiquera avec une Servlet qui aura le rôle de contrôleur : ControllerServlet.java (voir le code de cette Servlet en annexe). L idée ici est que toutes vos requêtes doivent être sous la forme: ControllerServlet?do_this=[action à exécuter], le paramètre do_this est récupéré par la ControllerServlet pour connaître l'action à effectuer (par exemple, sélectionner la JSP qui aura à afficher la réponse). - Partie Modèle: Vous devez commencer par créer la table Contact: CREATE TABLE Contact ( ID_CONTACT generated always as identity primary key, FIRSTNAME VARCHAR(255), LASTNAME VARCHAR(255), EMAIL VARCHAR(255), PHONE VARCHAR(255), ADDRESS VARCHAR(255) ) Créez un projet TP5_Contacts. Ensuite, dans un package nommé model sous le répertoire src, implémentez la classe Contact (un EJB Entity ou un simple JavaBean à mapper avec JDBC) correspondant au mapping de la table Contact. Implémentez également la classe ContactFacade.java dans le package model. - Partie Contrôleur: Dans un package nommé controller, créez une Servlet ControllerServlet.java. Ensuite, copiez le code de cette Servlet fournit en annexe A. Ce code est incomplet, dans la suite du TP, vous aurez à le compléter en fonction des besoins des JSPs développées dans la partie Vues.

- Partie Vues: L utilisateur arrive sur une page d accueil accueil.jsp. Cette page affiche la liste des contacts déjà créés. En plus, la page accueil.jsp contient les actions suivantes (liens) : - Créer un nouveau contact (redirection vers addcontact.jsp) - Supprimer un contact (redirection vers removecontact.jsp) - Modifier un contact (redirection vers updatecontact.jsp) - Rechercher un contact (redirection vers searchcontact.jsp) Le code de la page accueil.jsp est fournit en Annexe B, copiez ce code dans TP5_Contacts/WebContent/, puis complétez la partie du code qui affiche le tableau des contacts. Cette partie utilise le tag JSTL <c:foreach> (voir cours JSTL), le but est de générer dynamiquement un tableau HTML sans utiliser une boucle «for» en code Java. Attention: les JSPs ne peuvent pas accéder directement à la base de données car dans MVC les Vues n'appellent pas directement le Modèle. En effet, tous les appels vers le Modèle (à travers ContactFacade.java) doivent passer par le Contrôleur ControllerServlet.java. Par exemple, pour accéder à la page d accueil accueil.jsp, l'utilisateur doit appeler la ControllerServlet (URL: http://localhost:8080/tp5_contacts/controllerservlet). Ensuite, la ControllerServlet charge la liste des contacts dans la requête (request.setattribute("listcontacts", contactfacade.findall())), puis, elle transmet la requête vers accueil.jsp (forward(request, response);). Enfin, accueil.jsp récupère la liste des contacts à partir de la requête et l'affiche (<c:foreach items="${requestscope.listcontacts">). La page addcontact.jsp propose un formulaire qui contient des champs pour renseigner un contact. Ses champs doivent correspondre aux attributs de la classe Contact.java. Le formulaire doit également avoir un bouton «submit». Une fois le formulaire envoyé, il est traité par la servlet ControllerServlet. Par conséquent, afin de préciser à ControllerServlet l'action à effectuer, le formulaire de addcontact.jsp doit contenir un paramètre caché: <input type="hidden" name="do_this" value="create"/> (voir le code du formulaire ci-dessous). Créez la page addcontact.jsp dans TP5_Contacts/WebContent/, puis copiez et complétez le code du formulaire suivant: <form action="controllerservlet" method="post"> < input type = "hidden" name = "do_this" value = "create" /> <table> <td align="center" colspan="2"><font size="4">please Enter the Following Details</font> <td>first Name</td><td><input type="text" name="firstname"/></td> <td>last Name</td><td><input type="text" name="lastname"/><br/></td>...... <td></td><td><input type="submit" name="validate" value="save"/></td> </table> </form> Ensuite, la Servlet ControllerServlet récupère les informations du contact à partir des données du formulaire puis elle utilise le ContactFacade pour appeler la méthode addcontact(long id, String firstname, String lastname, String email, ). Cette méthode crée une instance de Contact, fixe ses attributs puis le sauvegarde dans la base de données. Même principe pour removecontact.jsp. Cette page propose un formulaire avec un champ nommé idcontact et un bouton «submit». Une fois cliqué, le formulaire fait appel à la servlet ControllerServlet qui récupère l id du contact à partir des données du formulaire puis elle appelle la

méthode deletecontact(long id) de ContactFacade. Cette méthode se charge d effacer le contact portant cet id dans la base de données. Ainsi de suite pour les autres fonctionnalités.

Annexe A. Servlet contrôleur ControllerServlet.java: package controller; import java.io.ioexception; import javax.servlet.requestdispatcher; import javax.servlet.servletconfig; import javax.servlet.servletcontext; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import model.contactfacade; public class ControllerServlet extends HttpServlet { public ControllerServlet() { super(); public void init(servletconfig config) throws ServletException { System.out.println("*** initializing controller servlet."); super.init(config); protected void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { dopost(request, response); protected void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { // recuperation de l'action à effectuer String do_this = request.getparameter("do_this"); if (do_this == null) { // definir le contexte pour une redirection sur la page accueil.jsp ServletContext sc = getservletcontext(); RequestDispatcher rd = sc.getrequestdispatcher("/accueil.jsp"); // charger la liste des contacts dans la requête pour les // transmettre à la JSP accueil.jsp (qui va les afficher) request.setattribute("listcontacts", contactfacade.findall()); rd.forward(request, response); else if (do_this.equals("delete")) { // recuperation de l'id du contact String id = (String) request.getparameter("contact_id"); if (id == null) { // redirection sur la page removecontact.jsp response.sendredirect("removecontact.jsp"); else { // id non nul, donc on supprime le contact identifié par id contactfacade.deletecontact(id); // on recharge la page d'accueil response.sendredirect("controllerservlet"); else if (do_this.equals("create")) { // recuperation du nom contact String lastname = (String) request.getparameter("lastname"); if (lastname == null) { // redirection sur la page removecontact.jsp response.sendredirect("addcontact.jsp"); else { // TODO le nom n'est pas nul, donc on ajoute le contact dans la base contactfacade.createcontact(...); // on recharge la page d'accueil response.sendredirect("controllerservlet");

else if (do_this.equals("update")) { else if (do_this.equals("search")) { Annexe B. page d accueil accueil.jsp: <%@page import="model.entity.contact"%> <%@ page language="java" contenttype="text/html; charset=iso-8859-1" pageencoding="iso-8859-1"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <title>accueil</title> </head> <body> <h1>liste des contacts : </h1> <table border="2"> <th>contact Id</th> <th>first Name</th> <th>last Name</th> <th>email</th> <th>phone Number</th> <th>address</th> <c:foreach var="contact" items="${requestscope.listcontacts"> </c:foreach> </table> <a href="controllerservlet?do_this=create" style="">créer un nouveau contact</a> <a href="controllerservlet?do_this=delete" style="">supprimer un Contact</a> <a href="controllerservlet?do_this=update" style="">modifier un Contact</a> <a href="controllerservlet?do_this=search" style="">rechercher un contact</a> </body> </html>