JEE - JSP

IUTA 2015 - 2016



Dino COSMAS dino.cosmas@univ-lyon1.fr


Jacques Saraydaryan - Enseignant CPE


jdk8-downloads
netbeans-8.1-javaee-windows.exe
(https://netbeans.org/downloads/)

Présentation JEE

Plan

Besoin initial

  • Dynamiser le contenu web
    • Apparition de génération dynamique de code (ASP (1996-2002), PHP (1997), JEE (1999))
    • Apparition des applets (exécution code java sur navigateur)
  • Echanger des informations entre applications
    • RMI, Corba, EJB
  • Création de véritables architectures logicielles
    • Architectures 3tiers, Modèle-Vue-Contrôleur
  • Harmonisation des infrastructures

JEE - Java Entreprise Edition

  • Spécification de déploiement
  • Framework "MiddleWare" fournissant une gamme de services
    • Robustes et documentés
    • Même philosophie de bout en bout
    • Ensemble d'outils permettant de faciliter la vie du développeur
  • Harmonisation des infrastructures
  • Services répondants aux besoins
    • Web dynamique
    • Communication entre applications
    • Objets communicants (architecture REST et Webservices
    • Sécurité
    • ...

Positionnement JEE

Les principaux composants JEE

  • Servlet : Utilise les méchanismes de requetes-reponse http afin d’effectuer des tâches ou de générer des pages html
  • EJB : définit la façon dont les composant doivent être écrits et le contrat qu’ils doivent respecter avec le serveur d’application
  • RMI : communication inter procédés
  • JNDI : service de nommage
  • JDBC : connexion vers les bases de données
  • JTA : service de transaction
  • JMS : service de messagerie
  • JSP : servlet et Java Server Page
  • Java IDL : intégration aux autres langages (ex: CORBA) JavaMail
  • Connectors : intégration à des middlewares existants XML

Mais aussi ...

JEE & Web Container

  • Plateforme JEE repose sur un serveur Web
    • Gestion des requêtes/réponses HTTP
    • Délégation des requêtes/réponses Servlet/JSP vers le moteur Java
  • couplé avec un containeur WEB
    • Instanciation des classes nécessaires à l’application
    • Compilation à la volée des pages JSP

Architecture MVC Modèle-Vue-Contrôleur

Définition

Séparation des problèmatiques liées aux applications interactives

  • Modèle
    • Stockage des données
    • Traitement sur les données
  • Vue
    • Affichage des données
  • Contrôleur
    • Point d'entrée
    • "Passe plat"
    • Chef d'orchestre

JEE et modèle MVC

Architecture multi-tiers

Définition

Découpage fonctionnel et/ou physique d'un programme

  • Objectif
  • Diviser les responsabilités et charges de travail pour un passage à l'échelle, la modularité de programmation, la sécurisation adaptée à la fonction d'un tiers.

  • Exemple
    • Architecture 1tier
    • Un seul composant applicatif gère la présentation, le fonctionnement, la persistance et l'espace de stockage

    • Architecture 2tiers
    • Client/serveur

    • Architecture 3tiers/4tiers
    • Application JEE actuelle. Ex : client (naviagteur web) / httpd (serveur web) / SGBD (serveur bdd)

Architecture n-tiers JEE

Java Entreprise Edition - Web container

Rappel : communication client-serveur

Anatomie d'un projet Web Dynamique JEE

  1. Objets Java pur
    • Servlet (Contrôleur de l’application)
    • Java Bean (gestion du Modèle)
  2. Conteneur des informations Web
    • Information Web Classique
      • CSS
      • JS
      • HTML, xHTML
    • Information Web Compilée
      • JSP
    • Métadonnées et données complémentaires
      • WEB-INF/lib : jar complémentaires
      • WEB-INF/lib: web.xml fichier de configuration de notre application WEB

TP1 - Mise en place

Créer votre premier projet web dynamique sous NetBeans et afficher une page index.html.

Java Servlet

  • Objectifs
    • Développer des applications Web
    • Réagir aux requêtes HTTP
  • Propriétés
    • Utilisation du langage Java
    • Retourne des flux de type texte, HTML, XML, ...
    • Peut effectuer des traitements complexes
      • Utilisation, Manipulation XML
      • Utilisation, Manipulation Base de données
      • Lancement de traitement multithread, batch

Cycle de vie 1/2

Cycle de vie 2/2

Mise en oeuvre : API

  • Package javax.servlet, javax.servlet.http
  • Héritage de javax.servlet.http.HttpServlet Pour créer une servlet
  • API
    • init(ServletConfig) -> initialisation nécessaire de la servlet
    • doDelete( HttpServletRequest, HttpServletResponse )
    • doPost( HttpServletRequest, HttpServletResponse )
    • doGet( HttpServletRequest, HttpServletResponse )
    • doOptions( HttpServletRequest, HttpServletResponse )
    • destroy() -> appelée lorsque le serveur décide de supprimer la Servlet

Mise en oeuvre : Code général

Mise en oeuvre : Code Request

  • HTTP Request
    • Utilisé pour récupérer les informations provenant du navigateur web
      • String getParameter(String s)
      • Map getParameterMap()
      • Enum getParameterNames()

Mise en oeuvre :
Code Response

  • HTTP Response
    • Utilisé pour gérer la réponse au web browser

TP2 - Ma première servlet

  • Afficher l'ensemble des paramètres (clés, valeurs) d'une requête HTTP
  • Comment afficher 2 valeurs pour une même clé (paramètre dans URL) ?
  • Afficher des informations contextuelles si dessous et expliciter ce qu'elles représentent :
    1. Remote Address IP
    2. Local Port
    3. Context Path
    4. Protocol
    5. Current URI

Exemple de rendu

TP3 - Servlet avec formulaire

  • Créer une page html
    • contenant un formulaire
    • permettant d'identifier un utilisateur
    • utiliser au moins 4 champs INPUT différents
  • Créer une servlet
    • permettant de vérifier le login/password
    • une liste de login/mot de passe sera initialisée dans la Servlet
    • sera affiché l'ensemble des informations saisies en cas de succès
    • sera affiché « Mauvaise Authentification » en cas d’échec

JSP: Java server Page

Bilan servlet

  • Avantages
    • Création de contenu dynamiquement
    • Utilisation des paramètres pour des traitements complexes
    • Orchestrateur de site (redirection conditionnelle)
  • Inconvénient
    • Langage inapproprié à la création de page WEB
    • Gestion des données de stockage et d’affichage complexe
  • Besoin
    • Nouvel outil adapté à la création de page Web

Java server Page

  • Les JSP sont basées sur la technologie des Servlets
    • Le cycle de vie d'une JSP est le même que celui d'une Servlet
  • La différence : les fichiers JSP sont compilés sous forme de Servlets
    • Au premier appel
    • Recompilés à chaque modification du code source
  • Le code Java est intégré au code HTML avec des balises d'échappement <% et %>
  • Une page JSP peut être écrite en XML

Cycle de vie 1/3

Cycle de vie 2/3

Cycle de vie 3/3

Variable JSP

  • Pour simplifier l'écriture, on dispose de variables prédéfinies
    • request : la requête HttpServletRequest
    • response : la réponse HttpServletResponse
    • session : instance de HttpSession
    • out : le PrintWriter utilisé pour écrire sur la sortie
    • application : Cette variable correspond à l'objet ServletContext obtenu grâce à getServletConfig().getServletContext(). Permet aux JSPs d'enregistrer des données persistantes
    • config : instance de ServletConfig associée à la page courante
    • pageContext : permet de partager des informations entre plusieurs pages
    • page : synonyme de this, peu utilisé

Code inclusions

  • Expression (insertion direct de valeur dans la sortie)
    <%= expression %>
  • Scriptlets: portion de java
    <% code %>
  • Déclarations
    <%! code%>

Code déclaration

  • Une déclaration ou directive JSP affecte la structure globale de la Servlet qui est générée pour la JSP
  • Import : spécifie les classes java à importer dans la classe courante
    <%@ page import="java.util.Vector,java.io.*" %>
  • Content Type: permet de spécifier le type MIME du document retourné au client

    <%@ page contentType="text/html" %>

    Équivalent à :

    <% response.setContentType("text/html");%>

Exemple JSP 1/2

Exemple JSP 2/2

TP4 - Servlet + JSP

  • Créer une classe Utilisateur (nom, prenom, age, mot de passe)
  • Créer une page JSP : affichage.jsp
  • Appeler la page affichage.jsp et afficher :
    • un utilisateur tiré au hasard
    • tous les utilisateurs

Rendu avant vacances de Noël

  • Ensemble des TP1 TP2 TP3 TP4 un un fichier zip au noms du binome et du groupe

Ce que je NE VEUX PAS voir dans le code :

  • Références de quelques manières que ce soit à du PHP
  • Des classes dans "package-default"
  • Des classes ou méthodes non commentées
  • Des chemins d'accès URL ou fichier en chemin absolu : tout doit être en relatif
  • Un tp non fonctionnel
  • Un compte rendu manquant

-5pts automatiquement sinon

Communication et partage d’information

Partage d'information

  • les cookies
  • Espace de données disponible sur les navigateurs web
  • les données de sessions/application
  • Espace de mémoire du Web Container
  • les bases de données
  • Requêtes sur base de données
  • les JavaBeans
  • Outils de partage d’information web/jsp – Java

Les cookies

  • Utilisation du package javax.servlet.http.Cookie
  • Stockage sous forme clé/valeur
  • Propriétés optionnelles importantes
  • Max Age : durée de rétention de l’information
  • Domain : domaine auquel l’information peut –être associée
  • Path: chemin où le client doit renvoyer l’information
  • Récupération des cookies sur HTTPServletRequest
  • Ajout de cookie à l’aide de HTTPServletResponse

TP5 - cookies - Authentification

  • Réalisation d’une page d’authentification JSP auth.jsp accessible par index.html et par la réponse de la Servlet
  • Créer ou modifier une Servlet vérifiant login Mot de passe dans une liste prédéfinie
  • La servlet devra stocker le login dans le ou les cookies du navigateur web et afficher un message en cas d'erreur ou un lien vers auth.jsp en cas de réussite
  • Auth.jsp devra afficher toutes les informations des cookies (path, value, maxAge ..) et une copie d'écran du ou des cookies dans le navigateur ou l'arborescence fichier

Les données de Session-Application

  • Web container possède 2 espaces de mémoires utilisables
    • Application: disponible entre toutes les Servlets et JSP
    • Session: disponible uniquement durant la session d’un utilisateur
  • Définition Session utilisateur
  • Série d’interactions utilisateur/application étant suivies par le serveur. Les sessions sont utilisées pour maintenir l’état d’un utilisateur (incluant la persistance des objets associés), pour authentifier l’identité de l’utilisateur

Session

  • Récupération de la session utilisateur via HttpServletRequest
  • Portée: uniquement les servlet/Jsp participant à la session de l’utilisateur courant
    • API
      • getAttribute(String key)
      • setAttribute(String key, Object value)

Application: ServletContext

  • Récupération de la session utilisateur via HttpServletRequest
  • Portée: L’ensemble des servlet/jsp (voir configuration serveur)
    • API
      • getAttribute(String key)
      • setAttribute(String key, Object value)

Bilan: comment échanger de l’information ?

TP6 - session/application

  • Modifier le TP5 pour mettre l'authentification en session
  • Lors de l'arrivée sur auth.jsp
    • si pas de cookies et pas de session alors authentification
    • si cookies et pas session alors affichage des infos du cookie et message pas de session
    • si pas de cookies mais session alors affiche les informations en session et pas de cookies
    • si cookies et session alors affichage des informations des deux

Les JavaBeans

Les JavaBeans

  • Définition: Composant accessible réutilisable
  • Caractéristiques
    • La persistance : sauvegarde/ restauration de l’état du bean grâce à la sérialisation
    • La communication: Interaction via des évènements
    • L'introspection : Découverte dynamique des éléments du bean (sans code source).
    • Composant Paramétrable: les données du paramétrage sont conservées dans des propriétés.
  • Contraintes
    • Constructeur sans paramètre
    • Doit être sérialisable (implements Serializable)
    • Propriétés normalisées: attribut=nom, méthode d’accès getNom(),setNom(String s)
    • Peuvent émettre des évènements en gérant une liste de listener.

Utilisation au sein d'une JSP

  • interraction direct avec les objets java
  • échange d'information grâce à la portée des JavaBeans
    • Synthaxe
    • Exemple

Scope d'un JavaBean

  • exemple
  • Valeurs possibles
    • Page
    • Request
    • Session
    • Application

TP7 - JavaBeans

  • Créer un fichier JSP permettant de remplir les propriétés d’un utilisateur (name, surname, age, preference)
  • Créer dans ce fichier JSP un Bean permettant de sauvegarder ces informations en session
  • Créer un second JSP affichant les propriétés de l’utilisateur
  • Permettre d'accéder à ces JSP à partir de votre page d'accueil

Bonnes pratiques et outils complémentaires

Servlet/JSP/JavaBean Qui fait quoi?

  • Servlet
    • Adapté pour les traitements complexes, orchestration des pages
    • Non adapté à la création de rendu de page
  • JSP
    • Adapté à la création de rendu de page
    • Inadapté aux traitement complexes
  • JavaBean
    • Container de données
    • Lien object java / objet manipuler en JSP

MVC, Modèle Vue Contrôleur 1/2

MVC, Modèle Vue Contrôleur 2/2

Outils complémentaires : Dispatch Servlet

  • Dispatcher : Déléguer des requêtes HTTP vers une autre Servlet ou une autre JSP
    • dispach.forward
      • Les éléments de requêtes et de réponses sont FORWARDE au composant désigné. La servlet à l’origine du dispach ne pourra plus modifier la réponse.
    • dispach.include
      • Les élément de requêtes et de réponses sont INCLUS aucomposant désigné. La réponse de la servlet d’origine ET la réponse du composant désigné seront fusionnées.

Exemple : Dispatch Servlet

Outils complémentaires : @include et jsp:include

  • Comment limiter l’impact des modifications effectuées sur les pages de visualisation
    • Centraliser l’utilisation des composants: include
    • @include: copie colle le contenu du fichier à l’endroit de l’appel
    • Centraliser l’utilisation des composants: TagLib
    • jsp:include: inclusion du résultat et non pas du code, n’utilise pas les mêmes informations que la page courante

Découvertes ...

Raccourcis clavier NetBeans 8.0


shortcuts-80.pdf

Injection de ressources

  • Chercher des informations sur l' annotation @Resource
    • De quel package est elle ?
    • Que prend elle en paramètre ?
    • A quoi sert elle ?
    • Où peuvent être déclarées des "resources" ?
    • Peut-on l'utiliser pour déclarer un accès à une base de données

Singleton

  • Chercher des informations sur ce qu'est un singleton
    • Proposer une définition
    • Trouver une implémentation
    • Proposez une implémentation
    • En quoi cela pourra nous être utile lors de l'utilisation d'une base de données ?

El expression

  • Que font ces expression ?

Apprendre par l'exemple

  • Importer le projet JeeDataSource.zip
  • Comprendre et expliquer avec vos mots les différentes technologies
    • Servlet
    • Jsp
    • JavaBean
    • Singleton
    • Injection de ressource
    • El Expressions
    • Taglib
  • Modifier le projet JeeDataSource en proposant des améliorations fonctionnelles