Cours détaillé avec exemples sur le Framework JAVA Apache Velocity pour débutant
Introduction à Apache Velocity
1. Vue d'ensemble
Qu'est-ce que la Velocity?
Velocity est un moteur de template basé sur Java. Il permet à quiconque d'utiliser un langage de template simple mais puissant pour référencer des objets définis dans le code Java.
Lorsque Velocity est utilisé pour le développement Web, les concepteurs Web peuvent travailler en parallèle avec les programmeurs Java pour développer des sites Web conformément au modèle MVC (Model-View-Controller), ce qui signifie que les concepteurs de pages Web peuvent se concentrer uniquement sur la création d'un site de qualité. Et les programmeurs peuvent se concentrer uniquement sur l'écriture de code de premier ordre. Velocity sépare le code Java des pages Web, ce qui rend le site Web plus facile à gérer tout au long de sa vie et constitue une alternative viable aux pages JSP (Java Server Pages) ou à PHP.
Les capacités de Velocity vont bien au-delà du Web ; Par exemple, il peut être utilisé pour générer SQL, PostScript et XML à partir de modèles. Il peut être utilisé soit comme utilitaire autonome pour générer du code source et des rapports, soit comme composant intégré d’autres systèmes. Par exemple, Velocity fournit des services de gabarit pour divers frameworks Web, ce qui leur permet de disposer d’un moteur de vue facilitant le développement d’applications Web selon un véritable modèle MVC.
Le projet Apache Velocity
Velocity est un projet de la fondation Apache Software Foundation, chargé de la création et de la maintenance de logiciels à code source ouvert liés au moteur Apache Velocity . Tous les logiciels créés dans le cadre du projet Velocity sont disponibles sous licence de logiciel Apache et gratuitement pour le public.
Apache Software Foundation
Apache Software Foundation prend en charge la communauté Apache de projets de logiciels open-source. Les projets Apache se caractérisent par un processus de développement collaboratif basé sur un consensus, une licence logicielle ouverte et pragmatique et une volonté de créer un logiciel de haute qualité qui ouvre la voie dans son domaine.
Projets Apache Velocity
Apache Velocity propose les projets suivants :
Velocity Engine - C'est le moteur de template qui fait tout le travail. Si vous êtes venu ici parce que vous avez entendu parler de Velocity quelque part sur le Web, c’est probablement le bon endroit pour commencer.
Outils Velocity - Ce projet contient des outils et d'autres infrastructures utiles pour créer des applications Web et non Web à l'aide du moteur Velocity. Vous trouverez par exemple le code pour l’intégration de Struts ou le VelocityViewServlet autonome ici.
Statut de publication
Projet | Version finale | Version Alpha / Beta / RC |
Moteur Velocity | 2.1 | (actuellement non disponible) |
Outils Velocity | 3.0 | (actuellement non disponible) |
Dans cet article, nous allons explorer comment l’utiliser pour créer des pages Web dynamiques.
2. Comment fonctionne Velocity
La classe de base de Velocity est VelocityEngine.
Il orchestre l'ensemble du processus de lecture, d'analyse et de génération de contenu à l'aide d'un modèle de données et d'un modèle de vélocité.
En termes simples, voici les étapes à suivre pour toute application de vélocité typique :
• Initialiser le moteur de vélocité
• Lire le modèle
• Placer le modèle de données en objet contextuel
• Fusionner le modèle avec les données de contexte et rendre la vue
Passons en exemple en suivant ces étapes simples:
1 VelocityEngine velocityEngine = new VelocityEngine();
2 ();
3
4 Template t = velocityEngine.getTemplate(""); 5
6 VelocityContext context = new VelocityContext();
7 ("name", "World"); 8
9 StringWriter writer = newt.merge( context, writer ); StringWriter(); 10
3. Dépendances Maven
Pour travailler avec Velocity, nous devons ajouter les dépendances suivantes à notre projet Maven:
1
2
3 <org.apache.velocityvelocity >
4 1.7
5
6
7 <org.apache.velocityvelocity-tools>
8 2.0
9
10
La dernière version de ces deux dépendances peut être ici:VelocityetVelocity-tools.
4. Langage du modèle Velocity
Velocity Template Language (VTL) constitue le moyen le plus simple et le plus propre d’incorporer le contenu dynamique dans une page Web à l’aide de références VTL.
La référence VTL dans le modèle de vélocité commence par un $ et est utilisée pour obtenir la valeur associée à cette référence. VTL fournit également un ensemble de directives pouvant être utilisées pour manipuler la sortie du code Java. Ces directives commencent par #.
4.1. Références
Il existe trois types de références dans Velocity, variables, propriétés et méthodes:
• variables - définies dans la page à l'aide de la directive #set ou de la valeur renvoyée du champ de l'objet Java:
1 #set ($message="Hello World")
• propriétés - fait référence à des champs dans un objet; ils peuvent également faire référence à une méthode getter de la propriété:
1 $
• Méthodes - reportez-vous à la méthode sur l'objet Java:
1 $customer.getName()
La valeur finale résultant de chaque référence est convertie en une chaîne lorsqu'elle est rendue dans la sortie finale.
4.2. Les directives
VTL fournit un riche ensemble de directives:
• set - il peut être utilisé pour définir la valeur d'une référence. cette valeur peut être assignée à une variable ou à une référence de propriété:
1 #set ($message = "Hello World")
2 #set ($ = "Brian Mcdonald")
• conditionals - Les directives #if, #elseif et #else permettent de générer le contenu en fonction de vérifications conditionnelles:
1 #if($employee.designation == "Manager")
2
Manager
3 #elseif($employee.designation == "Senior Developer")
4
Senior Software Engineer
5 #else 6 < h3> Trainee
#end
7
• boucles - La directive #foreach permet de boucler une collection d'objets:
1 <ul>
2 #foreach($product in $productList)
3
- $product
4 #end
5
• L'optioninclude - #include permet d'importer des fichiers dans le modèle:
1 #include("","","" )
• l’instructionparse - #parse permet au concepteur de modèle d'importer un autre fichier local contenant la VTL ; Velocity analysera alors le contenu et le rendra:
1 #parse (Template)
• évaluer- la directive #evaluate peut être utilisée pour évaluer VTL de manière dynamique ; Cela permet au modèle d'évaluer une chaîne au moment du rendu, par exemple pour l’internationaliser :
1 #set($firstName = "David")
2 #set($lastName = "Johnson")
3
4 #set($dynamicsource = "$firstName$lastName")
5
6 #evaluate($dynamicsource)
• break - La directive #break arrête toute restitution de la portée d'exécution actuelle (c'est-à-dire #foreach , #parse )
• stop - La directive #stop arrête tout rendu et exécution du modèle.
• La directive velocimacros - #macro permet au concepteur de modèles de définir un segment répété de VTL:
1 #macro(tablerows)
2
3
4
5 #end< /tr>
6
? Cette macro peut maintenant être placée n'importe où dans le modèle en tant que # tablerows ():
1 #macro(tablerows $color $productList) 2 #foreach($product in $productList)
3
4 $5
6 #end#end
7
4.3. Autres caractéristiques
• maths - une poignée de fonctions mathématiques intégrées pouvant être utilisées dans les modèles:
1 #set($percent = $number / 100)
2 #set($remainder = $dividend % $divisor)
• opérateur de plage - qui peut être utilisé avec #set et #foreach:
1 #set($array = [0..10]) 2
3 #foreach($elem in $arr)
4 $elem
5 #end
5. Servlet Velocity
Le travail principal du moteur Velocity est de générer un contenu basé sur un modèle.
Le moteur ne contient aucune fonctionnalité liée au Web. Pour mettre en œuvre une application Web, nous devons utiliser un servlet ou une infrastructure basée sur un servlet.
Velocity fournit une implémentation prête à l'emploi , VelocityViewServlet , qui fait partie du sous-projet velocity-tools.
Pour utiliser la fonctionnalité intégrée fournie par VelocityViewServlet, nous pouvons étendre notre servlet à partir de VelocityViewServlet et remplacer la méthode handleRequest () :
1 public class ProductServlet extends VelocityViewServlet {
2 ProductService service = new ProductService();
3
4 @Override
5 public Template handleRequest( 6 HttpServletRequest request,
HttpServletResponse response,
7 Context context) throws Exception {
8
9 List products = service.getProducts();
10 ("products", products); 11
12 return getTemplate("");
13 } }
14
15
16
6. configuration
6.1. Configuration web
Voyons maintenant comment configurer VelocityViewServlet dans le fichier .
Nous devons spécifier les paramètres d'initialisation facultatifs, notamment velocity.properties et :
1
2 3 apache-velocity 4 // 5
6
velocity
7 .VelocityViewServlet
8
9
10 org.apache.velocity.properties
11 /WEB -INF/velocity.properties
12 - param>
13 //
14
15
Nous devons également spécifier le mappage pour ce servlet. Toutes les demandes de modèles de vélocité ( * .vm ) doivent être servies par le servlet vélocité:
1
2 velocityLayout
3 *.vm 4
6.2. Chargeur de ressources
Velocity fournit un système de chargeur de ressources flexible. Il permet à un ou plusieurs chargeurs de ressources d'être utilisés simultanément:
• FileResourceLoader
• JarResourceLoader
• ClassPathResourceLoader
• URLResourceLoader
• DataSourceResourceLoader
• WebappResourceLoader
Ces chargeurs de ressources sont configurés dans velocity.properties:
1 resource.loader=webapp
2 .WebappResourceLoader
3 =
4 webapp.resource.loader.cache = true
7. Modèle de vélocité
Le modèle Velocity est l’endroit où toute la logique de génération de vues est écrite. Ces pages sont écrites à l’aide de VTL (Velocity Template Language):
1
2
3
4
5
7
$() Products on Sale!
8
We are proud to offer these fine products
9 at these amazing prices. 10
11 #set( $count = 1 ) 12
13 Serial #
14 Product Name
15 Price
16
17 #foreach( $product in $products )
18 $count)
19 $product.getName()20 $product.getPrice()
21
22 #set( $count = $count + 1 )#end
23
24
25
26
27
28
29
30
8. Gestion de la mise en page
Velocity fournit un contrôle de mise en page simple et des écrans d'erreur personnalisables pour les applications basées sur Velocity Tool.
VelocityLayoutServlet encapsule cette capacité pour rendre les présentations spécifiées. VelocityLayoutServlet est une extension de VelocityViewServlet.
8.1. Configuration web
Voyons comment configurer le VelocityLayoutServlet. Le servlet est défini pour intercepter les demandes de pages de modèles de vélocité et les propriétés spécifiques à la mise en page sont définies dans le fichier velocity.properties :
1
2
3 < web-// app>
4
5 velocityLayout
6 .VelocityLayoutServlet
7
8 <init-name>org.apache.velocity.properties
9 /WEB-INF/velocity.properties
10
11
12 //
13 <servlet-name>velocityLayout
14 *.vm 15 16 // 17
18
8.2. Modèles de disposition
Le modèle de présentation définit la structure typique d'une page de vélocité. Par défaut, VelocityLayoutServlet recherche le fichier dans le dossier de présentation. Remplacer quelques propriétés peut changer cet emplacement:
1 .servlet.layout.directory = layout/
2 .servlet.layout.default.template =
Le fichier de mise en page se compose d'un modèle d'en-tête, d'un modèle de pied de page et d'une variable de vitesse $ screen_content qui affiche le contenu de la page de vélocité demandée:
1
2
3 < html<>head>
4 Velocity
5
6
7
8
9
10
11 $screen_content
12 <>
13 #parse("")
14
15
16
17
8.3. Spécification de mise en page dans l'écran demandé
La mise en page pour un écran particulier peut être définie comme une variable de vitesse au début d'une page. Cela se fait en mettant cette ligne dans la page:
1 #set($layout = "")
8.4. Spécification de disposition dans le paramètre de demande
Nous pouvons ajouter un paramètre de requête dans la chaîne de requête layout = et VLS le trouvera et rendra l'écran dans cette présentation au lieu de rechercher une présentation par défaut.
8.5 Écrans d'erreur
L'écran d'erreur personnalisé peut être implémenté à l'aide de la disposition de vélocité. VelocityLayoutServlet fournit deux variables $ error_cause et $ stack_trace pour présenter les détails de l'exception.
La page d'erreur peut être configurée dans le fichier velocity.properties :
1 .servlet.error.template =
9. Conclusion
Dans cet article, nous avons appris que Velocity est un outil utile pour le rendu des pages Web dynamiques. Nous avons également vu différentes manières d’utiliser les servlets fournis par vélocité.
Le code complet de ce tutoriel est disponiblesur GitHub.