| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
| |
| <!-- |
| Copyright 1999-2004 The Apache Software Foundation |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| |
| |
| <!-- Content Stylesheet for Site --> |
| |
| |
| <!-- start the processing --> |
| <!-- ====================================================================== --> |
| <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! --> |
| <!-- Main Page Section --> |
| <!-- ====================================================================== --> |
| <html> |
| <head> |
| <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> |
| |
| <meta name="author" value="Velocity Documentation Team"> |
| <meta name="email" value="Paw Dybdahl (pdy@csg.csc.dk)"> |
| |
| |
| |
| |
| <title>Velocity - Using Velocity With WebLogic</title> |
| </head> |
| |
| <body bgcolor="#ffffff" text="#000000" link="#525D76"> |
| <table border="0" width="100%" cellspacing="0"> |
| <!-- TOP IMAGE --> |
| <tr> |
| <td align="left"> |
| <a href="http://jakarta.apache.org"><img src="http://jakarta.apache.org/images/jakarta-logo.gif" border="0"/></a> |
| </td> |
| <td align="right"> |
| <a href="http://jakarta.apache.org/velocity/"><img src="./images/logo.gif" alt="Velocity" border="0"/></a> |
| </td> |
| </tr> |
| </table> |
| <table border="0" width="100%" cellspacing="4"> |
| <tr><td colspan="2"> |
| <hr noshade="" size="1"/> |
| </td></tr> |
| |
| <tr> |
| <!-- LEFT SIDE NAVIGATION --> |
| <td width="20%" valign="top" nowrap="true"> |
| |
| <!-- ============================================================ --> |
| |
| <p><strong>About</strong></p> |
| <ul> |
| <li> <a href="./index.html">Overview</a> |
| </li> |
| <li> <a href="./getting-started.html">Getting Started</a> |
| </li> |
| <li> <a href="http://jakarta.apache.org/builds/jakarta-velocity/">Download</a> |
| </li> |
| <li> <a href="./install.html">Install</a> |
| </li> |
| <li> <a href="./design.html">Design</a> |
| </li> |
| <li> <a href="./contributors.html">Contributors</a> |
| </li> |
| <li> <a href="./changes.html">ChangeLog</a> |
| </li> |
| <li> <a href="./code-standards.html">Coding Standards</a> |
| </li> |
| <li> <a href="./license.html">License</a> |
| </li> |
| <li> <a href="./todo.html">TODO</a> |
| </li> |
| <li> <a href="http://issues.apache.org/bugzilla/enter_bug.cgi?product=Velocity">Report Issues</a> |
| </li> |
| </ul> |
| <p><strong>Community</strong></p> |
| <ul> |
| <li> <a href="./powered.html">Powered By Velocity</a> |
| </li> |
| <li> <a href="http://jakarta.apache.org/site/getinvolved.html">Get Involved</a> |
| </li> |
| <li> <a href="http://jakarta.apache.org/site/mail.html">Mailing Lists</a> |
| </li> |
| <li> <a href="http://jakarta.apache.org/site/cvsindex.html">CVS Repositories</a> |
| </li> |
| </ul> |
| <p><strong>Docs</strong></p> |
| <ul> |
| <li> <a href="./user-guide.html">User's Guide (English)</a> |
| </li> |
| <li> <a href="./user-guide_fi.html">User's Guide (Finnish)</a> |
| </li> |
| <li> <a href="./user-guide_fr.html">User's Guide (French)</a> |
| </li> |
| <li> <a href="./user-guide_es.html">User's Guide (Spanish)</a> |
| </li> |
| <li> <a href="./developer-guide.html">Developer's Guide</a> |
| </li> |
| <li> <a href="./vtl-reference-guide.html">VTL Reference Guide</a> |
| </li> |
| <li> <a href="./specification.html">Specification</a> |
| </li> |
| <li> <a href="./api/index.html">Javadoc</a> |
| </li> |
| </ul> |
| <p><strong>Tools</strong></p> |
| <ul> |
| <li> <a href="./tools/index.html">Velocity Tools</a> |
| </li> |
| <li> <a href="./anakia.html">Anakia : XML->doc tool</a> |
| </li> |
| <li> <a href="./texen.html">Texen : text generation</a> |
| </li> |
| <li> <a href="./dvsl/index.html">DVSL : XML xformation</a> |
| </li> |
| <li> <a href="./veltag.html">Veltag : JSP taglib</a> |
| </li> |
| <li> <a href="./migration.html">Migration to Velocity</a> |
| </li> |
| <li> <a href="./devtools.html">Editors and IDEs</a> |
| </li> |
| </ul> |
| <p><strong>Comparisons</strong></p> |
| <ul> |
| <li> <a href="./ymtd/ymtd.html">YMTD</a> |
| </li> |
| <li> <a href="./differences.html">VM/WM Differences</a> |
| </li> |
| <li> <a href="./casestudy1.html">JSP vs. Velocity</a> |
| </li> |
| <li> <a href="./casestudy2.html">XMLC vs. Velocity</a> |
| </li> |
| </ul> |
| <p><strong>Site Translations</strong></p> |
| <ul> |
| <li> <a href="http://jakarta.apache.org/velocity/">English</a> |
| </li> |
| <li> <a href="http://www.ingrid.org/jajakarta/velocity/velocity-1.2-rc2/docs-ja/index.html">Japanese</a> |
| </li> |
| </ul> |
| </td> |
| <td width="80%" align="left" valign="top"> |
| <table border="0" cellspacing="0" cellpadding="2" width="100%"> |
| <tr><td bgcolor="#525D76"> |
| <font color="#ffffff" face="arial,helvetica,sanserif"> |
| <a name="Contents"><strong>Contents</strong></a> |
| </font> |
| </td></tr> |
| <tr><td> |
| <blockquote> |
| <ol> |
| <li> |
| <a href="velocity_and_weblogic.html#Assumptions">Assumptions</a> |
| </li> |
| <li> |
| <a href="velocity_and_weblogic.html#The Scope Of This Guide">The Scope Of This Guide</a> |
| </li> |
| <li> |
| <a href="velocity_and_weblogic.html#Where to Put the Template Files"> |
| Where To Put the Template Files</a> |
| </li> |
| <li> |
| <a href="velocity_and_weblogic.html#Setting the Configuration Properties"> |
| Setting the Configuration Properties</a> |
| </li> |
| <li> |
| <a href="velocity_and_weblogic.html#What About Stylesheets?"> |
| What about stylesheets?</a> |
| </li> |
| <li> |
| <a href="velocity_and_weblogic.html#Where to Put the Velocity Jar"> |
| Where to put the Velocity Jar</a> |
| </li> |
| <li> |
| <a href="velocity_and_weblogic.html#Making Life Easier for the Developer"> |
| Making Life Easier for the Developer</a> |
| </li> |
| <li> |
| <a href="velocity_and_weblogic.html#A Build Process"> |
| A Build Process</a> |
| </li> |
| </ol> |
| </blockquote> |
| </p> |
| </td></tr> |
| <tr><td><br/></td></tr> |
| </table> |
| <table border="0" cellspacing="0" cellpadding="2" width="100%"> |
| <tr><td bgcolor="#525D76"> |
| <font color="#ffffff" face="arial,helvetica,sanserif"> |
| <a name="Assumptions"><strong>Assumptions</strong></a> |
| </font> |
| </td></tr> |
| <tr><td> |
| <blockquote> |
| <p> |
| This short guide can only be keept short because it assumes you already have |
| a working knowledge af Velocity and how to use it in the J2EE environment, |
| for example with Apache-Tomcat. |
| </p> |
| </blockquote> |
| </p> |
| </td></tr> |
| <tr><td><br/></td></tr> |
| </table> |
| <table border="0" cellspacing="0" cellpadding="2" width="100%"> |
| <tr><td bgcolor="#525D76"> |
| <font color="#ffffff" face="arial,helvetica,sanserif"> |
| <a name="The Scope Of This Guide"><strong>The Scope Of This Guide</strong></a> |
| </font> |
| </td></tr> |
| <tr><td> |
| <blockquote> |
| <p> |
| Deploying web-applications to Tomcat can be accomplished by a war-file, but |
| at startup Tomcat explodes the war-file so the directory structure are available |
| for the Velocity engine at runtime and the <code>getRealPath()</code> method in |
| <code>ServletContext</code> returns the real path to the given directory. |
| </p> |
| <p> |
| Deploying the same war-file in WebLogic will not have the same effect, |
| since WebLogic keeps its deployed war-files unexploded, and the |
| <code>getRealPath()</code> method in <code>ServletContext</code> |
| returns <code>null</code>. So how should you |
| organize your properties file, templates, stylesheets, servlets and build |
| process in this environment? |
| </p> |
| <p> |
| The scope of this little guide is to give you answers to these |
| questions, so you can enjoy using Velocity even in the context of a commercial |
| app server. |
| </p> |
| <p> |
| While all the relevant information can be found in the JavaDoc documentation, |
| this quick guide will help you get started quickly. |
| </p> |
| </blockquote> |
| </p> |
| </td></tr> |
| <tr><td><br/></td></tr> |
| </table> |
| <table border="0" cellspacing="0" cellpadding="2" width="100%"> |
| <tr><td bgcolor="#525D76"> |
| <font color="#ffffff" face="arial,helvetica,sanserif"> |
| <a name="Where to Put the Template Files"><strong>Where to Put the Template Files</strong></a> |
| </font> |
| </td></tr> |
| <tr><td> |
| <blockquote> |
| <p> |
| Since the <code>ClasspathResourceLoader</code> can load a template from a |
| resource found in the servlet engines classpath, it seems like a very good idea |
| to jar all the template-files together and place this jar (<code>template.jar</code> |
| for example) in <code>WEB-INF/lib</code> which will make it available as a |
| resource in the classpath. |
| </p> |
| </blockquote> |
| </p> |
| </td></tr> |
| <tr><td><br/></td></tr> |
| </table> |
| <table border="0" cellspacing="0" cellpadding="2" width="100%"> |
| <tr><td bgcolor="#525D76"> |
| <font color="#ffffff" face="arial,helvetica,sanserif"> |
| <a name="Setting the Configuration Properties"><strong>Setting the Configuration Properties</strong></a> |
| </font> |
| </td></tr> |
| <tr><td> |
| <blockquote> |
| <p> |
| Although the properties file could be given any name, for this guide we |
| will use <code>velocity.properties</code> since |
| all documentation and examples on the Velocity site uses this filename. |
| </p> |
| <p> |
| This file should include the following two lines to configure the resource |
| loader: |
| </p> |
| <pre> |
| resource.loader = class |
| class.resource.loader.class = org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader |
| </pre> |
| <p> |
| The file can contain other configurations as well. |
| </p> |
| <strong>Where to put <code>velocity.properties</code></strong> |
| <p> |
| Put the <code>velocity.properties</code> file directly in the <code>WEB-INF</code> |
| directory and include the following lines in your <code>web.xml</code>: |
| </p> |
| <pre> |
| <servlet> |
| <servlet-name>...</servlet-name> |
| <servlet-class>...</servlet-class> |
| <init-param> |
| <param-name>properties</param-name> |
| <param-value>/WEB-INF/velocity.properties</param-value> |
| </init-param> |
| </servlet> |
| </pre> |
| <p> |
| and include the following implementation in your servlet(s): |
| </p> |
| <pre> |
| protected Properties loadConfiguration (ServletConfig config) throws IOException, FileNotFoundException { |
| String propsFile = config.getInitParameter(INIT_PROPS_KEY); |
| Properties p = new Properties(); |
| |
| if ( propsFile != null ) { |
| InputStream iStream = getServletContext().getResourceAsStream( propsFile ); |
| |
| if ( iStream != null ) { |
| p.load( iStream ); |
| } |
| } |
| |
| return p; |
| } |
| </pre> |
| </blockquote> |
| </p> |
| </td></tr> |
| <tr><td><br/></td></tr> |
| </table> |
| <table border="0" cellspacing="0" cellpadding="2" width="100%"> |
| <tr><td bgcolor="#525D76"> |
| <font color="#ffffff" face="arial,helvetica,sanserif"> |
| <a name="What About Stylesheets?"><strong>What About Stylesheets?</strong></a> |
| </font> |
| </td></tr> |
| <tr><td> |
| <blockquote> |
| <p> |
| If you have any stylesheets you can place them anywhere you like, as long as |
| you only make relative references to these files from your template files. |
| </p> |
| <p> |
| I prefer to have my stylesheets keept in a directory called <code>stylesheets</code> |
| located under the root-directory of the web application (i.e. at the same |
| level as the <code>WEB-INF</code> directory). |
| </p> |
| <p> |
| In your template files you can reference the stylesheets like this: |
| </p> |
| <pre> |
| <link REL="stylesheet" TYPE="text/css" HREF="./stylesheets/style.css"> |
| </pre> |
| </blockquote> |
| </p> |
| </td></tr> |
| <tr><td><br/></td></tr> |
| </table> |
| <table border="0" cellspacing="0" cellpadding="2" width="100%"> |
| <tr><td bgcolor="#525D76"> |
| <font color="#ffffff" face="arial,helvetica,sanserif"> |
| <a name="Where to Put the Velocity Jar"><strong>Where to Put the Velocity Jar</strong></a> |
| </font> |
| </td></tr> |
| <tr><td> |
| <blockquote> |
| <p> |
| First of all you have to decide whether you will use the dependency-free version of |
| velocity.jar or the version including all dependend jars. If you are not worried about |
| collisions with Avalon Logkit, Commons Collections or Jakarta Oro, using the |
| jar containing all dependencies is very convenient. |
| </p> |
| <p> |
| Putting the velocity jar in <code>WEB-INF/lib</code> your web application will result |
| in it's classes being available in the classpath for that web application. |
| </p> |
| </blockquote> |
| </p> |
| </td></tr> |
| <tr><td><br/></td></tr> |
| </table> |
| <table border="0" cellspacing="0" cellpadding="2" width="100%"> |
| <tr><td bgcolor="#525D76"> |
| <font color="#ffffff" face="arial,helvetica,sanserif"> |
| <a name="Making Life Easier for the Developer"><strong>Making Life Easier for the Developer</strong></a> |
| </font> |
| </td></tr> |
| <tr><td> |
| <blockquote> |
| <p> |
| Using Velocity in 'real life' you quickly recognize a lot of |
| similarity between your servlets. The first abstraction that will make life a |
| little easier for the developers is a servlet like my <code>MainServlet</code>, which all |
| application specific servlets can subclass. The only method the subclasses must |
| override is the <code>getTemplateName()</code> method, which should return the name of |
| this servlets template file. |
| </p> |
| <p>If the subclasses needs to put data into context (which most servlets do) |
| they can implement the <code>loadData()</code> method. |
| </p> |
| <p> |
| That's it. The rest is done by <code>MainServlet</code> (and <code>VelocityServlet</code> of course). |
| </p> |
| <pre> |
| public abstract class MainServlet extends VelocityServlet { |
| |
| public Template handleRequest(HttpServletRequest request, HttpServletResponse response, Context ctx) { |
| loadData( request, response, ctx ); |
| return getMyTemplate(); |
| } |
| |
| protected Properties loadConfiguration (ServletConfig config) throws IOException, FileNotFoundException { |
| String propsFile = config.getInitParameter(INIT_PROPS_KEY); |
| Properties p = new Properties(); |
| |
| if ( propsFile != null ) { |
| InputStream iStream = getServletContext().getResourceAsStream( propsFile ); |
| |
| if ( iStream != null ) { |
| p.load( iStream ); |
| } |
| } |
| |
| return p; |
| } |
| |
| protected Template getMyTemplate( ) { |
| Template template = null; |
| try { |
| template = getTemplate( getTemplateName() + ".vm" ); |
| } |
| catch (ParseErrorException pee) { |
| mylog("Parse error for template " + pee); |
| } |
| catch (ResourceNotFoundException rnfe) { |
| mylog("Template not found " + rnfe); |
| } |
| catch (Exception e) { |
| mylog("Error " + e); |
| } |
| return template; |
| } |
| |
| /** |
| * Gets the name of the template file to be processed from this servlet. Should be |
| * overridden by every subclass. |
| */ |
| abstract protected String getTemplateName(); |
| |
| /** |
| * Load data into context. |
| */ |
| protected void loadData(HttpServletRequest request, HttpServletResponse response, Context ctx ) { |
| ctx.put( "dummy", "dummy" ); |
| } |
| } |
| </pre> |
| </blockquote> |
| </p> |
| </td></tr> |
| <tr><td><br/></td></tr> |
| </table> |
| <table border="0" cellspacing="0" cellpadding="2" width="100%"> |
| <tr><td bgcolor="#525D76"> |
| <font color="#ffffff" face="arial,helvetica,sanserif"> |
| <a name="A Build Process"><strong>A Build Process</strong></a> |
| </font> |
| </td></tr> |
| <tr><td> |
| <blockquote> |
| <p> |
| A simple build process that supports the outlined directory contains the |
| follwing steps: |
| </p> |
| <ol> |
| <li>Define shortcuts for the directories used during the build process</li> |
| <li>Prepare the build by coping all necessary files to the staging (build) |
| directory</li> |
| <li>Compile all java files</li> |
| <li>Make a jar containing all templates</li> |
| <li>Make a war containing the web application (in the distribution directory)</li> |
| </ol> |
| <p> |
| A concrete example following the above scheme: |
| </p> |
| <pre> |
| <project name="carImportAdmin" default="all" basedir="."> |
| |
| <!-- Source directory for deployment descriptors, manifest, properties,... --> |
| <property name="dd" value="./dd"/> |
| |
| <!-- Work directory used during build process --> |
| <property name="build" value="./staging"/> |
| |
| <!-- Target directory for the final war-file --> |
| <property name="dist" value="../build-ear/modules"/> |
| |
| <!-- Source directory for all java files --> |
| <property name="src" value="./src"/> |
| |
| <!-- Source directory for template files --> |
| <property name="templates" value="./templates"/> |
| |
| <!-- Source directory for stylesheets --> |
| <property name="stylesheets" value="./stylesheets"/> |
| |
| <!-- Libraries used in compile --> |
| <property name="lib" value="${dist}/CarImport.jar;${dist}/FPGuiden.jar;${dist}/velocity-dep-1.2-rc3.jar"/> |
| |
| |
| <target name="all" depends="init, compile, jar, war"/> |
| |
| <target name="init" depends="clean"> |
| <tstamp/> |
| |
| <mkdir dir="${build}"/> |
| <mkdir dir="${build}/stylesheets"/> |
| <mkdir dir="${build}/WEB-INF"/> |
| <mkdir dir="${build}/WEB-INF/classes"/> |
| <mkdir dir="${build}/WEB-INF/lib"/> |
| |
| <copy todir="${build}/WEB-INF"> |
| <fileset dir="${dd}"> |
| <include name="velocity.properties"/> |
| </fileset> |
| <fileset dir="${dd}/WEB-INF"> |
| <include name="web.xml"/> |
| </fileset> |
| </copy> |
| <copy todir="${build}/WEB-INF/lib"> |
| <fileset dir="${dist}"> |
| <include name="velocity-dep-1.2-rc3.jar"/> |
| </fileset> |
| </copy> |
| <copy todir="${build}/stylesheets"> |
| <fileset dir="${stylesheets}"> |
| |
| </fileset> |
| </copy> |
| </target> |
| |
| |
| <target name="compile"> |
| <javac srcdir="${src}" destdir="${build}/WEB-INF/classes" classpath="${CLASSPATH};${lib}"> |
| </javac> |
| </target> |
| |
| <target name="jar"> |
| <jar jarfile="${build}/WEB-INF/lib/templates.jar" |
| basedir="${templates}"> |
| </jar> |
| </target> |
| |
| <target name="war" depends="init"> |
| <jar jarfile="${dist}/carImportAdmin.war" |
| basedir="${build}"> |
| </jar> |
| </target> |
| |
| <target name="clean"> |
| <delete dir="${build}"/> |
| </target> |
| |
| </project> |
| </pre> |
| </blockquote> |
| </p> |
| </td></tr> |
| <tr><td><br/></td></tr> |
| </table> |
| </td> |
| </tr> |
| |
| <!-- FOOTER --> |
| <tr><td colspan="2"> |
| <hr noshade="" size="1"/> |
| </td></tr> |
| <tr><td colspan="2"> |
| <div align="center"><font color="#525D76" size="-1"><em> |
| Copyright © 1999-2004, The Apache Software Foundation |
| </em></font></div> |
| </td></tr> |
| </table> |
| </body> |
| </html> |
| <!-- end the processing --> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |