blob: 4d090bcfaccbc639c80479a2802237bc5cc4e7fa [file] [log] [blame]
<?xml version="1.0"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you 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.
-->
<document>
<properties>
<title>Overview</title>
<projectfile>xdocs/project.xml</projectfile>
<subprojectfile>xdocs/view.project.xml</subprojectfile>
</properties>
<body>
<section name="Overview">
<p>
VelocityView includes all of the <a href="generic.html">
GenericTools</a> and adds infrastructure and
specialized tools for using Velocity in the view layer
of web applications (Java EE projects). This includes
the VelocityViewServlet or VelocityLayoutServlet for
processing Velocity template requests and the
VelocityViewTag for embedding Velocity in JSP.
</p>
<p>Key features:</p>
<ul>
<li><b><a href="view.servlet.html">VelocityViewServlet</a></b>
- standalone servlet that renders Velocity
templates. Invoked directly from web clients requests, or via servlet
forwarding similar to how JSP files are rendered by JSPServlet.</li>
<li>The HttpServletRequest, HttpSession, ServletContext,
and their attributes are automatically available in your templates.</li>
<li>Tools can also be made available to your templates, through a
<strong>tools</strong> <a href="config.html">configuration</a> file.</li>
<li>A number of useful, extendable tools for developing web applications are
already provided for your convenience.</li>
<li>Logging can be directed to the log infrastructure of the Web application.
(default is the logging facility provided by the Servlet API).</li>
</ul>
</section>
<section name="Default Configuration">
<p>
The default configuration provided for VelocityView is
<a href="http://svn.apache.org/viewvc/velocity/tools/trunk/src/main/java/org/apache/velocity/tools/generic/tools.xml?view=markup">
here</a> and
<a href="http://svn.apache.org/viewvc/velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/tools.xml">
here</a>.
</p>
</section>
<section name="Dependencies">
<p>
The dependencies required for VelocityView can be found on our
<a href="dependencies.html#VelocityStruts">dependencies chart</a>.
</p>
</section>
<section name="VelocityView Object">
<p>
The <javadoc package="view" name="VelocityView"/>
object forms the core of the VelocityView infrastructure. In particular,
it serves as the base class for the following:
</p>
<subsection name="VelocityViewServlet" href="view.servlet.html">
<p>
The
<javadoc package="view" name="VelocityViewServlet"/>
class is a standalone servlet that renders Velocity
templates. It can be invoked directly from web client's
requests, or via servlet forwarding similar to how JSP files
are rendered by JSPServlet.
</p>
<p>Detailed documentation is
<a href="view.servlet.html">here</a>.
</p>
</subsection>
<subsection name="VelocityLayoutServlet" href="view.layoutservlet.html">
<p>One derivative of the VelocityViewServlet is the
<a href="view.layoutservlet.html"><strong>VelocityLayoutServlet</strong></a>.
This servlet performs a simplified 'two-pass render' in order to apply a
shared, common layout to all of the web pages in an application.</p>
<p>The Struts &quot;template&quot; tag library does something similar,
but requires a separate file to define which 'layout' file to use and
which .jsp files to render into that layout. The VelocityLayoutServlet
takes a simpler approach. It first renders the primary template being
called (example: showDetails.vm) into a content holder variable
(ex. $screen_content). Next, the servlet loads a 'layout' file. It
uses the existing data, including any additional variables set or
changed by the first template, to render a the layout template.</p>
<p>The VelocityLayoutServlet also allows you to specify an 'error'
template to be displayed when an exception is thrown during the
processing of a requested template. This allows you to provide
a customized error screen for a more user-friendly application.</p>
<p>Detailed documentation is
<a href="view.layoutservlet.html">here</a>.
</p>
</subsection>
<subsection name="VelocityViewTag" href="view.tag.html">
<p>
This is a JSP tag that allows you to use Velocity and VelocityTools
from within your JSP tags and files. This tag can both process
templates in separate files, VTL in the tag body, or combine the two.
</p>
<p>Detailed documentation is
<a href="view.tag.html">here</a>.
</p>
</subsection>
</section>
<section name="Tools">
<p>
These are in addition to those provided by
<a href="generic.html#Tools">GenericTools</a>
</p>
<ul>
<li>
<javadoc package="view" name="AbstractSearchTool"/>
- For doing "searching" and robust pagination of search
results. Requires you to create a subclass.
</li>
<li>
<javadoc package="view" name="BrowserTool"/>
- For identifying the browser and features thereof requesting
the template.
</li>
<li>
<javadoc package="view" name="CookieTool"/>
- For convenient cookie access and creation.
</li>
<li>
<javadoc package="view" name="ImportTool"/>
- For pulling down textual content from a URL.
</li>
<li>
<javadoc package="view" name="LinkTool"/>
- For easy building of URLs (both relative or absolute).
</li>
<li>
<javadoc package="view" name="PagerTool"/>
- For doing request-based pagination of items in an
arbitrary list.
</li>
<li>
<javadoc package="view" name="ParameterTool"/>
- For easy retrieval and parsing of ServletRequest parameters.
</li>
<li>
<javadoc package="view" name="ViewContextTool"/>
- For convenient access to ViewContext data and meta-data.
</li>
</ul>
</section>
<section name="Examples">
<p>A simple application example has been included to demonstrate the use
of the VelocityViewServlet with automatically loaded view tools.</p>
<p>To run the examples you need Tomcat 4+ or a compatible servlet runner.</p>
<p>The 'ant examples' target of the build process automatically generates
ready-to-deploy <b>simple.war</b> and <b>showcase.war</b>
archive files located in the examples subdirectory of the distribution.
Deploy (i.e. copy) one or both of these war files to the webapps directory
of your servlet runner and restart.
Now point a web browser at the following urls:</p>
<p><b>http://&lt;your_server&gt;:&lt;port&gt;/simple/</b></p>
<p><b>http://&lt;your_server&gt;:&lt;port&gt;/showcase/</b></p>
</section>
<!-- TODO: revise this...
<section name="Known Issues">
<p>
Since Tomcat 5.5 used commons-logging as a complete
logging facility, we were no longer able to direct commons-logging
output to the servlet log by default. The result of this is that
our example apps can no longer contain a commons-logging.properties
on the classpath if we want them to work with all servlet engines.
</p>
<p>
When using Tomcat 5.5, this means that log messages
from our tools and tool management code are by default sent to the Tomcat
console, rather than the servlet log. Velocity Engine and
VelocityViewServlet messages will still be sent to the servlet
log by default. When using other servlet engines or earlier Tomcat versions
(e.g. Jetty or Tomcat 4.x), you must now add a commons-logging.properties
file at the root of the classpath that contains:
<code>
org.apache.commons.logging.Log=org.apache.velocity.tools.generic.log.LogSystemCommonsLog
</code>
if you wish to have tool and tool management log output sent to the
servlet log. If you are using Tomcat 5.5, do NOT do that, as it will
cause an infinite loop.
</p>
<p>
We plan to resolve this in future versions by removing commons-logging
from our code in favor of the much improved log wrappers in Velocity Engine 1.5.
In the meantime, commons-logging remains the most flexible solution.
</p>
</section>
-->
</body>
</document>