Architecture Struts 2
Les bases du Java EE : JSP, JavaBeans, servlets
Java EE ou Java Platform, Enterprise Edition désigne une plate-forme applicative Java destinée au développement d’applications web professionnelles.
L’intérêt majeur de cette plate-forme est de simplifier le développement d’applications web fiables, distribuées et déployées sur un serveur applicatif tel que le serveur Tomcat.
1. Premiers pas avec Java EE
a. Principes d’application web
La plate-forme Java EE 7 permet de créer des applications web Java.
Les applications web reposent sur une communication basée sur le protocole HTTP, une architecture dite client-serveur.
Lorsqu’un utilisateur saisit une URL dans la barre d’adresse de son navigateur, une requête HTTP est envoyée au serveur pour afficher la page requise pour éviter la répétition.
Puis, le serveur effectue un traitement et génère une page web, c’est la réponse HTTP qui est envoyée vers le navigateur. Enfin, la page est affichée par le navigateur.
b. Architecture Java EE standard
Une application Java EE est une application découpée en couches, généralement en trois couches, c’est-à-dire une architecture 3-tiers :
1. La couche présentation des données, elle correspond à l’affichage sur le poste de travail de l’utilisateur des données.
2. La couche traitement métier, code Java métier.
3. La couche gestion des données, elle correspond à la gestion des données conservées en base de données : DAO, Hibernate.
Une application Java EE comporte plusieurs composants indépendants les uns des autres, qui sont installés sur le serveur ou sur plusieurs couches. Les composants sont les suivants :
-
Des composants clients :...
Principes du design pattern MVC2
Le modèle-vue-contrôleur est un patron de conception logiciel largement répandu et recommandé.
1. Design pattern MVC
L’avantage de la mise en œuvre de ce patron résulte du fait qu’il impose une séparation entre les données, la présentation et les traitements.
Ainsi, émergent les trois parties fondamentales dans l’application web :
-
Le modèle, il est constitué par des JavaBeans et des EJB (Enterprise JavaBeans).
-
La vue, elle est constituée par des JSP.
-
Le contrôleur est constitué de servlets.
Le modèle décrit le comportement de l’application. Il permet de traiter les données, de gérer les interactions avec la base de données. Il met à disposition les méthodes de mise à jour de ces données telles que la création, la suppression, la mise à jour, la consultation.
La vue correspond à l’interface graphique avec laquelle l’utilisateur interagit. La vue a pour rôle d’afficher, de présenter les données ou les résultats renvoyés par le modèle. Elle n’effectue aucun traitement. Dans le cas d’une application web, la vue est une page écrite en HTML.
Le contrôleur a comme rôle de récupérer les requêtes de l’utilisateur, de les transmettre au modèle, puis de les rediriger vers la vue adéquate. Il a un rôle d’interception et de les redirection.
Voici un schéma récapitulatif des différentes interactions entre le modèle, la vue et le contrôleur :
Voici les différentes étapes :
1. L’utilisateur fait une action, une requête HTTP est envoyée au contrôleur.
2. Le contrôleur récupère les informations...
Les fichiers de configuration Struts
Le fonctionnement du framework Struts 2 repose sur la configuration de plusieurs fichiers XML primordiaux.
Utiliser Struts 2 permet de gagner du temps et d’améliorer la qualité du code de l’application, notamment par le fait que le code Java pur n’est pas présent dans les pages de types JSP : c’est-à-dire les vues.
Pour utiliser du code Java à l’intérieur des pages JSP, il faudra utiliser la bibliothèque de tags spécifiques à Struts 2.
1. Le fichier web.xml
Le fichier web.xml se trouve sous le répertoire WEB-INF\web.xml.
Il s’agit du fichier de propriétés de l’application. En quelque sorte, c’est le fichier central dans un projet Java EE.
Voici un fichier type web.xml pour Struts 2 :
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<display-name>Devis Pro</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.
StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<session-config> ...
Les actions
Nous allons voir à travers un exemple concret de l’application DevisPRO comment coder une action de A à Z. Pour cela, nous allons mettre en œuvre la page d’authentification qui permet à l’artisan d’accéder à l’application DevisPRO à partir de son e-mail et de son mot de passe.
1. Créer la vue ou le formulaire d’authentification
Nous créons la page d’authentification à l’application web DevisPRO, cette page est nommée index.jsp et est créée à la racine de src\main\webapp.
Le code HTML associé à la page d’authentification index.jsp est le suivant :
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Connection</title>
<link rel="stylesheet" href="./css/login.css" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/
font-awesome/4.7.0/css/font-awesome.min.css">
</head>
<body>
<%@taglib uri="/struts-tags" prefix="s" %>
<div class="container">
<form method="post" action="account">
<!-- div class="row"-->
<div class="maindiv">
<div class="col1">
<h2 fontcolor="white"> Devis Pro BTP</h2>
<div...
Les intercepteurs
Les intercepteurs offrent la possibilité d’un prétraitement avant l’appel de l’action ou d’un post-traitement après l’appel de l’action. Les intercepteurs peuvent être utilisés pour effectuer diverses opérations telles que les validations, la gestion des exceptions, le téléchargement de fichiers, l’affichage des résultats intermédiaires, etc.
Les intercepteurs sont des classes Java incluses dans le JAR Struts 2 Core. Voici la liste des intercepteurs utilisables par défaut :
-
Alias : gestion des noms de paramètres dans les requêtes HTTP.
-
Chain : gestion du chaînage des actions et du passage de paramètres.
-
Checkbox : gestion des cases à cocher dans les formulaires.
-
Cookie : gestion du cookie utilisateur.
-
ConversionError : gestion des erreurs de conversion dans les actions.
-
CreateSession : gestion de la session utilisateur courant.
-
Debugging : gestion du débogage des applications.
-
ExternalRef : résout les références externes.
-
execAndWait : gestion des chargements de pages lors des traitements plus ou moins longs.
-
Exception : gestion du traitement des exceptions.
-
FileUpload : gestion des chargements de fichiers.
-
I18n : gestion de l’internationalisation pour les applications multilingues.
-
JsonValidation : fournit un support pour la validation asynchrone.
-
Logger : gestion des actions.
-
store : gestion des portées des messages de succès et d’erreurs.
-
ModelDriven : gestion des modèles de persistance.
-
ScopedModelDriven : gestion des modèles de persistance à la manière de l’intercepteur précédent mais avec gestion de session.
-
Params : gestion du mapping entre les paramètres des requêtes et les propriétés...
Le FilterDispatcher
FilterDispatcher est la servlet de base du framework Struts 2, il permet de traiter toutes les requêtes en entrée, il permet l’accès aux éléments de base du framework pour traiter les requêtes.
Les éléments les plus importants dans le fichier web.xml sont filter et filter-mapping utilisés pour la configuration du FilterDispatcher.
Les tags de formulaires Struts 2
1. Introduction
Pour créer des pages JSP et notamment des formulaires, le framework Struts met à disposition toute une bibliothèque de balises appelées couramment « tags ».
Ces balises permettent de gérer et récupérer les données des formulaires, de réaliser des itérations, des boucles, des contrôles, et de gérer les erreurs.
Struts 2 repose sur un système de balise de type <s:></s:>.
Pour pouvoir utiliser ces balises dans les pages JSP, il faut inclure la librairie de tags struts 2 au début des fichiers JSP avec la balise taglib comme suit :
<%@ taglib prefix ="s" uri="/struts-tags" %>
2. Liste des tags
a. Les principaux tags
La balise <s:form/> est une des premières balises struts importantes à aborder. Cette balise permet d’afficher un formulaire HTML.
Il est possible de spécifier de nombreux paramètres à chaque balise de type struts, tels que des styles css à appliquer ou des actions JavaScript à exécuter. La mise en forme est gérée par Struts.
Voici un exemple pour la balise <s:form/> :
<s:form action="FORM1" id="authentification" method="post">
<!-- input-->
<!-- textarea -->
<!-- submit button... -->
</s:form>
Ce code d’un point de vue HTML correspond à :
<form>
<table>
<tr>
<td>
< !--...
ONGL, internationalisation et intégrations
1. Expressions OGNL
a. Introduction
OGNL est un langage de manipulation et d’expressions signifiant Object Graph Navigation Language. Ce langage de manipulation de données simplifie l’accès aux informations des getters et setters des JavaBeans. Il est possible d’utiliser OGNL avec les taglibs JSTL (ensemble de balises personnalisées à l’environnement Struts 2).
Il permet d’accéder aux objets Java et de les modifier.
b. Exemple
Voici un exemple d’utilisation des expressions OGNL pour accéder aux valeurs des attributs d’une classe Java, cas d’une liste comprenant plusieurs valeurs et d’un attribut de type String.
Tout d’abord, nous créons la page OGNL_exemple.jsp sous src\main\webapp\.
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
<title>Struts 2 OGNL exemple</title>
</head>
<body>
<h3> OGNL exemple.</h3>
<h4><a href="bienvenue">Cliquer ici</a>
Voir la liste des valeurs OGNL.</h4>
</body>
</html>
Ensuite, nous créons la classe OgnlActions.java sous com.devispro.actions.
package com.devispro.actions;
import java.util.ArrayList;
import java.util.List;
public class OgnlAction extends ActionSupport{
//data members
private List<String>...