`
freesea
  • 浏览: 127587 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

velocity应用

阅读更多

     在前面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中引用.

 

 

分享到:
评论

相关推荐

    Velocity 应用示例

    Velocity 应用示例

    Velocity模板应用案例

    Velocity应用案例,Velocity夹包文件

    Velocity-API.chm--采用官方文档制作-超值的Velocity API参考文档。

    当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只 关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。Velocity将java...

    velocity-1.5.jar.zip( 359 k)

    当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。Velocity将java代码...

    velocity 用户手册 参考文档 详细讲解

    当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。Velocity将java代码...

    模板引擎 Velocity 官方最新版下载

    当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只 关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。Velocity将java代码...

    Velocity用户手册---中文版

    当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。Velocity将java...

    Velocity Web应用开发

    Velocity应用于Web应用开发 从简单的语法,到所运用的工程部署。

    Velocity教程

    当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。Velocity将java代码...

    velocity中文版教程

    当Velocity 应用于web 开发时,界面设计人员可以和java 程序开发人员同步开发一个遵 循MVC 架构的web 站点,也就是说,页面设计人员可以只关注页面的显示效果,而由java 程序开发人员关注业务逻辑编码。Velocity 将...

    velocity介绍

    当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。Velocity将java代码...

    velocity配置

    当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。Velocity将java代码...

    Velocity 模板使用指南

    当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只 关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。Velocity将java...

    《VelocityWeb应用指南》中文版.pdf

    《VelocityWeb应用指南》中文版.pdf

    volocity教程 及类库文件

    当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。Velocity将java代码...

    Velocity 和 FreeMarker区别

    Velocity 和 FreeMarker区别 对于大部分的应用来说,使用 FreeMarker 比 Velocity 更简单,因为 Velocity 还必须编写一些自定义的

    微软刚推出的分布式缓存方案velocity简单实例

    微软推出的分布式缓存方案velocity 这是我对velocity应用的简单demo 大家可以下载回来试下

    一套基于SpringMVC+velocity框架的web应用 ,基于注解

    一套基于SpringMVC+velocity框架的web应用 ,基于注解,页面使用sitemesh进行包含

    velocity 入门文档及应用源码,很适合做自动代码生成

    入门文档及应用源码,很适合做自动代码生成 包括:Velocity的中文指南\ velocity中文手册\ \基于Ant+Velocity的简单代码生成器的思路与实现

    Velocity+Struts 配置

    Velocity 是一个基于Java的模版引擎。它允许web 页面设计者引用...这个项目完成后,Velocity将为Turbine web 应用程序框架提供模板服务。Velocity+Turbine 方案提供的模板服务将允许web 应用按真正的mvc模式进行开发。

Global site tag (gtag.js) - Google Analytics