`
freesea
  • 浏览: 128857 次
  • 性别: 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 应用示例

    - **resources** 目录:可能存储 Velocity 配置文件(如 `velocity.properties`),以及应用中使用的资源文件。 - **src/main/java** 目录:包含 Velocity 相关的 Java 类,如控制器、模型类和 velocity 工具类。 - ...

    Velocity Web应用开发

    ### Velocity Web应用开发知识点详解 #### 一、Velocity概述及应用场景 Velocity 是一款基于 Java 的模板引擎,主要用于生成动态内容,特别是在 Web 开发领域。它能够帮助开发者快速地构建出可读性强、易于维护的 ...

    velocity入门使用教程

    本部分将展示如何在Servlet环境中集成Velocity,并通过实例介绍如何将Velocity应用于Web开发。 1. 搭建Java Web工程,这里直接使用Maven的maven-archetype-webapp生成项目骨架。 2. 添加Tomcat运行环境,通过Maven...

    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应用。 6. **最佳实践** - 分离视图和控制器:确保模板仅包含展示逻辑,业务逻辑应保留在Java代码中。 - 使用合适的命名约定:避免使用保留字...

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

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

    Velocity介紹.ppt

    ** Velocity 应用场景** 1. **Web 应用开发**:Velocity 可以作为 JSP 的替代品,提供更简洁、更易于维护的模板语言,使得开发者可以专注于页面布局,而不必关心 HTML 代码中的 Java 语法。 2. **生成静态内容**:...

    Velocity介绍.ppt

    **Velocity 应用领域** 1. **Web 应用开发**:Velocity 可以作为 MVC 模式的视图层,将后端数据与 HTML 页面模板结合,生成动态网页。 2. **代码生成**:Velocity 可用于自动生成 SQL 查询、XML 文档或者其他编程...

    velocity的简单demo

    这就是一个基本的Velocity应用,展示了如何使用Velocity生成动态内容。通过这种方式,开发者可以将业务逻辑和视图展示分离,使得代码更加清晰,易于维护。在实际项目中,Velocity可以与Spring、Struts等框架结合使用...

    velocity demo

    1. **配置 Web 应用**:在 Web 应用的配置文件(如 web.xml)中,你需要配置 Velocity 视图解析器(如 VelocityEngineFilter),使得服务器能够识别 .vm 文件。 2. **处理请求**:当用户请求一个 .vm 页面时,服务器...

    Velocity之HelloWorld配置

    当你查看这些类的源码时,可以了解其内部工作原理,这对理解和优化 Velocity 应用非常有帮助。 **工具支持** 在开发过程中,有一些工具可以帮助你更好地管理Velocity模板。例如,IDE插件如Eclipse的Velocity视图...

    Velocity模板使用指南中文版

    Velocity 在 Web 开发、邮件生成、报告生成等领域有广泛应用。这份《Velocity 模板使用指南中文版》将帮助你深入理解和高效利用 Velocity。 ### 1. Velocity 模板语言 (VTL) Velocity 模板语言是 Velocity 的核心...

    Velocity模板应用案例

    【Velocity模板应用案例】 Velocity是Apache软件基金会的一个开源项目,它是一个基于Java的模板引擎,用于生成动态内容。Velocity通过将逻辑与呈现分离,使得开发者可以专注于业务逻辑,而设计师可以自由地设计页面...

    JAVA中Velocity语法基础.pdf

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

    velocity_中文手册

    当Velocity应用于Web开发时,它能够帮助前端设计师和后端开发者实现高效协同。设计师可以专注于页面布局和视觉效果,而Java开发者则负责业务逻辑的编写。通过将Java代码与Web页面分离,Velocity不仅简化了Web站点的...

Global site tag (gtag.js) - Google Analytics