JAVA IN A FRAMEWORK. William Rey (26 novembre 2010)

Documents pareils
Eclipse atelier Java

Utilisation de Jakarta Tomcat

Compte Rendu d intégration d application

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

Introduction à Eclipse

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

Optimiser pour les appareils mobiles

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

Guide d installation de MySQL

Java pour le Web. Cours Java - F. Michel

Oracle Developer Suite 10g. Guide de l installation. Vista & Seven

Web Tier : déploiement de servlets

I. Instalation de l environnement JDK et JRE : II. Configuration outil Reporting : Pentaho... 4

Europa. Développement JEE 5. avec Eclipse. K a r i m D j a a f a r. A v e c l a c o n t r i b u t i o n d e O l i v i e r S a l v a t o r i

TP1 : Initiation à Java et Eclipse

Installation et prise en main

Projet Java EE Approfondi

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

TP1 : Initiation à Java et Eclipse

A. Architecture du serveur Tomcat 6

Technologies du Web. Créer et héberger un site Web. Pierre Senellart. Page 1 / 26 Licence de droits d usage

Architecture JEE. Objectifs attendus. Serveurs d applications JEE. Architectures JEE Normes JEE. Systèmes distribués

Cours en ligne Développement Java pour le web

Manuel du logiciel PrestaTest.

Manuel d'installation de GESLAB Client Lourd

TP1. Outils Java Eléments de correction

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.

BIRT (Business Intelligence and Reporting Tools)

CONTACT EXPRESS 2011 ASPIRATEUR D S

SQL Server Installation Center et SQL Server Management Studio

Tutoriel d installation de Hibernate avec Eclipse

Préparation à l installation d Active Directory

< Atelier 1 /> Démarrer une application web

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

LES NOUVEAUTES DE COST AND PROFITABILITY MANAGEMENT 8.1

Network Shutdown Module V3 Extension du Manuel Utilisateur pour architecture Virtualisée VMWare ESX Server 3, 3.5

JOnAS Day 5.1. Outils de développements

FORMATION PcVue. Mise en œuvre de WEBVUE. Journées de formation au logiciel de supervision PcVue 8.1. Lieu : Lycée Pablo Neruda Saint Martin d hères

Installer Enterprise Miner 5.1 en SAS environnement Windows

Traitement de données

Procédure d'installation complète de Click&Decide sur un serveur

Tutoriel Création d une source Cydia et compilation des packages sous Linux

Google Merchant Center

Installation de Joomla avec Filezilla

ECLIPSE ET PDT (Php development tools)

POVERELLO KASONGO Lucien SIO 2, SISR SITUATION PROFESSIONNELLE OCS INVENTORY NG ET GLPI

Rapport de stage. Création d un site web. Stage du 20/01/2013 au 21/02/2013

Quick Start Installation de MDweb version 2.3

FileMaker Server 14. Guide de démarrage

Créer et partager des fichiers

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse

Application Web et J2EE

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

L accès à distance du serveur

Code Produit Nom Produit Dernière mise à jour. AM003 Alias Mobile On Demand Licence 1 mois 27/04/2015

Déploiement d application Silverlight

Syfadis. > Configuration du poste client. Nous vous aidons à réussir. REFERENCE : Syfadis LMS - 20/06/2007. AUTEUR : Equipe technique Syfadis

Etude de cas : PGE JEE V2

L installation du module Webmail nécessite également quelques prérequis, à savoir :

JOnAS 5. Serveur d application d

1) Installation de Dev-C++ Téléchargez le fichier devcpp4990setup.exe dans un répertoire de votre PC, puis double-cliquez dessus :

IBM DB2 Alphablox. d administration GC

Network Shutdown Module V3 Extension du Manuel Utilisateur pour architecture Virtualisée VMWare ESX Server

TD/TP 1 Introduction au SDK d Android

Sauvegarde des données d affaires de Bell Guide de démarrage. Vous effectuez le travail Nous le sauvegarderons. Automatiquement

La messagerie électronique avec La Poste

Manuel Utilisateur MISE A JOUR DU CLIENT SOFIE VERS LA VERSION 5. v0.99

SAUVEGARDER SES DONNEES PERSONNELLES

Point sur les solutions de développement d apps pour les périphériques mobiles

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

Catalogue des Formations Techniques

les techniques d'extraction, les formulaires et intégration dans un site WEB

Installation / Sauvegarde Restauration / Mise à jour

Network Shutdown Module V3 Extension du Manuel Utilisateur pour architecture Virtualisée Virtual Server de Microsoft

Itium XP. Guide Utilisateur

KAJOUT WASSIM INTERNET INFORMATION SERVICES (IIS) 01/03/2013. Compte-rendu sur ISS KAJOUT Wassim

Service Déposant: Procédure d installation. Page 1. Service déposant. Procédure d installation Version 2.3

Magento. Magento. Réussir son site e-commerce. Réussir son site e-commerce BLANCHARD. Préface de Sébastien L e p e r s

Joomla! Création et administration d'un site web - Version numérique

arcopole Studio Version 3.3

FileMaker Server 14. Aide FileMaker Server

Environnements de Développement

Guide d installation de Gael

Auteur LARDOUX Guillaume Contact Année 2014 DEVELOPPEMENT MOBILE AVEC CORDOVA

Présentation de SOFI 2.0

Système Principal (hôte) 2008 Enterprise x64

Gestion des documents avec ALFRESCO

Chapitre I Notions de base et outils de travail

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

1. La plate-forme LAMP

Installation des outils OCS et GLPI

CQP Développeur Nouvelles Technologies (DNT)

Environnements de développement (intégrés)

MANUEL D INSTALLATION de GEONETWORK sur un serveur LINUX CentOS 4

Mise en œuvre des serveurs d application

Livret 1 Poste de travail de l utilisateur :

WebSpy Analyzer Giga 2.1 Guide de démarrage

Utilisez Toucan portable pour vos sauvegardes

Construction d un Site Internet Dynamique avec Joomla René-Yves Hervé, Ph.D.

Transcription:

1 JAVA IN A FRAMEWORK William Rey (26 novembre 2010)

Table des matières 1 Introduction 5 1.1 À qui s adresse ce livre?........................ 6 1.2 À qui s adresse ce livre?........................ 7 1.3 Comment s organise ce livre?..................... 7 1.4 Pourquoi J2EE-like?.......................... 8 1.5 Le prix à payer............................. 8 1.6 L hébergement............................. 8 1.6.1 NFrance............................. 9 1.6.2 Gandi.............................. 9 1.6.3 Iliad............................... 9 1.7 Règles typographiques......................... 10 1.7.1 Renvois............................. 10 1.7.2 Liens vers Internet....................... 10 1.7.3 Tables & figures........................ 10 2 Créer sa première application 11 2.1 Les pré-requis.............................. 11 2.2 Télécharger le JDK........................... 11 2.3 Télécharger Eclipse........................... 12 2.4 Créer un projet minimaliste....................... 13 2.5 Comment se présente une application WEB?............. 18 2.5.1 Le répertoire WEB-INF.................... 18 2.6 Le fichier /WEB-INF/web.xml..................... 19 2.7 Hello World!.............................. 19 2.7.1 Le serveur (ou conteneur) WEB................ 21 2.7.2 La classe principale....................... 22 2.7.3 Le lanceur............................ 24 2.7.4 Hello world!.......................... 26 3 Les choses sérieuses 28 3.1 Un peu d interactivité.......................... 28 2

TABLE DES MATIÈRES 3 3.2 Sitemesh................................. 30 3.3 Définition d un fichier xwork.xml.................. 32 3.3.1 Créer un raccourci pour les getters/setters........... 32 4 Les actions 34 4.1 Introduction............................... 34 4.2 Références externes........................... 34 4.3 L action de login............................ 35 5 Spring 36 5.1 Les Plain Old Java Objects....................... 36 6 FreeMarker 38 6.1 Syntaxe de base............................. 38 6.2 Création de formulaires......................... 38 7 Hibernate 39 7.1 Les bases de données.......................... 39 7.1.1 MySQL............................. 39 7.1.2 PostgreSQL........................... 40 7.1.3 Derby.............................. 41 7.1.4 HSQL.............................. 41 7.1.5 Oracle.............................. 41 7.1.6 Sybase............................. 41 7.1.7 Microsoft SQL-Server..................... 42 7.2 La gestion des transactions....................... 42 7.2.1 La session............................ 42 7.3 Quelques astuces............................ 42 7.3.1 Les sessions détachées..................... 42 8 Sécurité d un site WEB 44 8.1 Différences entre une application WEB et une application bureautique 44 8.1.1 Accès direct........................... 44 8.1.2 Historique............................ 44 8.2 Saisie manuelle de l URL........................ 45 8.3 Variables contenant du code...................... 45 8.4 Court-circuit des requêtes SQL..................... 45 8.5 Affichage des variables......................... 46 9 Saisir des données 47 9.1 Sécuriser la saisie............................ 47 9.2 Fonctionnement............................. 48

TABLE DES MATIÈRES 4 9.2.1 Déclarer le versionning..................... 48 9.2.2 Saisie.............................. 48 9.2.3 Protection des données..................... 50 9.2.4 Clonage de l objet....................... 50 10 displaytag 54 10.1 Téléchargement............................. 54 10.2 Ajouter displaytag dans Struts..................... 54 11 Générer des images 56 11.1 Créer une interface........................... 56 11.1.1 Le renderer........................... 56 11.1.2 Utilisation............................ 57 12 Logiciels 60 12.1 Microsoft EXCEL............................ 60 12.2 Graphiques............................... 60 12.3 Planificateur............................... 60 12.4 SSH................................... 61 12.5 RLogin................................. 61 13 Le client lourd 62 14 Annexes 63 14.1 Les des logiciels téléchargés...................... 63

Chapitre 1 Introduction Le développement de sites WEB a pris de plus en plus d importance dans le monde informatique (aussi bien au niveau individuel qu au niveau de l entreprise). Il existe différents moyens de créer un site : tout dépend de sa finalité. Depuis quelques années, la création de simples pages WEB a disparu. De plus en plus sont apparus des langages permettant à des sites WEB de prendre vie, le plus souvent cette vie provient de la présence d une base de données, plus récemment des capacités interactives de certaines pages. Ainsi, les sites WEB, avant tout informatifs, sont devenus au fil des années des applications complètes et souvent complexes. Bien entendu, des outils ont fait leur apparition. Nombre d entre eux ont disparu mais, comme toujours, un petit nombre a su s imposer. On peut considérer aujourd hui trois familles (souvent assimilés à des langages) : PHP,.NET et JAVA. Les solutions en PHP présentent plusieurs avantages sérieux : la simplicité ; ses nombreuses capacités ; le prix de l hébergement ; un langage adapté (et créé) pour le WEB ; disponibilité (il est souvent inutile d arrêter le serveur lors des mises à jour) ; faible utilisation CPU ; la rapidité de développement. Allié avec le serveur Apache & la base de données MySQL, PHP se révèle un langage puissant pour développer des sites WEB. Cependant, la langage PHP peut présenter des limites dans des environnements professionnels qui imposent des normes strictes en matière de sécurité ou, le plus souvent, de compatibilité avec le système d information existant. C est pourquoi des solutions élaborées à partir de JAVA ou.net on leur place dans la mise en place d Intranet (site WEB institutionnel uniquement accessible à partir de l intérieur de l entreprise) ou d Extranet (site institutionnel accessible de l extérieur tel que la consultation de vos comptes bancaires). Même si ce livre est consacré au développement en Java EE, il est intéressant de choisir la bonne solution technique. Entre.NET et JAVA, on fera surtout attention à l environnement du système d information. Si celui-ci est fortement lié à l environnement Microsoft (au moins au niveau des serveurs), il sera peut-être plus judicieux de 5

CHAPITRE 1. INTRODUCTION 6 sélectionner la solution propriétaire (celle de Microsoft). Il est aussi intéressant de s interroger sur l utilisation d une technologie WEB. Dans certains cas, le développement d une solution propriétaire avec un client lourd (c est à dire une application déployée sur chaque ordinateur) peut être une solution plus raisonnable. À la fin de ce livre, au chapitre 13, vous pourrez apprécier la possibilité d offrir des interfaces utilisateurs (GUI) différentes avec un minimum de programmation supplémentaire. Développer en JAVA une application WEB peut se faire de plusieurs façons. Dans ce livre, nous abordons l utilisation d un framework permettant de standardiser (un peu) le code de l application entre les différents développeurs. Il existe plusieurs frameworks de développement, nous avons choisi d aborder uniquement le trio formé par Spring, Struts 2 et FreeMarker. Auquels peuvent s ajouter de nombreux autres solutions comme Hibernate que nous aborderons de façon assez complète dans les chapitres de ce livre. De même, nous aborderons le développement d une application WEB avec un simple conteneur WEB (tel que Tomcat), indépendemment de tout serveur d application (tel que JBoss ou WebShere). Une fois l application en fonction, vous verrez ce que le passage à un serveur d application peut vous apporter et la simplicité pour le faire. 1.1 À qui s adresse ce livre? Il s adresse à tout ceux qui connaissent déjà le langage JAVA de base (collections, sockets, threads, I/O, etc.) et désireux de créer un site WEB ou plus exactement des applications WEB facilement interfaçables avec leur base de données. Le trio Spring, Struts 2, FreeMarker permet de créer des solutions basées sur une conception multi-couches ou n-tier. Dans notre case, il s agit d un modèle 3-tier comprenant : 1. le GUI : c est typiquement le traitement des informations circulant entre le navigateur et les premières couches de votre application : la vue (view) et le contrôleur (controller). 2. le business : la couche métier ou si on préfère le modèle dans le sens MVC (Model-View-Controller). C est cette couche qui gére réellement toutes les règles métiers. 3. les données : typiquement la base de donnés et l accés à celle-ci qui est assuré par les DAO (Data Access Objects) via des interfaces, des injections de code et le mapping objet des tables (nous verrons cela en détail dans le chapitre consacré à Hibernate, page 39. Au delà, la structure rigide des développements permet de garantir une certaine facilité de maintenance contrairement aux sites développés à partir d outils qui mélangent accées aux données et affichage.

CHAPITRE 1. INTRODUCTION 7 1.2 À qui s adresse ce livre? Ce tutoriel s adresse avant tout aux techniciens, ou plus exactement aux programmeurs qui doivent développer une application WEB sous JAVA. Pour cela, les connaissances suivantes sont pré-requises : JAVA : vous devez connaître la programmation en JAVA et tout particulièrement les nouveautés syntaxiques de la version 5 (à savoir les boucles de type «foreach» qui remplacent efficacement l utilisation d un objet Iterator ainsi que les templates). Une bonne connaissance des collections (List, Map, Set et leur implémentation sous forme de classes) est nécessaire. De même, la connaissance des annotations (uniquement leur utilisation) est nécessaire. WEB : le protocole HTTP est considéré comme connu au moins superficiellement (nous ne rentrerons pas dans les détails, en revanche, on parlera fréquemment de requêtes et de sessions). HTML : le langage HTML de description de page que nous utiliserons est relativement simple. Une connaissances des balises classiques (<head>, <title>, <body>, <img>, <b>) est suffisante. CSS (Cascading Style Sheet) : la connaissance de la syntaxe des cascading style sheet est un plus mais nous fournirons tous les fichiers nécessaires. Ces fichiers se limite à gérer la mise en page des pages WEB. SQL (Structured Query Language) : la connaissance de SQL est nécessaire dans le sens où vous devrez créer des requêtes et éventuellement créer votre base de données. Cependant, l utilisation d Hibernate utilisant son propre langage de requêtes (HQL : Hibernate Query Language), aucune connaissance approfondie n est nécessaire. Les connaissances nécessaires peuvent paraître importantes mais cet ouvrage n est en aucun cas un cours de programmation : il s adresse avant tout à des personnes ayant une compétence suffisante dans les langages de programmation. En ce qui concerne JAVA, je ne peux que vous conseiller les tutoriels proposés par la société Sun Microsystems elle-même sur son site WEB (http://java.sun.com/). Il sont complets et vous permettront de comprendre rapidement les enjeux de la nouvelle syntaxe introduite dans la version 5 du compilateur. 1.3 Comment s organise ce livre? Ce livre présente une solution pour gérer sa médiathèque à travers une interface WEB : le projet KOMPIL7. La création d un site de référencement musical permet d expliquer pas à pas la construction d une application WEB dynamique. L intérêt d une application telle que celle proposée est de permettre de répondre à tous les besoins à travers un exemple fonctionnel.

CHAPITRE 1. INTRODUCTION 8 1.4 Pourquoi J2EE-like? JEE (ou J2EE) est une norme et un ensemble d outils et de normes. Cette norme nécessite deux briques principales : un conteneur Web (tel que Tomcat pour ne citer que le plus connu) et un serveur d application (WebLogic, JBoss, etc...) Le serveur d application concentre plusieurs technologies extrêmement intéressantes telles que : JDNI (Java Directory Naming Interface) : un système permettant de repérer des services tels que l accès à la base de données et d autres informations qui permettent de ne pas exposer les données de connexion (tels que le nom de la base de donnée, le mot de passe, etc.) Cette technologie permet de créer des configurations de tests et des configurations de production sans rien toucher au logiciel final. JTA (Java Transaction API) : une API permettant de synchroniser plusieurs serveurs (généralement un serveur de base de données et un serveur de messages tels que MQSeries) et de gérer les transactions de façon transparente (uniquement à travers des déclarations en XML). JPA (Java Persistence API) : une API de persistance standard qui permet de déclarer sous forme de classe les entités de la base de données. L utilisation du framework Spring permet de se passer d un serveur J2EE. Nous allons voir comment. 1.5 Le prix à payer Quelques efforts et un peu de sueur. La création d un site WEB via les outils MVC n est pas excessivement facile et requiert un certain niveau en programmation. En revanche, tous les logiciels utilisés sont gratuits. Dans tous les cas, que vous travailliez sous Windows, UNIX (cela inclut bien évidemment Linux) ou MAC OS, vous pourrez effectuer vos développements et tester les résultats grâce à une technologie entièrement JAVA 1. C est la garantie de pouvoir faire tourner votre application partout et, éventuellement, en cluster. 1.6 L hébergement Une fois votre application terminée, il faut la rendre disponible. À moins qu il ne s agisse d une application d entreprise hébergée par votre équipe informatique, il faudra la mettre sur la toile. Pour cela, il vous faut trouver un hébergeur. Les hébergeurs classiques proposent pour la plupart des hébergements pour LAMP (PHP, MySQL et Apache). Ce qui ne correspond pas à nos besoins. Jusqu à récemment, il fallait opter pour un hébergement dédié. Mais, à présent, grâce à la virtualisation des serveurs sous Linux, il est possible de trouver des hébergements permettant d abriter des serveurs de type J2EE 2 pour un prix relativement 1. Dans certains cas, certaines briques logicielles comme Eclipse utilisent des routines natives, il en va de même si vous optez pour une solution utilisant le serveur HTTP Apache. 2. ou simplement des conteneurs WEB tels que Tomcat ; en effet, nous verrons dans ce livre que la création d un site WEB en JAVA ne nécessite pas nécessairement d avoir recours à un serveur d application tel que WebSphere, JBoss ou JOnAS.

CHAPITRE 1. INTRODUCTION 9 correct. Ci-dessous, trois offres qui permettent l installation d une application serveur écrite en JAVA. La liste est loin d être exhaustive puisque de plus en plus d hébergeurs (en France comme à l étranger) propose la location des machines pré-configurées soit partagées (ou mutalisées, si vous préférez), soit dédiées. Les offres ci-dessous sont donc purement indicatives, ne concerne que des hébergeurs français et n engage pas l auteur de ce livre. L intérêt est de donner une idée du prix de l hébergement d un site en JAVA (à partir d environ 15 e par mois). 1.6.1 NFrance Située à Toulouse, cette société offre la location de serveurs UNIX grâce à la technologie de virtualisation qui permet d acquérir tout ou partie de la puissance d une machine (tant en terme de CPU qu en terme d espace disque). Leur offre s articule autour des solutions VDS (il s agit d un terme commercial, la technologie sous-jacente est la virtualisation proposée par http://linux-vserver.org/). Elle propose également des hébergements dédiés aux sites sous JAVA avec un serveur TOMCAT. Il s agit d une solution spécifique, toujours basées sur leur solutions VDS. Pour moins de 80 eh.t. par mois, vous pouvez accéder à un hébergement comprenant 80 Go de disque dur, 1 serveur SMTP, mysql, etc. Leur site web : http://www.nfrance.com/ 1.6.2 Gandi Gandi propose également des solutions de location CPU et disque dur. À partir d environ 15 eh.t. par mois, vous pouvez héberger un site conçu en JAVA. L intérêt de leur offre est sans doute l achat de CPU et de disque dur à la demande et sur des périodes plus ou moins longues. Leur site web : http://www.gandi.net/ 1.6.3 Iliad Iliad (via sa filière Dedibox) propose des machines sous Linux à partir de 30 eh.t. par mois. Cette solution donne droit à un microprocesseur Celeron, 2 Go de mémoire vive et 160 Go de disque dur. C est une solution digne d intérêt pour des applications JAVA qui peuvent rapidement consommer beaucoup de mémoire et attirante par la capacité du disque dur proposé. Cependant, il s agit d une simple machine hébergée sans sauvegarde. Il est de votre responsabilité de sauvegarder vos données d une manière ou d une autre (généralement sur votre machine locale). De plus, une machine de type Celeron n est pas une bête de compétition.

CHAPITRE 1. INTRODUCTION 10 1.7 Règles typographiques Les règles typographiques employées dans ce livre sont standards. 1.7.1 Renvois Les renvois permettent de référencer une section, un chapitre ou une figure dans ce livre. Ainsi, une référence à cette section sera notée : voir section 1.7.1. Le numéro de page n est généralement pas indiqué. 1.7.2 Liens vers Internet Fréquemment, nous vous renverrons vers les documentations originales, vers des logiciels ou vers des librairies. Pour cela, nous vous donnerons l adresse de la page WEB à taper dans votre navigateur. Cette adresse commencera toujours par http: ou ftp:. En revanche, la fonte utilisée reste identique à celle du texte. Par exemple : http://www.google.fr/ vous renverra sur la page d accueil du moteur de recherche Google. 1.7.3 Tables & figures Les illustrations sont insérées sous forme flottante, ainsi les copies d écrans et les autres éléments graphiques peuvent se trouver dans les pages suivantes et même parfois sur une page dédiée.

Chapitre 2 Créer sa première application 2.1 Les pré-requis Pour créer votre application, vous devez installer sur votre machine le minimum vital pour développer. Vous devez tout d abord installer une version récente du SDK de JAVA ainsi qu un conteneur WEB (ici, il s agira de Jetty mais vous pouvez également utiliser Tomcat) et bien entendu l outil de développement Eclipse. Tous ces logiciels proviennent du monde libre et sont téléchargeables sur Internet. Il est également nécessaire de télécharger différentes librairies formant la base de votre application. Merci de vous référencer au tableau 14.1 pour la liste des composants et la version utilisée dans ce tutoriel (bien entendu, vous pouvez télécharger des versions plus récentes). Sous Windows, nous utiliserons le répertoire C:\tools pour y installer tous nos outils ainsi que notre environnement de développement. Sous unix, on privilégiera le répertoire ~/tools. Ce répertoire sera référencé par la variable $ROOT. Sous Windows, la variable s écrit %ROOT% si celle-ci a été déclarée dans un fichier batch (ayant l extension.bat ou.cmd). Dans tous les cas, évitez absolument d avoir des répertoires contenant des espaces. En effet, l utilisation d espaces dans le nom des répertoires (habitude fréquemment observée sous Windows) pose des problèmes de nommage des fichiers lors du passage des paramètres en ligne de commande. Nous vous conseillons de stocker vos téléchargements dans le répertoire $ROOT/download. Il sera noté $DOWNLOADS. 2.2 Télécharger le JDK Le site officiel de JAVA est à l adresse http://java.sun.com/. Vous y trouverez un menu pour télécharger la dernière version de JAVA. Pour ce tutoriel, vous devez utiliser 11

CHAPITRE 2. CRÉER SA PREMIÈRE APPLICATION 12 la version 5 1 ou supérieure (les versions 1.4 et inférieures ne sont pas compatible avec le développement MVC). Vous devez impérativement charger une version contenant le SDK (pas uniquement la version runtime souvent appelée JRE pour Java Runtime Environment). Une fois le SDK installé, vous allez pouvoir installer l outil de développement. Le répertoire d installation préconisé pour le SDK est $ROOT/jdk5. Nous le noterons $JAVA_HOME. Le répertoire $JAVA_HOME a un sens puisqu il est utilisé nativement pour repérer le répertoire de base de l installation de JAVA. 2.3 Télécharger Eclipse Eclipse est une IDE (Integrated Development Environment) qui permet de programmer rapidement en JAVA. Cet outil est hébergé à l adresse http://www.eclipse.org/. Vous pouvez télécharger Eclipse SDK version 3.4 ou supérieur. La figure 2.1 vous montre le site WEB (suceptible de changer). Il faut impérativement télécharger la version permettant la création de sites JEE. Cela permet de simplifier considérablement les soucis de configuration lors de la création du projet. La page de téléchargement est capable de déterminer quel système d exploitation vous utilisez (Windows, LINUX ou MAC OS). Le téléchargement peut être assez long (> 150 Mo). FIGURE 2.1 Site de téléchargement Une fois le fichier téléchargé, vous obtenez un fichier.zip (tout au moins sous Windows). Vous devez donc le décompresser dans un répertoire (je vous conseille 1. Les versions de JAVA étaient numérotées 1.1 jusqu à 1.4 ; ensuite Sun a laissé tombé le 1.x en nommant ces dernières versions JAVA 5 et JAVA 6

CHAPITRE 2. CRÉER SA PREMIÈRE APPLICATION 13 $ROOT/eclipse). Pour ce faire, vous devez un utilitaire de décompression compatible ZIP. Sous Windows(XP ou supérieur), la compression ZIP est directement prise en charge magré cela, de nombreux utiliateurs utilisent WinZIP, 7ZIP ou d autres programmes équivalent. Une fois le fichier décompressé, Eclipse est prêt à être utilisé. Il suffit de créer un raccourci sur l exécutable (et le placer sur le bureau pour ceux qui travaillent sous Windows). Une fois installé et l icône copiée sur le bureau, double cliquez dessus pour démarrer Eclipse. Celui-ci est généralement un peu long à démarrer à cause du chargement de ses informations internes (plug-ins). Une fois démarré, vous pouvez le configurer un peu (nous verrons cela plus tard). 2.4 Créer un projet minimaliste Pour cela, ouvrez Eclipse, puis créez votre nouveau projet comme l indique la figure 2.2. Il s agit bien d un nouveau projet que vous stockerez dans l espace de travail par défaut de Eclipse ($workspace_loc). Dans Eclipse, le répertoire de travail (le «workspace») est une notion très importante : il détermine la racine de votre environnement de travail JAVA. Bien que certaines ressources puissent être déclarées à l extérieur du workspace (comme par exemple le code source des librairies utilisées par votre application ou leur documentation), il est préférable d utiliser le workspace comme répertoire de travail. FIGURE 2.2 Créer un nouveau projet (1 ere partie)

CHAPITRE 2. CRÉER SA PREMIÈRE APPLICATION 14 Le deuxième écran de création (figure 2.3) permet de spécifier le nom du projet. Ici, nous avons choisi le nom «Kompil7» en hommage à un ancien programme écrit en 1991 fonctionnant sous MS/DOS. Le «Project contents» permet de spécifier un répertoire en dehors du workspace ce que je déconseille. Le répertoire où seront stockés les fichiers du projet sera donc $workspace_loc/kompil7. Notez l importance de préciser le nom du projet en lettres minuscules afin d éviter les problèmes de casse (minuscule/majuscule) pour les utilisateurs LINUX. Le «Target Runtime» est laissé vide. En effet, même si on peut créer des cibles en terme d installation (typiquement installer son développement sur Tomcat) ce qui peut simplifier la mise en place du projet, nous avons préféré conserver la méthode manuelle pour entrer dans le détail des opérations nécessaires au bon fonctionnement d une application WEB. La version du modèle Web dynamique peut être conservé en 2.4 (cela n a pas d impact majeur sur nos développements). FIGURE 2.3 Créer un nouveau projet (2 e partie) Il est temps de configurer le «Web Module». Laissez les informations déterminées par Eclipse (voir section 2.4). Pour information, les données décrivant les pages WEB (le code HTML et CSS) seront stockés dans le répertoire WebContent tandis que le code source JAVA sera stocké dans le répertoire src. Cette séparation entre les classes JAVA et les pages est importante : en effet, on

CHAPITRE 2. CRÉER SA PREMIÈRE APPLICATION 15 FIGURE 2.4 Définition des répertoires peut considérer que la partie «présentation» est stockée uniquement dans la partie WebContent tandis que les «composants métier» sont dans la partie src (ainsi que l accés aux données de la base et la partie controller). Dans la partie gauche de l écran (voir figure 2.5) apparaît les différentes parties de notre projet. La perspective Java EE 2 permet de visualiser l ensemble des informations utiles à votre projet. Deployment descriptor : Kompil7 cette partie décrit le contenu du fichier web.xml de votre projet. C est ce fichier (que nous verrons en détail section 2.6) qui explicite votre projet au conteneur WEB. Java Resources : src contient le code JAVA de votre application : les packages et toutes le code source des classes. La partie «Libraries» permet de stocker les librairies (fichiers.jar) utiles à votre application. Elle est divisée en trois sous-catégories : EAR Libraries les libraries utilisées par le serveur d application (dans notre cas, il n y en aura aucune). JRE System Library la librairie système (c est à dire JRE 1.5 : le Java Runtime Environment de JAVA 5.0) ; cette librairie est directement gérée par Eclipse. Web App Libraries c est dans cette section que l on ajoutera toutes les librairies (.jar) nécessaires à votre application (entre autres : Spring, Struts, Hibernate, etc.) ; comme vous le découvrirez rapidement, cette partie peut 2. La perspective est une notion clé du logiciel Eclipse. Chaque perspective permet d afficher les informations pertinentes avec des «vues» différentes adaptées au travail en cours : développement JAVA classique, développement WEB, débuggage de l application, etc.

CHAPITRE 2. CRÉER SA PREMIÈRE APPLICATION 16 FIGURE 2.5 Détail d un projet WEB vide contenir énormément de librairies du fait que la création d une application WEB est avant tout une démarche «assembliste» 3. build la partie construite de l application. Eclipse y ajoutera tout les classes de votre application. De notre côté, nous y ajouterons les librairies nécessaires au conteneur WEB. WebContent la partie web de l application contenant également un répertoire WEB-INF indispensable à une application WEB (nous en verrons les détails dans le chapitre suivant). En revanche, le répertoire META-INF utile pour décrire une application JAVA et, éventuellement, la classe contenant la méthode main n a pas réellement de justification dans une application JAVA 4. JavaScript Support cette partie peut-être ignorée pour l instant. Il est important de vérifier la partie «Java Compiler». Votre version de SDK JAVA doit être 5 ou supérieure. À partir la figure 2.5, faites un clic droit de souris sur le nom du projet, et sélectionnez Properties. Vous devez voir une fenêtre ressemblant à celle de la figure 2.6. Il est important de vérifier la compatibilité de votre compilateur JAVA. Une version 1.5 ou supérieure est nécessaire. En fait, les numérotations des versions du JDK sont brusquement passées de 1.4 à 5.0! Malgré cela, les versions continuent à apparaître comme 1.5 ou 1.6 dans certaines parties d Eclipse. 3. En opposition à la programmation pure qui consiste à écrire un maximum de code à partir d un ensemble minimum de librairies 4. à moins d embarquer un conteneur WEB afin d avoir une application JAVA totalement indépendante et pouvant être lancée sur un poste client à l instar d une application de type client, nous aborderons le sujet avec l utilisation de Jetty comme conteneur WEB.

CHAPITRE 2. CRÉER SA PREMIÈRE APPLICATION 17 FIGURE 2.6 Propriétés de compilation

CHAPITRE 2. CRÉER SA PREMIÈRE APPLICATION 18 2.5 Comment se présente une application WEB? Une application WEB a des contraintes d organisation. Par définition, une application WEB est stocké dans un fichier archive dont l extension est.war (pour Web ARchive 5 ou, éventuellement,.ear (pour Entreprise ARchive dans le cas d une application liée à un serveur d application J2EE comme JBoss, WebSphere, etc.). Dans ce fichier d archive, on retrouvera les répertoires suivants : la racine : elle va contenir toutes les pages WEB de votre application (.html,.jsp,.ftp, etc.) ainsi que les feuilles de styles et touts les fichiers images. Bien entendu, des sous-répertoires peuvent être créé afin de faciliter le rangement et l accès aux données. Par définition, tous ces fichiers sont accessible via une URL. META-INF est un répertoire réservé pour stocker des informations relatives à votre artchive. Il est facultatif. WEB-INF ce répertoire est indispensable et doit être écrit en majuscules impérativement (le langage JAVA est sensible à la casse). Il contient des données vitales pour votre application est il est «protégé»(c est à dire que les fichiers ne sont pas accessibles à l utilisateur). 2.5.1 Le répertoire WEB-INF Sun Microsystems a indiqué plusieurs règles pour créer des applications WEB. L une d entre elle (et la principale) définit l existence d un répertoire WEB-INF à la racine du fichier.war. Pour information, le fichier.war est un fichier compressé comprenant tous les fichiers de votre application (c est à dire les classes compilées ainsi que les autres fichiers). Un fichier.war est en tout point identique à un fichier.jar (Java ARchive) mais, par définition, son utilisation est réservée aux applications WEB. Le répertoire WEB-INF est extrêmement standardisé, il doit comporter un fichier web.xml qui va définir votre application et qui va être interprété par le conteneur WEB 6 (c est à dire, la plupart du temps, Tomcat). Dans ce répertoire /WEB-INF, vous trouverez également le sous-répertoire lib destiné à stocker les librairies utilisées par l application (elles sont généralement assez nombreuses). Là encore, le nom lib est imposé. Les librairies se trouvant dans le répertoire /WEB-INF/lib seront automatiquement disponibles (il n est pas utile, contrairement à une application JAVA classiques d intégrer toutes les librariries dans le CLASSPATH). Un deuxième sous-répertoire imposé est classes qui va contenir toutes les classes JAVA de votre application (extension.class). Ce répertoire /WEB-INF/ classes est sous-divisé en sous-répertoires correspondants aux paquets (packages) JAVA. Ce répertoire est alimenté par la compilation de votre code source et par les fichiers ressources se trouvant dans la partie Java Resources : src de votre environnement de travail. 5. C est le même principe d appelation que pour les fichiers JAR (Java ARchive). 6. en anglais, le terme employé est web container.

CHAPITRE 2. CRÉER SA PREMIÈRE APPLICATION 19 2.6 Le fichier /WEB-INF/web.xml Le fichier web.xml est stocké dans le répertoire /WEB-INF impérativement. C est ce fichier qui sera recherché par le conteneur WEB qui démarre votre application. Il s agit d un fichier XML dont la structure a été dictée par Sun Microsystems. La figure 2.9 vous montre la structure d un fichier web.xml vide (il a déjà été créé par Eclipse). Les figures 2.7 et 2.8 permettent d avoir une vision pure (le format source du fichier) ou une vision en arbre (ce qui est la vision normale d un fichier XML puisque celui-ci décrit avant tout des structures hiérarchiques). FIGURE 2.7 Fichier web.xml dans Eclipse (source) Un fichier web.xml vide ressemble à peu prés à celui de la figure 2.9. C est ce fichier que nous allons enrichir (en même temps que le répertoire contenant les librairies afin de donner à l application différentes fonctionnalité (en particulier son framework MVC). C est en effet dans ce fichier que vous allez définir les servlet à utiliser et comment les utiliser (la version 2.4 des applications WEB préfèrent parler de filtres et de listeners 7 ). On y voit également la liste des fichiers à utiliser par défaut dans les URL indiquant des répertoires (nous verrons cela plus loin). Notez que l ordre est très important dans un fichier web.xml. En effet, le nonrespect de la DTD (Document Type Definition) va empêcher votre application de démarrer. 2.7 Hello World! La première application est toujours celle qui affiche «Hello World!». Tel un nouveau né sortant de son œuf. Qu à cela ne tienne, nous allons créer la première des 7. le terme français d écouteur n est pas très beau, j ai préféré gardé dans ce livre le terme anglais)

CHAPITRE 2. CRÉER SA PREMIÈRE APPLICATION 20 FIGURE 2.8 Fichier web.xml dans Eclipse (conception) 1 <?xml version="1.0" encoding="utf-8"?> <web-app id="kompil7" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" 6 xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>kompil7</display-name> </web-app> FIGURE 2.9 Fichier web.xml vide

CHAPITRE 2. CRÉER SA PREMIÈRE APPLICATION 21 applications. 2.7.1 Le serveur (ou conteneur) WEB Pour cela, il nous manque tout d abord le conteneur. C est l élément principal : celui qui va piloter l application. Le conteneur WEB est chargé de prendre en charge les requêtes HTTP ainsi que l envoi de la réponse au client. Il se charge de gérer le protocole HTTP et se contente de déléguer le travail d analyse et d affichage à des servlets. Ce sont des classes qui prennent en compte la requête. Certains servlets peuvent être empilés pour effectuer une gestion complète de la requête de l utilisateur 8. Il existe plusieurs conteneurs mais ils répondent aux mêmes exigences : celles fixées par Sun Microsystems. Vous pouvez donc très bien utiliser un conteneur différent entre les environnements de tests et celui de production. Ainsi, nous vous proposons d utiliser Jetty comme conteneur pour le développement de notre application. Celuici est léger et a été packagé dans des libraries JAVA ce qui nous permet de tester notre application WEB comme une application JAVA standard. Plus tard, pour la mise en production, nous envisagerons d utiliser Tomcat. Vous verrez que votre développement ne nécessite aucune modification. Le téléchargement de Jetty peut se faire sur le site de l application (http://www.mortbay.org/jetty/). Une fois le fichier jetty-6.1.11.zip téléchargé, ouvrez-le. Vous y trouverez 3 fichiers indispensables dans le répertoire jetty-6.1.11/lib : jetty-6.1.11.jar, jetty-util-6.1.11.jar et servlet-api-2.5-6.1.11.jar (comme vous pouvez le voir dans la figure 2.10). Normalement, vous devriez pouvoir glisser et déplacer (avec la souris) ces 3 fichiers vers Eclipse dans le répertoire build. Si ce n est pas possible, copier les trois fichiers dans le répertoire /kompil7/build dans le workspace d Eclipse (${workspace_loc}) ; dans ce cas, il faudra rafraîchir le workspace (clic droit sur le projet, puis choisir Refresh (la touche F5 peut également être utilisée). FIGURE 2.10 Librairies indispensables 8. C est notamment le cas, comme vous le verrez plus loin, du servlet Sitemesh qui vient en fin de chaîne pour «décorer»la page WEB générée.

CHAPITRE 2. CRÉER SA PREMIÈRE APPLICATION 22 On y est presque... Il nous faut maintenant expliquer à Eclipse que ces trois librairies doivent être prises en compte. Rien de plus facile, pour cela, choisissez dans le menu Project > Properties. La figure 2.11 vous montre comment intégrer ces 3 libraries dans le chemin d exécution d Eclipse (le CLASSPATH de JAVA). Cette inclusion est nécessaire mais elle ne doit pas se faire dans le répertoire /WEB-INF/lib car ces librairies appartiennent au conteneur et non à l application elle-même. En effet, Dans le cas de Tomcat (par exemple), il est inutile d intégrer ces librairies, c est pourquoi, il faut considérer ces libraries comme «Librairies» et non comme «Web App Libraries». FIGURE 2.11 Inclusion des librairies 2.7.2 La classe principale Puisque maintenant le conteneur Jetty est maintenant disponible, il faut écrire la classe principale (c est à dire une classe qui contient une méthode main). C est le principe de Jetty. Plutôt que d avoir un service (c est le cas avec Tomcat), on aura une simple application JAVA ce qui va alléger le lancement de votre application WEB et évitera dans certains cas l arrêt et la relance du serveur. Nous allons créer pour cela le paquet «jetty» qui va contenir la classe nécessaire au démarrage de votre application WEB. Bien entendu, nous aurions pu choisir d utiliser un fichier XML plutôt qu une classe JAVA mais la présence d une classe n est pas une mauvaise idée car cela va éventuellement nous permettre de lancer efficacement notre

CHAPITRE 2. CRÉER SA PREMIÈRE APPLICATION 23 application. Le fichier Run.java doit étre créé. Celui-ci va contenir le démarreur de votre application. Celui va être assez simple. Pour créer une classe dans Eclipse, rien de plus simple, choisissez File > New > Other... puis dans la liste, Java > Class. Cliquez sur le bouton Next >. la figure 2.12 vous montre les caractéristiques de la classe JAVA à créer. FIGURE 2.12 Classe Run Une fois créée, il suffit d ajouter les imports nécessaires (Eclipse s en occupera tout seul si vous demandez la completion du nom des classes lors de la saisie). La figure 2.13 vous montre les imports à ajouter. Attention, ces classes sont spécifiques au serveur Jetty 6 (la compatibilité avec Jetty version 7 n est pas garantie). import org.mortbay.jetty.server; import org.mortbay.jetty.webapp.webappcontext; FIGURE 2.13 Import des classes du conteneur Encore un petit effort, la méthode main de la classe jetty.run doit ressembler à la figure 2.14. Aux lignes 2 & 3, on définit un serveur qui écoutera sur le port 8041 (à priori n importe quel port d écoute disponible fait l affaire, y compris le port 80 qui est le port d écoute par défaut des serveurs WEB).

CHAPITRE 2. CRÉER SA PREMIÈRE APPLICATION 24 public static void main(string[] args) throws Exception { int listeningport = 8041; 3 Server server = new Server( listeningport ); WebAppContext webapp = new WebAppContext(); webapp.setwar( "./WebContent" ); webapp.setextraclasspath("./build/classes/"); 8 webapp.setcontextpath("/kompil7"); } server.addhandler(webapp); server.start(); FIGURE 2.14 Méthode main() de la classe Run Une fois le serveur créé, il faut créer un contexte pour l application WEB (en fait, un conteneur peut héberger plusieurs applications WEB, dans notre exemple, on se contentera d une seule application). Ce sont les lignes 5 à 8 qui définissent l application WEB : setwar va définir le répertoire de base de votre application : celle où se trouve les pages WEB du site et plus exactement le nom du répertoire contenant WEB-INF. Étant donné les répertories créés par Eclipse, il s agit du répertoire WebContent se trouvant dans le workspace. setextraclasspath permet d ajouter un chemin supplémentaire (un seul possible). Cette option est indispensable car Eclipse n ajoute pas nos classes dans WEB-INF/classes mais dans build/classes. Notez le / final obligatoire. setcontextpath permet de fixer le contexte d exécution de votre application. Par défaut, il s agit de / (le répertoire de base de votre serveur) mais vous pouvez modifier cela avec cette méthode. Ainsi, notre serveur sera à l adresse http://localhost:8041/kompil7/ 2.7.3 Le lanceur Une fois le conteneur en place et le fichier de lancement en place, il suffit de créer un lanceur (c est à dire un appel à la classe principale, caractérisée par la méthode main). La figure 2.15 vous montre les différents paramètres mais, par définition, la création d un nouvelle configuration de déboguage via le menu Run > Debug Configurations... est totalement automatique. Pour cela, vous devez simplement cliquer sur la classe Run.java dans le Project Exporer. Une fois le lanceur créé, vous pouvez le lancer directement en cliquant sur le bouton Debug. Si tout ce passe bien, quelques messages d erreurs (c est à dire affichés en rouge) doivent apparaître dans la console comme le montre la figure 2.14. Notez que le début de la ligne n est pas significatif (il s agit de la date et de l heure). Les différents messages indiquent : 1. les logs sont envoyés vers la sortie standard (stderr) ; 2. la version du conteneur Jetty (6.1.11) ; 3. que le support des pages JSP n est pas actif (nous verrons cela au chapitre suivant) ; 4. que le serveur a bien démarré en écoute sur le port 8041.

CHAPITRE 2. CRÉER SA PREMIÈRE APPLICATION 25 FIGURE 2.15 Créer le lanceur 2008-09-15 23:58:39.483::INFO: Logging to STDERR via org.mortbay.log.stderrlog 2008-09-15 23:58:40.686::INFO: jetty-6.1.11 2008-09-15 23:58:40.249::INFO: NO JSP Support for /kompil7, did not find org.a 2008-09-15 23:58:40.624::INFO: Started SocketConnector@0.0.0.0:8041 FIGURE 2.16 Messages du serveur Jetty

CHAPITRE 2. CRÉER SA PREMIÈRE APPLICATION 26 Sur ces bonnes nouvelles, il suffit de tester si tout fonctionne bien en tentant dans un navigateur quelconque de se connecter à l URL http://localhost:8041/kompil7/ 9 À ce moment là, devrait s afficher la liste des répertoires existants à savoir : META-INF/ et WEB-INF/ ainsi que leur caractéristiques (taille et date de dernière mise à jour). En effet, si aucun fichier par défaut n existe, Jetty va se comporter comme le serveur Apache (et la quasi-totalité des serveurs WEB) en affichant la liste des fichiers du répertoire. 2.7.4 Hello world! <head> <title>homepage</title> 3 </head> <body> <h1>hello World!</h1> </body> FIGURE 2.17 Le fichier index.html Qu à cela ne tienne, nous y sommes presque. Il suffit de créer un fichier HTML index.html dans le répertoire WebContent. Pour cela, nous allons rester très sobre comme le montre la figure 2.17. Si tout c est bien passé, la partie Project Explorer d Eclipse doit ressembler à la figure 2.18. Pour vérifier que tout se passe bien et que le fichier index.html est pris en compte, rafraîchissez la page WEB dans votre navigateur et le message «Hello World!» doit s afficher (en gros caractères). Nous avons donc réussi (remarquez au passage que nous n avons pas redémarré le serveur et que la prise en compte de notre page WEB a été immédiate). Fier de ce premier succés, nous allons aborder à présent les choses sérieuses en améliorant notre application. Les fichiers qui composent ce chapitre sont disponibles à l adresse http://wrey.free. fr/articles/j2ee/files/kompil7-chap2.zip sous la forme d un fichier ZIP. 9. Votre machine est toujours nommée localhost, c est une règle. Vous pourriez très bien utiliser l IP 127.0.0.1 ou votre adresse IP 192.168.x.y si vous être sur un réseau local derrière un routeur ce qui typiquement le cas des personnes ayant une boîte ADSL.

CHAPITRE 2. CRÉER SA PREMIÈRE APPLICATION 27 FIGURE 2.18 Explorateur du projet pour Hello World!

Chapitre 3 Les choses sérieuses 3.1 Un peu d interactivité Jusque là, nous avons créé une application qui ne distingue guère d un site WEB fait avec des pages WEB statiques. Cela signifie que nous avons dépensé beaucoup d énergie pour pas grand chose. Donc, nous allons rendre notre fichier de bienvenue un peu plus interactif. Pour cela, nous allons renommer le fichier /index.html en /index.jsp (pour renommer un fichier, allez dans l explorateur d Eclipse, vous sélectionnez le fichier et vous tapez sur la touche F2 qui est le raccourci normal pour renommer le fichier). Une fois cette opération effectuée, nous allons recharger la page http://localhost:8041/kompil7/. Sur la console (dans Eclipse), vous devriez obtenir une erreur 500 : JSP support not configured avec comme URI : /kompil7/index.jsp. Tout cela parce que le support des pages JSP n est pas installé. Dans Jetty, le support des pages JSP est assurée par les librairies Apache (celle contenant la classe org.apache.jasper). Vous devez récupérer dans l archive de Jetty (précédemment téléchargée) les fichiers permettant le support des Java Server Pages également connues sous le nom de JSP). Les fichiers se trouvent dans le répertoire jetty-6.1.11/lib/jsp-2.1. Ces librairies doivent être copiées dans le répertoire /build de Eclipse. Ensuite, il faudra encore une fois déclarer ces librairies comme utilisables par le projet. Il n est pas possible de les intégrer directement dans le répertoire /WEB-INF/lib car elles ne font pas partie du projet mais font partie intégrante des librairies nécessaires à Jetty. Comme le montre la fig. 3.1, il s agit ensuite d ajouter ces librairies dans le CLASS- PATH de l application Jetty. Pour cela, le serveur doir être arrêté. Puis redémarré une fois les librairies prises en compte. Cette fois-ci, les messages affichées lors du démarrage de l application n affichent plus d avertissement quant à la prise en charge des pages JSP. Pour vérifier que tout fonctionne, rechargez la page via l URL http://localhost: 8041/kompil7 : tout devrait fonctionner. Maintenant, nous allons ajouter de l interactivité en permettant à la page d afficher un contenu dynamique. Cela va se faire très simplement en modifiant le fichier /index.jsp comme le montre la figure 3.2. 28

CHAPITRE 3. LES CHOSES SÉRIEUSES 29 FIGURE 3.1 Ajout des libraries JSP <head> <title>homepage</title> </head> 4 <body> <h1>hello world!</h1> Time is <%= new java.util.date() %> </body> FIGURE 3.2 Le fichier hello en JSP

CHAPITRE 3. LES CHOSES SÉRIEUSES 30 La ligne 6 est ajoutée au fichier d origine. Les notations <% et %> permettent d intégrer du code JAVA dans la page WEB donnant une grande interactivité. Le signe égal permet de dpécifier l affichage d une information (comme le ferait System.println en JAVA). La création d un objet de type Date permet d obtenir très facilement une information qui change fréquemment (toute les secondes) dans un premier exmple vite mis en œuvre. Notez la nécessité de qualifier dans son intégralité le nom de la classe si on veut qu elle soit reconnue. Il existe également l alternative de faire appel à des «imports» comme dans le langage JAVA classique. Pour cela, on utilise des invocations telles que <%@page import="java.util.*" %>. Quelques notes personnelles : JSP (Java Server Pages) est le langage officiel pour les sites WEB. Tout conteneur WEB doit impérativement être capable d interpréter le code JSP (en fait, la page JSP est compilée une première fois et à chaque modification puis exécutée comme du code JAVA classique). On notera qu en tant que «langage officiel», il est inutile de déclarer une quelconque option dans le fichier web.xml. Dans ce livre, nous n utiliserons à priori pas le JSP pour construire nos pages mais un autre langage plus proche du langage de script : FreeMarker. Pour interpréter du code FreeMarker, il est d ailleurs inutile d avoir le support JSP (comme nous allons le voir très bientôt). 3.2 Sitemesh Bien entendu, notre page reste un peu triste. C est normal : pas de page de style (les fabuleaux CSS pour Cascading Style Sheets permettant de séparer le contenu de la présentation), pas de menu. C est vraiment vide. La première solution pour améliorer la page serait de créer deux fichiers d en-tête à inclure avant et aprés le texte de la page : c est la méthode généralement utilisée dans des applications PHP où l on va retrouver un code proche de celui présenté à la fig. 3.3. <? include "../header.php"?> <h1>hello World!</h1> 3 <? include "../footer.php"?> FIGURE 3.3 Un fichier PHP basique Dans l exemple de la fig. 3.3, on voit la simplicité de la technique : créer un en-tête (header) et un pied de page (footer) ce qui permet de créer le haut et le bas de la page. Le header va contenir la partie <head> du code HTML ainsi que le menu et les parties généralement présentes sur la partie haute ou sur le côté gauche de la page. Tanque que le footer va permettre l affichage du bas de la page. Ce genre de fonctionnement présente cependant quelques inconvénients : le code doit être inséré dans toutes les pages du site ; le code à insérer est relatif à la page dans la hiérarchie du site (si vous déplacez la page dans un autre répertoire d un niveau différent, vous devrez corriger le chemin d inclusion).

CHAPITRE 3. LES CHOSES SÉRIEUSES 31 le header et le footer peuvent être accessibles de l extérieur (risque faible car si l extension reste.php, le code sera exécuté et non affiché en clair). il est parfois nécessaire de passer des paramètres au header (typiquement le titre de la page). En JAVA, il est possible d utiliser une autre technique : un filtre qui va gérer cela lui-même. Ce filtre s appelle SiteMesh. Ce logiciel est en fait une simple librairie qu il conviendra d ajouter (comme toutes celles qui vont suivre) dans le répertoire de libraries /WEB-INF/lib afin qu il soit pris en compte par le conteneur WEB. SiteMesh est téléchargeable à l adresse http://www.opensymphony.com/sitemesh/ download.action. La version 2.3 ou supérieure conviendra parfaitement. Veuillez télécharger le fichier sitemesh-2.3.jar et le copier dans le répertoire /WEB-INF/ lib pour qu il soit correctement pris en compte. Une fois la librairie ajoutée, il convient d y faire référence en ajoutant le code suivant dans le fichier /WEB-INF/web.xml comme le montre la fig.3.4. En effet, il est nécessaire de déclarer le nouveau filtre de manière explicite. Le tag <filter> permet de donner le filtre SiteMesh (à savoir la classe et un nom logique utilisé dans le reste du fichier web.xml). Une fois cette définition donnée, il faut également préciser sur quelles pages le filtre SiteMesh sera appliqué. Comme c est souvent le cas, on appliquera le filtre sur l intégralité des pages WEB (en précisant /* comme paramètre du tag <url-pattern>. <filter> 2 <filter-name>sitemesh</filter-name> <filter-class>com.opensymphony.module.sitemesh.filter.pagefilter</filter-class> </filter> <filter-mapping> <filter-name>sitemesh</filter-name> 7 <url-pattern>/*</url-pattern> </filter-mapping> FIGURE 3.4 Le filtre SiteMesh Ce n est pas terminé, pour pouvoir profiter de SiteMesh, il faut également déclarer le décorateur à utiliser (le terme decorator est le terme anglais appliqué à la solution SiteMesh). Pour cela, nous créons un fichier nommé /WEB-INF/decorator.xml (le nom est le nom par défaut pour l application SiteMesh, si ce fichier n existe pas vous rencontrerez de nombreuses erreurs lors du démarrage de votre application). La fig. 3.5 vous montre un fichier /WEB-INF/decorators.xml minimaliste. Celui-ci comporte uniquement le filtre des fichiers qui vont être «decorés» (il s agit d une redondance avec le fichier web.xml qui s explique par le fait qu ici on détermine quel décorateur sera appliqué tandis que le fichier web.xml indique sur quelles requêtes doivent s appliquer le filtre SiteMesh). Le décorateur par défaut se nomme main agira sur toutes les pages et sera défini dans /decorator/main.jsp. Struts 2 est la partie la plus intéressante de votre application car c est ce logiciel qui va effectuer les traitements fonctionnels, ceux de votre application. Grâce à l utilisation conjointe de Spring, le code à écrire se révèle très simple. De plus, l utilisation des fichiers de configuration écrits en XML permettent de limiter les lignes de code en