Velocity è un progetto open source di Apache Software Foundation che definisce un template-engine per applicazioni web java-based. Velocity permette di referenziare, e quindi di utilizzare degli oggetti java, all’interno dei template che definiscono lo strato di presentation di un’applicazione web. Vediamo come integrare il framework messo a disposizione da Apache all’interno di un contesto Struts MVC. A tale scopo viene creato un progetto di esempio utilizzando l’IDE Eclipse.
STEP 1.
Avviare Eclipse e creare un nuovo progetto web dinamico (File >New >Dynamic Web Project)
STEP 2.
Scaricare e scompattare l’archivio Struts 1.3 : http://struts.apache.org/download.cgi
STEP 3.
Scompattare il file war struts-blank
STEP4.
Copiare le librerie jar nel classpath del progetto
$ cp struts_unzipped/apps/struts-blank/WEB-INF/lib/* my_eclipse_project/WebContent/WEB-INF/lib $ cp struts_unzipped/lib/struts-extras*.jar my_eclipse_project/WebContent/WEB-INF/lib
STEP 5.
Copiare i flle di configurazuione struts e validator nel progetto
$ cp struts_unzipped/apps/struts-blank/WEB-INF/struts-config.xml my_eclipse_project/WebContent/WEB-INF/ $ cp struts_unzipped/apps/struts-blank/WEB-INF/validation.xml my_eclipse_project/WebContent/WEB-INF/
STEP 6.
Scaricare e scompattare l’archivio velocity-tools : http://velocity.apache.org/download.cgi#Tools
STEP 7.
Copiare in WebContent/WEB-INF/lib le seguenti librerie:
– commons-collections-*.jar
– commons-lang-*.jar
– velocity-*.jar
– velocity-tools-*.jar
STEP 8.
Spostarsi sul progetto in Eclipse e cofigurare i seguenti file:
WebContent/WEB-INF/velocity.properties
# #--------------------------- # VELOCITY PROPERTIES #--------------------------- runtime.log.error.stacktrace = false runtime.log.warn.stacktrace = false runtime.log.info.stacktrace = false runtime.log.invalid.reference = true input.encoding=ISO-8859-1 output.encoding=ISO-8859-1 directive.foreach.counter.name = velocityCount directive.foreach.counter.initial.value = 1 directive.include.output.errormsg.start = <!-- include error : directive.include.output.errormsg.end = see error log --> directive.parse.max.depth = 10 #velocimacro.library = /WEB-INF/velocity/template/VM_global_lib.vm velocimacro.permissions.allow.inline = true velocimacro.permissions.allow.inline.to.replace.global = false velocimacro.permissions.allow.inline.local.scope = false velocimacro.context.localscope = false velocimacro.library.autoreload = true runtime.interpolate.string.literals = true resource.loader = webapp webapp.resource.loader.description = Velocity WebApp Resource Loader webapp.resource.loader.class = org.apache.velocity.tools.view.servlet.WebappLoader webapp.resource.loader.path = / webapp.resource.loader.cache = false webapp.resource.loader.modificationCheckInterval = 0 tools.view.servlet.layout.directory = /template/ tools.view.servlet.layout.default.template = layout.vm
WebContent/WEB-INF/template/layout.vm
<html> <head> <link rel="stylesheet" href="/css/my.css" media="all" type="text/css"> </head> <body> <div align="center" > <table class="tabellaLayout" > <tr > <td ><div align="center" >#parse("/template/header.vm")</div> </td> </tr> <tr > <td ><div align="center">$screen_content</div></td> </tr> <tr > <td ><div align="center">#parse("/template/footer.vm")</div></td> </tr> </table> </div> </body> </html>
WebContent/WEB-INF/template/header.vm
<table > <tr > <td >MY HEADER</td> </tr> </table>
WebContent/WEB-INF/template/footer.vm
<table > <tr > <td > MY FOOTER</td> </tr> </table>
WebContent/WEB-INF/css/my.css
body { font-family: sans-serif; font-size: 16px; background-image:url("../images/sfondo.png"); background-position: center; background-repeat: no-repeat; } table { width: 800px; font-size: 12px; border-collapse:separate; border: 1px; border-style: outset; } th { background : #D1D8FF; font-size: 12px; } td { font-size: 11px; } .tabellaLayout { height: 600px; width: 800px; font-size: 12px; border-collapse:separate; border: 1px; border-style: outset; } .tabellaElenco{ width: 700px; font-size: 12px; border-collapse:separate; border: 1px; border-style: outset; } .titoloElenco { font-size: 14px; font-weight: bold; text-align: center; } .divFooter{ }
WebContent/WEB-INF/tools.xml
<?xml version="1.0"?> <toolbox> <tool> <key>link</key> <scope>request</scope> <class>org.apache.velocity.tools.struts.StrutsLinkTool</class> </tool> <tool> <key>msg</key> <scope>request</scope> <class>org.apache.velocity.tools.struts.MessageTool</class> </tool> <tool> <key>errors</key> <scope>request</scope> <class>org.apache.velocity.tools.struts.ErrorsTool</class> </tool> <tool> <key>form</key> <scope>request</scope> <class>org.apache.velocity.tools.struts.FormTool</class> </tool> <tool> <key>tiles</key> <scope>request</scope> <class>org.apache.velocity.tools.struts.TilesTool</class> </tool> <tool> <key>validator</key> <scope>request</scope> <class>org.apache.velocity.tools.struts.ValidatorTool</class> </tool> <tool> <key>cookie</key> <scope>request</scope> <class>org.apache.velocity.tools.view.tools.CookieTool</class> </tool> <tool> <key>esc</key> <scope>application</scope> <class>org.apache.velocity.tools.generic.EscapeTool</class> </tool> </toolbox>
STEP 9.
Modificare il file WebContent/WEB-INF/web.xml con le servlet di velocity:
<!-- Standard Action Servlet Configuration --> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> <!-- Define Velocity template compiler --> <servlet> <servlet-name>velocity</servlet-name> <servlet-class>org.apache.velocity.tools.view.servlet.VelocityLayoutServlet</servlet-class> </servlet> <!-- Map *.vm files to Velocity --> <servlet-mapping> <servlet-name>velocity</servlet-name> <url-pattern>*.vm</url-pattern> </servlet-mapping>
STEP 10.
Creare una pagina di test velocity, per esempio WebContent/velocityPage.vm:
#set($test="Congratulations! You are using the Apache Velocity template engine") <h3>$!test<h3>
STEP 11.
Modificare WebContent/struts-config.xml
<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd"> <struts-config> <action-mappings> <action path="/testVelocity" forward="/velocityPage.vm" /> </action-mappings> </struts-config>
Ecco come dovrebbe apparire il layout del progetto
Avviare Tomcat e aprire sul browser l’url http://localhost:8080/sample-project/testVelocity.do