De nombreuses personnes ont vu ou entendu parler de Velocity. La traduction littérale du nom est : vitesse, vitesse, rapidité. Il est utilisé dans le développement Web, mais peu de gens l'ont utilisé. La plupart d'entre eux connaissent et utilisent Struts. et Struts, que pensez-vous de Velocity ? Essayons de comprendre le concept de Velocity. À travers l'introduction ici, nous mettons l'accent sur les problèmes de sélection de la technologie, afin que chacun puisse prendre en compte la Velocity lors du choix du développement d'un projet, et permettre également à chacun de comprendre ses idées. Une très bonne façon de penser, qui permet à chacun de changer d'avis et de penser différemment.
Cet article est basé sur le fait que vous avez une certaine base en développement Java et que vous connaissez MVC, Struts et d'autres modèles de développement.
Velocity est une technologie de moteur de modèles Java. Le projet a été proposé par Apache et est dérivé d'une autre technologie de moteur, Webmacro. Alors, quelle est la définition officielle de la vitesse ? Apache le définit comme : un moteur de modèle basé sur Java, mais permet à quiconque d'utiliser un langage de modèle simple et puissant pour référencer des objets définis dans le code Java. La dernière version est la 1.4. Vous pouvez trouver plus d'informations sur http://jakarta.apache.org/velocity/index.html .
En fait, pour parler franchement, Velocity est une implémentation de l'architecture MVC, mais elle se concentre davantage sur la relation entre Model et View en tant que pont entre eux. Je pense que tout le monde connaît Struts, l'architecture la plus populaire de MVC. De nombreux développeurs utilisent largement l'architecture Struts, y compris les versions de plate-forme de gestion de Websphere 5 ou supérieures d'IBM qui sont une bonne pratique de MVC et réduisent efficacement Java. le code apparaît dans View (Jsp), mais la connexion entre Model et View repose toujours sur la technologie Taglib de Struts. Imaginez si le concepteur Web front-end n'est pas familier avec Struts ou même avec Taglib (je pense qu'il est assez difficile d'être familier). avec lui, y compris le personnel de maintenance ultérieur), ce qui rendra très difficile la coopération entre les concepteurs de sites Web et les ingénieurs de développement front-end. Dans le développement réel, il existe toujours un tel fait que le travail entre les concepteurs de sites Web. et les développeurs front-end peuvent être plus compliqués. Il existe encore un certain degré de couplage. Comment résoudre ce problème au maximum ? Jetons un coup d'œil à Velocity ou à ce concept.
Commençons par l'exemple de développement Velocity le plus simple pour vous montrer comment fonctionne Velocity :
1. Créez un fichier, le nom du fichier est : hellavelocity.vm, qui est le modèle de vitesse (en fait le même que le HTML), le contenu est :
Bienvenue $name sur Javayou.com !
aujourd'hui c'est $date.
2. Créez un fichier Java, HelloVelocity.java, avec le contenu :
package com.javayou.velocity ;
importer java.io.StringWriter ;
importer java.util.* ;
importer org.apache.velocity.app.VelocityEngine ;
importer org.apache.velocity.Template ;
importer org.apache.velocity.VelocityContext ;
/**
* @auteur Liang.xf 2004-12-14
*/
classe publique HelloVelocity {
public static void main (String[] args) lève une exception {
//Initialiser et obtenir le moteur Velocity
VelocityEngine et = new VelocityEngine();
ve.init();
//Obtenir le modèle de vitesse
Modèle t = ve.getTemplate("hellovelocity.vm");
//Obtenir le contexte de vitesse
Contexte VelocityContext = new VelocityContext();
// Remplir les données dans leur contexte
contexte.put("nom", "Liang");
context.put("date", (new Date()).toString());
//Pour un affichage ultérieur, saisissez la valeur de la liste à l'avance
Liste temp = new ArrayList();
temp.add("1");
temp.add("2");
contexte.put("liste", temp);
//flux de sortie
StringWriter écrivain = new StringWriter();
//convertir la sortie
t.merge(contexte, écrivain);
System.out.println(writer.toString());
}
}
3. Téléchargez le zip Velocity 1.4 sur http://jakarta.apache.org/site/binindex.cgi , décompressez-le pour obtenir Velocity-1.4.jar et utilisez-le pour compiler la classe ci-dessus HelloVelocity.java.
4. Copiez hellavelocity.vm sur 1 dans le répertoire actuel de l'exécution. L'exécution de HelloVelocity nécessite également d'autres packages, qui peuvent être obtenus à partir du fichier Velocity1.4.zip téléchargé, \velocity - 1.4\build\lib, et placez-les. Une fois commons-collections.jar et logkit-1.0.1.jar introduits, exécutez java -cp .\bin; -Djava.ext.dirs=.\lib2 com.javayou.velocity.HelloVelocity, en supposant que la classe est compilée. dans le répertoire .\ bin, et les packages de classes dont nous avons besoin sont placés dans le répertoire .\lib2. La structure courante est la suivante :
Bienvenue Liang sur Javayou.com !
nous sommes aujourd'hui le mardi 14 décembre 19:26:37 CST 2004.
Ce qui précède est le résultat d'exécution le plus simple. Qu'en est-il ? Faites-moi savoir en gros. Les deux variables définies $name et $date dans le modèle hellavelocity.vm sont respectivement context.put("name", "Liang") et context.put. ( "date", (new Date()).toString()) est remplacé par la valeur définie.
De ce point de vue, le traitement des processus métier, y compris les résultats commerciaux, est essentiellement résolu au niveau de la couche modèle, tandis que la couche vue n'est fondamentalement affichée qu'à l'aide d'un simple VTL (Velocity Template Language). De cette façon, Jsp ne serait-il pas inutile ? Oui, ce modèle d'utilisation ressemble un peu à la méthode CGI précédente :) Velocity génère automatiquement du code, et Velocity est également très performant à cet égard. Velocity est utilisé dans Turbine pour générer beaucoup de code.
Dans Velocity, les définitions de variables commencent par "$" et $ sert d'identifiant de Velocity. Les lettres, les chiffres, les traits et les soulignements peuvent tous être utilisés comme variables définies dans Velocity.
De plus, nous devons également prêter attention aux définitions de variables caractéristiques de Velocity, telles que : $student.No, $student.Address, qui ont deux niveaux de signification : le premier est si l'étudiant est une table de hachage, la clé Non et will être extrait de la table de hachage La valeur de Address, et le deuxième type est qu'il peut s'agir d'une méthode appelante, c'est-à-dire que les deux variables ci-dessus seront converties en student.getNo() et student.getAddress(). Velocity a un objet pour la valeur renvoyée par le code Java dans le servlet, et peut également appeler les méthodes de l'objet, telles que $student.getAddress(), etc. Je ne donnerai pas d'exemples et n'entrerai pas dans les détails ici.
L'exemple ci-dessus n'est qu'un exemple simple. Bien sûr, beaucoup de gens ne sont plus satisfaits de tels exemples. Dans les applications réelles, nous devons souvent effectuer des affichages sélectifs et énumérer certaines données itératives, telles que des listes, et bien sûr la vitesse ( spécifiquement, il devrait s'agir d'un langage de modèle VTL) prend également en charge cette fonction. En outre, il prend également en charge certains autres affichages couramment utilisés, tels que les variables à l'intérieur du modèle (telles que les variables dans Jsp), et des affichages plus puissants tels que la création de macros pour réaliser l'automatisation. . Continuons à lire.
Nous utilisons toujours l'exemple ci-dessus et modifions le contenu du modèle hellavelocity.vm comme suit :
#set( $iAmVariable = "bien!" )
Bienvenue $name sur Javayou.com !
aujourd'hui c'est $date.
$iAmVariable
Réexécutez la commande d'exécution ci-dessus, le résultat est :
Bienvenue Liang sur Javayou.com !
nous sommes aujourd'hui le mardi 14 décembre 22:44:39 CST 2004.
bien!
Vous pouvez voir que les variables du modèle sont définies comme des instructions commençant par #set, ce qui n'est pas difficile à comprendre. Après exécution, les variables $iAmVariable dans le modèle sont converties en valeurs définies :
bien!
Regardons à nouveau un choix simple. Modifions le contenu du modèle hellavelocity.vm comme suit :
#set ($admin = "admin")
#set ($utilisateur = "utilisateur")
#if ($admin == $utilisateur)
Bienvenue administrateur !
#autre
Bienvenue utilisateur !
#fin
Exécutez la commande run, le résultat est :
Bienvenue utilisateur !
Vous pouvez voir que les déclarations de jugement sont simplement simples #if (), #else, #end, pas très compliquées.
Continuons à examiner les données d'itération et modifions le contenu du modèle hellavelocity.vm en :
#foreach( $produit dans $list )
$produit
#fin
Exécutez la commande run, le résultat est :
#1
#2
N'est-il pas pratique de lister les valeurs pré-enregistrées dans la liste VelocityContext dans l'exemple ? Utilisez simplement #foreach ($variable in xx). Si la liste ci-dessus est remplacée par une table de hachage, vous pouvez utiliser la syntaxe suivante :
#foreach($clé dans $hashVariable.keySet() )
Valeur de $key : $ hashVariable.get($key)
#fin
Je ne pense pas que ces scripts soient compliqués du tout.
Beaucoup de gens se demanderont également : et si c'était du javabean ? Bon, ajoutons un bean :
package com.javayou.velocity ;
/**
* @auteur Liang.xf 2004-12-14
*/
Étudiant de classe publique {
//Notez que les attributs de la classe sont publics
public String no = "" ;
adresse de chaîne publique = "" ;
public Étudiant (String _no, String _address) {
non = _non ;
adresse = _adresse ;
}
chaîne publique getAddress() {
adresse de retour;
}
public void setAddress (adresse de chaîne) {
this.address = adresse ;
}
chaîne publique getNo() {
retournez non ;
}
public void setNo (String no) {
this.no = non ;
}
}
Cet étudiant est un javabean complet, ou data bean, une classe courante utilisée pour charger des données. Ensuite, nous modifions HelloVelocity.java pour :
temp.add("1");
temp.add("2");
Remplacer par :
temp.add(nouvel étudiant("123", "Guangzhou"));
temp.add(nouvel étudiant("456", "Zhuhai"));
Modifiez ensuite le contenu de hellavelocity.vm en :
#foreach ($s en $étudiants)
<$velocityCount> Adresse : $s.address
#fin
Recompilez et exécutez la commande run, les résultats sont les suivants :
<1> Adresse : Guangzhou
<2> Adresse : Zhuhai
De cette façon, les données des étudiants dans la liste sont imprimées et le tour est joué ! La variable intégrée $velocityCount de Velocity est utilisée ici, qui fait référence au numéro de séquence d'énumération par défaut. Elle commence à 1. Elle peut également être modifiée à 0, mais elle doit être modifiée dans Velocity.properties qui se trouve dans Velocity.properties. le package Velocity-1.4.jar. Sous le répertoire org\apache\velocity \runtime\defaults .
Comment gérer des itérations plus complexes ? Examinons l'exemple de modèle suivant pour que ce soit clair :
#foreach ($élément dans $list)
-- avant-bras intérieur --
#foreach ($élément dans $list)
C'est l'élément $.
$VelocityCount
#fin
-- avant-bras intérieur --
-- avant-bras externe --
C'est l'élément $.
$VelocityCount
-- avant-bras externe --
#fin
Comme vous pouvez le voir, Velocity prend en charge l'imbrication de balises. Il s'agit d'une fonction très puissante, je ne la démontrerai pas en profondeur ici. Si vous êtes intéressé, essayez-la vous-même.
En fait, si vous réfléchissez un peu plus en profondeur à l’exemple que nous venons de donner, vous voyez déjà, à quoi sert Velocity ? Il s'agit du modèle Servlet + Velocity. De plus, vous souvenez-vous encore de notre premier modèle de développement Jsp, Jsp+JavaBean ? Ici, nous avons changé pour Servlet+JavaBean+Velocity. Pensez-y, a-t-il remplacé Jsp+JavaBean et supprimé plus complètement le code Java de Jsp (vm). Si vous utilisez uniquement Struts (Servlet+Jsp), alors le coût est. que le code Java apparaît toujours plus ou moins dans JSP Même si cela peut être réalisé sans code Java, les développeurs qui ont réalisé des systèmes d'architecture complexes savent que le coût est également très cher, et en termes de maintenabilité, il existe certaines difficultés dans le développement intégré. avec les web designers, on sent donc ici que le modèle Servlet+JavaBean+Velocity réalise mieux le concept d'OOD. En termes d'efficacité, vous n'avez pas à vous inquiéter. Cette combinaison est plus efficace que la méthode Servlet+Jsp.
Il devrait y avoir beaucoup de gens désireux d'en apprendre davantage sur Velocity, mais peut-être que peu peuvent réellement l'appliquer à des projets (certains projets l'utilisent encore, comme Jute). Après tout, comparé à Jsp, Jsp est plus standard et largement utilisé. et de nombreux outils de développement ont été utilisés. Mais la fonction de Velocity ne se limite pas à la concurrence avec Jsp. Comme le montre ce qui précède, elle est très puissante en matière de sortie automatique de code. Comme mentionné précédemment, Turbine utilise Velocity pour générer beaucoup de code. . C'est une très bonne idée d'en faire un générateur de code ou une autre génération de modèles.
D'accord, examinons quelques problèmes courants auxquels il faut prêter attention si vous souhaitez approfondir Velocity pour réaliser des projets. Le premier est la question de l'internationalisation.
Velocity lui-même prend en charge la conversion d'encodage international des modèles. Jetez un œil aux méthodes fournies par Velocity :
Modèle public getTemplate (modèle Stirng, encodage de chaîne),
On suppose que cette approche ne peut pas parvenir à une internationalisation complète.
Le concept d'internationalisation le plus simple dans Struts consiste à utiliser des balises de langue internationales sur Jsp, et chaque langue utilise une bibliothèque de balises de langue différente, par extension, cela peut en fait être effectué manuellement. Oui, cela nécessite juste un peu de traitement manuel.
Heureusement, quelqu'un a déjà résolu le problème mentionné ci-dessus et créé les outils de Velocity : MessageTool, qui fournit le texte variable pour contenir les étiquettes internationalisées. De cette façon, il vous suffit d'écrire le code de l'étiquette, tel que : $text.get('title. ' ), un contenu plus spécifique peut également être trouvé sur http://jakarta.apache.org/velocity/tools/struts/MessageTool.html .
D'accord, tout est basé sur l'introduction de Velocity, parlons d'autres extensions. Certaines personnes ont fait remarquer que Velocity n'est pas une structure MVC standard. Oui, nous avons dit au début que Velocity n'est qu'une bonne combinaison entre Model et View, et n'est qu'un bon moteur de modèle. Après tout, il n'y a pas encore de bonne combinaison de MVC. été formé. Heureusement, Apache a lancé VelocityStruts basé sur la combinaison de Struts et Velocity. Nous pouvons présenter cette partie de la déclaration dans une rubrique ultérieure. Voici une brève introduction à son concept. Il est basé sur la structure de Struts et l'action de la logique métier. traitement. Enfin, le processus métier est déplacé vers la couche d'affichage en fonction de la vitesse, remplaçant ainsi Jsp en tant que couche d'affichage. Nous avons également vu plus haut que les exemples cités sont essentiellement basés sur des principes et des démonstrations, et ne sont pas étroitement intégrés au développement Web. Nous combinerons cet aspect lors de la description du contenu de VelocityStruts.
Introduction à l'utilisation de Velocity - code en Java
1. Initialisez d’abord l’objet
Contexte VelocityContext = new VelocityContext();
StringWriter écrivain = new StringWriter();
Encodage de chaîne2 = "GBK" ;
2. PROPERTY_PATH = TEMPLATE_INIT_PATH dans le fichier de propriétés système (Spécifiez le chemin du fichier de propriétés requis pour la vitesse.)
3. Contenu dans les propriétés
file.resource.loader.path = D:/resin/webapps/mip/files/templateupload/ (où se trouve le modèle)
4. Initialisez ensuite Velocity.init(PROPERTY_PATH);
5. Faites correspondre les étiquettes en vitesse à java context.put(key, value);
6. Chargez ensuite le fichier Velocity.mergeTemplate(templateName, encoding2, context,writer);
7. Enfin, appelez Generator.writeToFile() pour générer le fichier.
8. La fonction writeToFile est la suivante :
FileOutputStream de = new FileOutputStream(theFile);
of.write(writer.toString().getBytes("GBK"));
// Chaîne tt = écrivain.toString();
de.flush();
de.close();
Cet article provient du blog CSDN Veuillez indiquer la source lors de la réimpression : http://blog.csdn.net/sunrui_work/archive/2009/12/18/5029982.aspx.