Einführung in die Apache Velocity

Einführung in Apache Velocity

1. Überblick

Velocity ist eine Java-basierte Template-Engine.

Es handelt sich um ein Open Source-Webframework, das als Ansichtskomponente in der MVC-Architektur verwendet werden soll, und bietet eine Alternative zu einigen vorhandenen Technologien wie JSP.

Mit Velocity können XML-Dateien, SQL, PostScript und die meisten anderen textbasierten Formate generiert werden.

In diesem Artikel erfahren Sie, wie Sie damit dynamische Webseiten erstellen können.

2. Wie Geschwindigkeit funktioniert

Die Kernklasse der Geschwindigkeit istVelocityEngine.

Es koordiniert den gesamten Prozess des Lesens, Analysierens und Generierens von Inhalten mithilfe des Datenmodells und der Geschwindigkeitsvorlage.

Einfach ausgedrückt, hier sind die Schritte, die wir für jede typische Velocity-Anwendung ausführen müssen:

  • Initialisieren Sie die Geschwindigkeitsmaschine

  • Lesen Sie die Vorlage

  • Setzen Sie das Datenmodell in das Kontextobjekt

  • Verbinden Sie die Vorlage mit Kontextdaten und rendern Sie die Ansicht

Let’s go through an example folgen diesen einfachen Schritten:

VelocityEngine velocityEngine = new VelocityEngine();
velocityEngine.init();

Template t = velocityEngine.getTemplate("index.vm");

VelocityContext context = new VelocityContext();
context.put("name", "World");

StringWriter writer = new StringWriter();
t.merge( context, writer );

3. Maven-Abhängigkeiten

Um mit Velocity arbeiten zu können, müssen wir unserem Maven-Projekt die folgenden Abhängigkeiten hinzufügen:


    org.apache.velocity
    velocity
    1.7
    

     org.apache.velocity
     velocity-tools
     2.0

Die neueste Version dieser beiden Abhängigkeiten kann hier sein:velocity undvelocity-tools.

4. Velocity Template Language

Velocity Template Language (VTL) bietet die einfachste und sauberste Möglichkeit, den dynamischen Inhalt mithilfe von VTL-Referenzen in eine Webseite einzubinden.

Die VTL-Referenz in der Geschwindigkeitsvorlage beginnt mit einem$ und wird verwendet, um den dieser Referenz zugeordneten Wert abzurufen. VTL bietet auch eine Reihe von Anweisungen, mit denen die Ausgabe des Java-Codes bearbeitet werden kann. Diese Anweisungen beginnen mit#.

4.1. Verweise

Es gibt drei Arten von Referenzen in Velocity, Variablen, Eigenschaften und Methoden:

  • variables - innerhalb der Seite mithilfe der Direktive oder des Werts von#setdefiniert, der vom Feld des Java-Objekts zurückgegeben wird:

    #set ($message="Hello World")
  • properties - beziehen sich auf Felder innerhalb eines Objekts; Sie können sich auch auf diegetter-Methode der Eigenschaft beziehen:

    $customer.name
  • methods - beziehen sich auf die Methode für Java-Objekte:

    $customer.getName()

Der aus jeder Referenz resultierende Endwert wird beim Rendern in die endgültige Ausgabe in eine Zeichenfolge konvertiert.

4.2. Richtlinien

VTL bietet eine Vielzahl von Anweisungen:

  • set - kann zum Einstellen des Referenzwerts verwendet werden; Dieser Wert kann einer Variablen oder einer Eigenschaftsreferenz zugewiesen werden:

    #set ($message = "Hello World")
    #set ($customer.name = "Brian Mcdonald")
  • conditionals -#if, #elseif und#else Anweisungen bieten eine Möglichkeit, den Inhalt basierend auf bedingten Überprüfungen zu generieren:

    #if($employee.designation == "Manager")
        

    Manager

    #elseif($employee.designation == "Senior Developer")

    Senior Software Engineer

    #else

    Trainee

    #end
  • loops -#foreach Direktive ermöglicht das Durchlaufen einer Sammlung von Objekten:

      #foreach($product in $productList)
    • $product
    • #end
  • include -#include Element bietet die Möglichkeit, Dateien in die Vorlage zu importieren:

    #include("one.gif","two.txt","three.html"...)
  • Mit der Anweisungparse -#parsekann der Vorlagen-Designer eine andere lokale Datei importieren, die VTL enthält. Velocity analysiert dann den Inhalt und rendert ihn:

    #parse (Template)
  • evaluate -#evaluate Direktive kann verwendet werden, um VTL dynamisch auszuwerten; Auf diese Weise kann die Vorlage beim Rendern einen Prozentsatz (t2) auswerten, um beispielsweise die Vorlage zu internationalisieren:

    #set($firstName = "David")
    #set($lastName = "Johnson")
    
    #set($dynamicsource = "$firstName$lastName")
    
    #evaluate($dynamicsource)
  • break -#break Direktive stoppt jedes weitere Rendern des aktuellen Ausführungsbereichs (d. H. #foreach,#parse)

  • stop - Die Direktive#stoptoppt das weitere Rendern und Ausführen der Vorlage.

  • velocimacros -#macro Direktive ermöglicht es dem Template Designer, ein wiederholtes Segment von VTL zu definieren:

    #macro(tablerows)
        
            
            
        
    #end

    Dieses Makro kann jetzt an einer beliebigen Stelle in der Vorlage als #tablerows(): eingefügt werden

    #macro(tablerows $color $productList)
        #foreach($product in $productList)
            
                $product.name
            
        #end
    #end

4.3. Andere Eigenschaften

  • math - eine Handvoll integrierter mathematischer Funktionen, die in Vorlagen verwendet werden können:

    #set($percent = $number / 100)
    #set($remainder = $dividend % $divisor)
  • range operator - kann in Verbindung mit#set und#foreach: verwendet werden

    #set($array = [0..10])
    
    #foreach($elem in $arr)
        $elem
    #end

5. Velocity Servlet

Die Hauptaufgabe der Velocity Engine besteht darin, Inhalte auf der Grundlage einer Vorlage zu generieren.

Die Engine enthält an sich keine webbezogenen Funktionen. Um eine Webanwendung zu implementieren, müssen Sie ein Servlet oder ein servletbasiertes Framework verwenden.

Velocity bietet eine sofort einsatzbereite ImplementierungVelocityViewServlet, die Teil des Teilprojekts Velocity-Tools ist.

Um die integrierte Funktionalität vonVelocityViewServlet, zu nutzen, können wir unser Servlet vonVelocityViewServlet erweitern und die MethodehandleRequest() überschreiben:

public class ProductServlet extends VelocityViewServlet {

    ProductService service = new ProductService();

    @Override
    public Template handleRequest(
      HttpServletRequest request,
      HttpServletResponse response,
      Context context) throws Exception {

        List products = service.getProducts();
        context.put("products", products);

        return getTemplate("index.vm");
    }
}

6. Aufbau

6.1. Webkonfiguration

Lassen Sie uns nun sehen, wie Sie dieVelocityViewServlet inweb.xml konfigurieren.

Wir müssen die optionalen Initialisierungsparameter angeben, dievelocity.properties undtoolbox.xml umfassen:


    apache-velocity
      //...

    
        velocity
        org.apache.velocity.tools.view.VelocityViewServlet

        
            org.apache.velocity.properties
            /WEB-INF/velocity.properties
        
    
        //...

Wir müssen auch die Zuordnung für dieses Servlet angeben. Alle Anforderungen für Geschwindigkeitsvorlagen (*.vm) müssen vom Geschwindigkeitsservlet bedient werden:


    velocityLayout
    *.vm

6.2. Ressourcenlader

Velocity bietet ein flexibles System zum Laden von Ressourcen. Damit können ein oder mehrere Resource Loader gleichzeitig in Betrieb sein:

  • FileResourceLoader

  • JarResourceLoader

  • ClassPathResourceLoader

  • URLResourceLoader

  • DataSourceResourceLoader

  • WebappResourceLoader

Diese Ressourcenlader werden invelocity.properties: konfiguriert

resource.loader=webapp
webapp.resource.loader.class=org.apache.velocity.tools.view.WebappResourceLoader
webapp.resource.loader.path =
webapp.resource.loader.cache = true

7. Geschwindigkeitsvorlage

Die Velocity-Vorlage ist der Ort, an dem die gesamte Logik zur Generierung von Ansichten geschrieben wird. Diese Seiten wurden mit Velocity Template Language (VTL) geschrieben:


    ...
    
        
...

$products.size() Products on Sale!


We are proud to offer these fine products at these amazing prices. ... #set( $count = 1 ) #foreach( $product in $products ) #set( $count = $count + 1 ) #end
Serial # Product Name Price
$count) $product.getName() $product.getPrice()

8. Seitenlayout verwalten

Velocity bietet eine einfache Layoutsteuerung und anpassbare Fehlerbildschirme für die Velocity Tool-basierte Anwendung.

VelocityLayoutServlet kapselt diese Funktion zum Rendern der angegebenen Layouts. VelocityLayoutServlet ist eine Erweiterung vonVelocityViewServlet.

8.1. Webkonfiguration

Sehen wir uns an, wieVelocityLayoutServlet. konfiguriert werden. Das Servlet ist zum Abfangen der Anforderungen für Geschwindigkeitsvorlagenseiten definiert, und die layoutspezifischen Eigenschaften sind in der Dateivelocity.propertiesdefiniert:


    // ...
    
        velocityLayout
        org.apache.velocity.tools.view.VelocityLayoutServlet

        
            org.apache.velocity.properties
            /WEB-INF/velocity.properties
        
    
    // ...
    
        velocityLayout
        *.vm
    
    // ...

8.2. Layoutvorlagen

Die Layoutvorlage definiert die typische Struktur einer Velocity-Seite. Standardmäßig suchtVelocityLayoutServlet im Layoutordner nachDefault.vm. Durch Überschreiben weniger Eigenschaften kann dieser Speicherort geändert werden:

tools.view.servlet.layout.directory = layout/
tools.view.servlet.layout.default.template = Default.vm

Die Layoutdatei besteht aus einer Kopf- und einer Fußzeilenvorlage sowie einer Geschwindigkeitsvariablen$screen_content, die den Inhalt der angeforderten Geschwindigkeitsseite wiedergibt:


    
        Velocity
    
    
        
#parse("/fragments/header.vm")
$screen_content
#parse("/fragments/footer.vm")

8.3. Layoutspezifikation im angeforderten Bildschirm

Das Layout für einen bestimmten Bildschirm kann als Geschwindigkeitsvariable am Anfang einer Seite definiert werden. Dazu setzen Sie diese Zeile in die Seite:

#set($layout = "MyOtherLayout.vm")

8.4. Layoutspezifikation im Anforderungsparameter

Wir können einen Anforderungsparameter in die Abfragezeichenfolgelayout=MyOtherLayout.vm einfügen, und VLS findet ihn und rendert den Bildschirm in diesem Layout, anstatt nach dem Standardlayout zu suchen.

8.5. Fehlerbildschirme

Der benutzerdefinierte Fehlerbildschirm kann mithilfe des Geschwindigkeitslayouts implementiert werden. VelocityLayoutServlet bietet zwei Variablen$error_cause und$stack_trace, um die Ausnahmedetails darzustellen.

Die Fehlerseite kann in der Dateivelocity.propertieskonfiguriert werden:

tools.view.servlet.error.template = Error.vm

9. Fazit

In diesem Artikel haben wir gelernt, wie Velocity ein nützliches Werkzeug zum Rendern der dynamischen Webseiten ist. Wir haben auch verschiedene Arten der Verwendung von Servlets mit Geschwindigkeit gesehen.

Wir haben auch einen Artikel über eine Geschwindigkeitskonfiguration mit Spring MVChere at example.

Der vollständige Code für dieses Tutorial istover on GitHub verfügbar.