Apache Velocity Engine
Total Page:16
File Type:pdf, Size:1020Kb
Apache Velocity Engine Markus Auchmann [email protected] Schedule • Fundamentals • Velocity Introduction • Velocity Hello World! • Velocity Template Language • Sample Applications • Summary Slide 2 Apache Velocity Engine Fundamentals Template Engine (1/2) A template engine is a software or a software component that is designed to combine one or more templates with a data model to produce one or more result documents. “A template engine is a code generator that emits text using templates embedded with actions or data references. Engines generally espouse a model-view pattern in an attempt to separate the data source and template..” [Antl06] Slide 4 Apache Velocity Engine Template Engine (2/2) Elements: • Data Model • Source Template • Template Engine • Result Document Slide 5 Apache Velocity Engine Model View Controller Task: “ … separate core business model functionality from the presentation and control logic” Slide 6 Apache Velocity Engine Web Template Engine Web template engines are designed to produce web pages or web documents to be delivered over the internet. Slide 7 Apache Velocity Engine Summary Goals of a (Web) Template Engine: • Separation of application code from the presentation • Avoid breaking of application by designers • Template lets designer focus on presentation • Advantages of the Model View Controller Slide 8 Apache Velocity Engine Velocity Introduction History • First version March 2001 • Many releases • Latest stable Version is 1.4 • Since October 2006 upgraded into an Apache Top Level Project (TLP) • Current beta Version 1.5 – beta2 • Final release of 1.5 upcoming soon Slide 10 Apache Velocity Engine Features “Velocity is a Java-based template engine. It permits anyone to use a simple yet powerful template language to reference objects defined in Java code.” [Velo06] • Clear separation between Model, View and Controller • Creation of Web Applications using servlets • Can generate output files in any format • Easy to use template language Slide 11 Apache Velocity Engine Fundamentals Slide 12 Apache Velocity Engine Fundamentals – Context (1/3) • Hashtable • Provides get and set methods • Accessible from the view and the controller Slide 13 Apache Velocity Engine Fundamentals – Context (2/3) Hashtable: Java.lang.String Java.lang.Object „Entry“ String(„ein Text“) „something“ Vector „Vector“ Array[] Slide 14 Apache Velocity Engine Fundamentals – Context (3/3) Methods: • boolean containsKey(java.lang.Object key) • java.lang.Object get(java.lang.String key) • java.lang.Object[] getKeys() • java.lang.Object put(java.lang.String key, - java.lang.Object value) • java.lang.Object remove(java.lang.Object key) Slide 15 Apache Velocity Engine Fundamentals – Controller • Java Code • Access model • Access Context • Store information in Context • Provide methods for the Designer Slide 16 Apache Velocity Engine Fundamentals – View • Using the Velocity Template Language • Provide look and feel of the application • Use methods provided by the Controller • Use Context to retrieve and store information Slide 17 Apache Velocity Engine Fundamentals – Model • Not part of Velocity itself • Used to make applications dynamic Slide 18 Apache Velocity Engine Hello World! Task • Create a Hello World application • The text should be stored by the controller into the Context • Designer should retrieve this Object and output it Slide 20 Apache Velocity Engine View • Using the VTL 1 <HTML> 2 <BODY> 3 $hello 4 </BODY> 5 </HTML> Slide 21 Apache Velocity Engine Controller • Create the Object 1 String hello = new String("Hello World!"); Slide 22 Apache Velocity Engine Velocity comes into play Task: • Retrieve Template • Merge template and Context • Generate output General Pattern Slide 23 Apache Velocity Engine 1. Initialize Velocity • Singleton Model • One instance of Velocity in the JVM 14 Velocity.init(); Slide 24 Apache Velocity Engine 2. Create Template 21 Template template = null; 22 try { 23 template = Velocity.getTemplate("helloworld.vm"); 24} Slide 25 Apache Velocity Engine 3. Create Context 33 VelocityContext context = new VelocityContext(); Slide 26 Apache Velocity Engine 4. Put something into the Context • Using the “put” method of the Context Object 36 context.put("hello", "Hello World!"); Slide 27 Apache Velocity Engine 5. Merge Template and Context • Create a “writer” • Call the “merge” method • Pass the Context object and the output writer object • Merge is done (replacing VTL) 39 StringWriter writer = new StringWriter(); 40 41 try { 42 template.merge(context, writer); 43 } Slide 28 Apache Velocity Engine 6. Show result • Output is sent to the writer object • Use the “toString” method to output it to the console 48 System.out.println (writer.toString()); Slide 29 Apache Velocity Engine Output • Compile java Code • Execute Slide 30 Apache Velocity Engine Summary General Pattern: • Initialize Velocity • Create Template • Create Context • Put something into the Context • Merge Template and Context • Output Slide 31 Apache Velocity Engine Velocity Template Language Introduction • Used by the Designer • (Should be) easy to use Grouped into: • References • Directives • Velimacros Slide 33 Apache Velocity Engine References – Variables (1/2) • Used to get values out of the Context 1 context.put("object", new Object()); 2 context.put("integer", new Integer(99)); 3 context.put("string", new String("String")); Slide 34 Apache Velocity Engine References – Variables (2/2) 1 Object: 2 $object 3 Integer: 4 $integer 5 String: 6 $string Slide 35 Apache Velocity Engine References – Methods (1/2) • Access to Objects provided by the Context Friend -name -age +setName() +setAge() +getFriend() 1 context.put("friend", new Friend()); Slide 36 Apache Velocity Engine References – Methods (2/2) 1 Set the name of my friend ... 2 $friend.setName("Christoph Huber") 3 4 Set the age of my friend ... $friend.setAge(25) 5 6 $friend.getFriend() Slide 37 Apache Velocity Engine Directives – #set (1/2) • Add values to the Context • Modify existing values 1 context.put("value", "a value added by java"); Slide 38 Apache Velocity Engine Directives – #set (2/2) 1 Before we use the set directive: 2 new value: $newValue 3 old value: $value 4 5 #set($newValue = "a new value added by VTL") 6 #set($value = "a value modified by VTL") 7 After the use of the set directive: 8 new value: $newValue 9 old value: $value Slide 39 Apache Velocity Engine Directives - Overview • #set • #if • #else • #elseif • #foreach • #include • #parse • #stop Slide 40 Apache Velocity Engine Velimacros – Overview „The #macro script element allows template designers to define a repeated segment of a VTL template. Velocimacros are very useful in a wide range of scenarios both simple and complex.“ [VUse06] • Usage: 1 #macro(hello $who) 2 Hello $who! 3 #end 4 5 #hello("Markus") Slide 41 Apache Velocity Engine Sample Applications XML Parsing XML Parsing – Task • Parse XML file and make it available in the Context Slide 44 Apache Velocity Engine XML Parsing – Model 1 <?xml version='1.0' encoding='utf-8'?> 2 <Friends> 3 <Friend> 4 <Name>Christoph Huber</Name> 5 <Age>21</Age> 6 </Friend> 7 8 <Friend> 9 <Name>Niki Lauda</Name> 10 <Age>57</Age> 11 </Friend> 12 [...] Slide 45 Apache Velocity Engine XML Parsing – View 1 My friends are: 2 #foreach($element in $Vector) 3 #if("break" == $element) 4 5 #else 6 $element 7 #end 8 #end Slide 46 Apache Velocity Engine XML Parsing – Controller • Parse XML file with DOM • Read nodes and put it into the Vector • Separate entries by adding “break” Slide 47 Apache Velocity Engine Using BSF Overview “Bean Scripting Framework (BSF) is a set of Java classes which provides scripting language support within Java applications, and access to Java objects and methods from scripting languages.“ [JBSF06] Covered in my thesis: • Jacl – Tcl • Rhino – JavaScript • BSF4Rexx - ObjectRexx Slide 49 Apache Velocity Engine oORexx to access the Model (1/2) References: • Stefan Schmid: OpenOffice.org Database • Andreas Ahammer: OpenOffice.org Automation Slide 50 Apache Velocity Engine oORexx to access the Model (2/2) Task: • Query DB • Return result Slide 51 Apache Velocity Engine Output Controller • Store result from oORexx into the Context View • Output result Slide 52 Apache Velocity Engine Velbook Task • Web Application • Guestbook • Insert: name, mail, homepage, text • Name and text mandatory • Using the VelocityViewServlet • ParameterParser • Tomcat • MySQL Slide 54 Apache Velocity Engine Controller • Java • Velocity Slide 55 Apache Velocity Engine View • VTL • Designer Slide 56 Apache Velocity Engine Model • JDBC • MySQL • Java Slide 57 Apache Velocity Engine The Meeting Slide 58 Apache Velocity Engine The Meeting Methods Ok! Collections Slide 59 Apache Velocity Engine The Meeting @$”=)$/%=§ :( Slide 60 Apache Velocity Engine The Meeting Ok! Methods Slide 61 Apache Velocity Engine Velbook in Action Velocity powering Ajax Introduction • Generate every output file • Generate XML files • To declare file as XML --> Velocity Properties 1 default.contentType = text/xml Slide 64 Apache Velocity Engine Summary Thanks for your attention Questions?.