在前面http://freesea.iteye.com/admin/blogs/652707初学velocity中只是简单的了解了一下velocity,对于velocity的实际应用还需要多学习,今天有点时间,测式了一个简单的应用,由于没有深入理解,很容易健忘,在此备忘一下
今天主要是使用velocity-tools-view包对视图进行显示控制,这个包对于简化velocity的使用起到很大的作用。在使用之前当然还是到官网上去看一下,下载地址:http://velocity.apache.org/download.cgi#tools
下载解压后发现里面有个examples目录,直接把simple.war丢到tomcat的webapps目录下进行,看起来挺简单的,但是存在很多的疑问,为了能够更进一步了解,自己也依着做了一遍,真是受益匪浅。
一、web.xml
在simple项目中,看了一下web.xml配置
<web-app>
<servlet>
<servlet-name>velocity</servlet-name>
<servlet-class>org.apache.velocity.tools.view.servlet.VelocityViewServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>velocity</servlet-name>
<url-pattern>*.vm</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.vm</welcome-file>
</welcome-file-list>
</web-app>
看起来跟正常的项目没什么区别,主要是把表现层改由vm的模板文件而已
二、ToyTool.java
public class ToyTool
{
private String message = "Hello from ToyTool!";
public String getMessage()
{
return message;
}
public void setMessage(String m)
{
message = m;
}
/** To test exception handling in templates. */
public boolean whine() {
throw new IllegalArgumentException();
}
}
三、index.vm
I'm a velocity template.
#if( $XHTML )
#set( $br = "<br />" )
#else
#set( $br = "<br>" )
#end
$br
$br
Here we use a custom tool: $toytool.message
$br
$br
Lets count : #foreach($i in [1..5])$i #end
$br
$br
Let's play with a hashmap:$br
first add foo: $map.put("foo",$foo)$br
then add bar: $map.put("bar",$bar)$br
$br
and that gives us $map
$br
$br
Here we get the date from the DateTool: $date.medium
$br
$br
#if( $isSimple )
This is simple#if( $XHTML ) xhtml#end app version ${version}.
#end
四、toolbox.xml
<toolbox>
<xhtml>true</xhtml>
<tool>
<key>toytool</key>
<scope>request</scope>
<request-path>index.vm</request-path>
<class>ToyTool</class>
</tool>
<data type="number">
<key>version</key>
<value>1.1</value>
</data>
<data type="boolean">
<key>isSimple</key>
<value>true</value>
</data>
<data type="string">
<key>foo</key>
<value>this is foo.</value>
</data>
<data type="string">
<key>bar</key>
<value>this is bar.</value>
</data>
<tool>
<key>map</key>
<scope>session</scope>
<class>java.util.HashMap</class>
</tool>
<tool>
<key>date</key>
<scope>application</scope>
<class>org.apache.velocity.tools.generic.DateTool</class>
</tool>
</toolbox>
看了这几个文件,由于是初学,有很多的疑问:
1、为什么不使用velocity.properties文件就能正确使用呢(在velocity初学http://freesea.iteye.com/admin/blogs/652707时是需要的)
2、在index.vm中有一个 $toytool.message,可以直接取出ToyTool类的属性,但是在配置里没有任务信息告诉我哪里有使用到这个类呢
3、在toolbox.xml中定义的那些tool和 和date是什么意思呢,怎么把这些东西也可以在模板上输出,真是搞不懂
带着这些问题,一直想了解清楚。
首先从web.xml中的入口开如,一般正常情况是进入到index.vm页面
<welcome-file-list>
<welcome-file>index.vm</welcome-file>
</welcome-file-list>
而所有的vm文件都使用VelocityViewServlet类
<servlet>
<servlet-name>velocity</servlet-name>
<servlet-class>org.apache.velocity.tools.view.servlet.VelocityViewServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>velocity</servlet-name>
<url-pattern>*.vm</url-pattern>
</servlet-mapping>
为了查清VelocityViewServlet都执行了些什么,就下了velocity-tools-1.4-src.zip下来研究,发现这个类其实为我们默认实现了
很多事情,比如:
在没有配置velocity.properties情况,它默认会使用
/**
* Default Runtime properties.
*/
public static final String DEFAULT_TOOLS_PROPERTIES =
"/org/apache/velocity/tools/view/servlet/velocity.properties";
原来不需在WEB-INF/velocity.properties配置也可以,默认使用了velocity-tools包中的velocity属性文件
# default to servletlogger, which logs to the servlet engines log
runtime.log.logsystem.class = org.apache.velocity.tools.view.servlet.ServletLogger
# by default, load resources with webapp resource loader
resource.loader = webapp
webapp.resource.loader.class = org.apache.velocity.tools.view.servlet.WebappLoader
虽然可以使用默认的配置,但是也出了很多问题,比如在vm文件中使用中文时输出就出现了乱码,由于org.apache.velocity.tools.view.servlet.VelocityViewServle类默认使用的输出编码是ISO-8859-1
/** The HTTP content type context key. */
public static final String CONTENT_TYPE = "default.contentType";
/** The default content type for the response */
public static final String DEFAULT_CONTENT_TYPE = "text/html";
/** Default encoding for the output stream */
public static final String DEFAULT_OUTPUT_ENCODING = "ISO-8859-1";
所以还是使用自己定义的的velocity.properties文件,这样的话就不会使用默认包里的文件了,我们可以自己定义输出编码,等信息如:
runtime.log = velocity_example.log
#Velocity.properties配置示例
# 如果需要系统从WEB-INF/classes路径加载Velocity的模板文件,取消下面两行的注释
#resource.loader=class
#class.resource.loader.class=org.apache.Velocity.runtime.resource.loader.ClasspathResourceLoader
#如需禁止系统通过文件系统加载模板文件,注释如下两行
resource.loader=file
file.resource.loader.path=D:\Workspaces\MyEclipse 8.5\velocity\WebRoot
#确定从何处加载velocity的模板文件
file.resource.loader.cache=false
#设置读取模板文件的解码格式,为了支持中文
input.encoding=utf-8
#配置输出视图文件的解码格式,为了支持中文
output.encoding=utf-8
终于解决了我第一个疑问,VelocityViewServlet除了处理这个外,还对toolbox.xml进得处理,所以为什么在vm中可以直接使用$toytool.message的原因,它把toolbox.xml中定义的工具绑定了上下文环境,所以在vm中得以引用,具体就不列出代码段了,除了这些外,tools包还定了很多有用的工具类,需要时都可以在toolbox.xml中定义,vm中引用.
分享到:
相关推荐
- **resources** 目录:可能存储 Velocity 配置文件(如 `velocity.properties`),以及应用中使用的资源文件。 - **src/main/java** 目录:包含 Velocity 相关的 Java 类,如控制器、模型类和 velocity 工具类。 - ...
### Velocity Web应用开发知识点详解 #### 一、Velocity概述及应用场景 Velocity 是一款基于 Java 的模板引擎,主要用于生成动态内容,特别是在 Web 开发领域。它能够帮助开发者快速地构建出可读性强、易于维护的 ...
本部分将展示如何在Servlet环境中集成Velocity,并通过实例介绍如何将Velocity应用于Web开发。 1. 搭建Java Web工程,这里直接使用Maven的maven-archetype-webapp生成项目骨架。 2. 添加Tomcat运行环境,通过Maven...
当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只 关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。Velocity将java...
当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。Velocity将java代码...
- 可能还包含了配置文件和测试用例,帮助理解如何设置和测试Velocity应用。 6. **最佳实践** - 分离视图和控制器:确保模板仅包含展示逻辑,业务逻辑应保留在Java代码中。 - 使用合适的命名约定:避免使用保留字...
当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只 关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。Velocity将java代码...
** Velocity 应用场景** 1. **Web 应用开发**:Velocity 可以作为 JSP 的替代品,提供更简洁、更易于维护的模板语言,使得开发者可以专注于页面布局,而不必关心 HTML 代码中的 Java 语法。 2. **生成静态内容**:...
**Velocity 应用领域** 1. **Web 应用开发**:Velocity 可以作为 MVC 模式的视图层,将后端数据与 HTML 页面模板结合,生成动态网页。 2. **代码生成**:Velocity 可用于自动生成 SQL 查询、XML 文档或者其他编程...
这就是一个基本的Velocity应用,展示了如何使用Velocity生成动态内容。通过这种方式,开发者可以将业务逻辑和视图展示分离,使得代码更加清晰,易于维护。在实际项目中,Velocity可以与Spring、Struts等框架结合使用...
1. **配置 Web 应用**:在 Web 应用的配置文件(如 web.xml)中,你需要配置 Velocity 视图解析器(如 VelocityEngineFilter),使得服务器能够识别 .vm 文件。 2. **处理请求**:当用户请求一个 .vm 页面时,服务器...
当你查看这些类的源码时,可以了解其内部工作原理,这对理解和优化 Velocity 应用非常有帮助。 **工具支持** 在开发过程中,有一些工具可以帮助你更好地管理Velocity模板。例如,IDE插件如Eclipse的Velocity视图...
Velocity 在 Web 开发、邮件生成、报告生成等领域有广泛应用。这份《Velocity 模板使用指南中文版》将帮助你深入理解和高效利用 Velocity。 ### 1. Velocity 模板语言 (VTL) Velocity 模板语言是 Velocity 的核心...
【Velocity模板应用案例】 Velocity是Apache软件基金会的一个开源项目,它是一个基于Java的模板引擎,用于生成动态内容。Velocity通过将逻辑与呈现分离,使得开发者可以专注于业务逻辑,而设计师可以自由地设计页面...
Velocity 应用于 web 开发时,界面设计人员可以和 Java 程序开发人员同步开发一个遵循 MVC 架构的 web 站点,也就是说,页面设计人员可以只关注页面的显示效果,而由 Java 程序开发人员关注业务逻辑编码。...
当Velocity应用于Web开发时,它能够帮助前端设计师和后端开发者实现高效协同。设计师可以专注于页面布局和视觉效果,而Java开发者则负责业务逻辑的编写。通过将Java代码与Web页面分离,Velocity不仅简化了Web站点的...