Velocity 学习一

2016/01/01 Java

Velocity是一个基于java的模板引擎(template engine)。

它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。 当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只 关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。

Velocityjava代码从web页面中分离出来,这样为web站点的长期维护提 供了便利,同时也为我们在JSPPHP之外又提供了一种可选的方案。

官方文档: http://velocity.apache.org/engine/devel/user-guide.html

入门Hello World 实例

  1. Eclipse中创建一个Maven Web项目(JavaExamples/workspace/velocity/velocity_0100_helloworld

  2. 删除Deployment Assembly 中无效配置(test 目录 与 m2e-wtp)

  3. 配置 pom.xml 引入依赖的包 ```xml

4.0.0 com.admin.velocity velocity_0100_helloworld war 0.0.1-SNAPSHOT velocity_0100_helloworld Maven Webapp http://maven.apache.org junit junit 4.3 test org.apache.velocity velocity 1.7 org.apache.velocity velocity-tools 2.0 helloworld

4. 添加 `velocity` 模板文件
先在 `webapps` 下添加 `templates` 目录, 再在 `templates` 下添加 `hello.vm`

文件内容:
```html
<html>
 <head><title>Sample velocity page</title></head>
 <body bgcolor="#ffffff">
     <center>
         <h2>Hello My First Velocity</h2>
         <table width="100" cellpadding="5" cellspacing="1" bordercolor="#333333">
             <tr><td bgcolor="#eeeeee" align="center">name list</td></tr>
             #foreach ($name in $theList)
             <tr><td bgcolor="#6666FF" align="center">$name</td></tr>
             #end
         </table>
     </center>
</html>
  1. 添加 java 类文件 在 src/main/java 下建立 velocityHandler 目录,再添加类 HelloHandler.java

文本内容: (注意:super.init(config);未添加可能会导致context初始化失败,报NullPointer的错误

package velocityhandler;
import java.util.Properties;
import java.util.Vector;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.velocity.Template;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.context.Context;
import org.apache.velocity.tools.view.VelocityViewServlet;
public class HelloHandler extends VelocityViewServlet {
 private static final long serialVersionUID = 1L;
 private VelocityEngine velo;
 @Override
 public void init(ServletConfig config) throws ServletException {
     // TODO Auto-generated method stub
     super.init(config);
     velo = new VelocityEngine();// velocity引擎对象
     Properties prop = new Properties();// 设置vm模板的装载路径
     String path = this.getServletContext().getRealPath("/");
     prop.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, path
             + "\\templates\\");
     try {
         velo.init(prop);// 初始化设置,下面用到getTemplate("*.vm")输出时;一定要调用velo对象去做,即velo.getTemplate("*.vm")
     } catch (Exception e1) {
         e1.printStackTrace();
     }
 }
 @SuppressWarnings("unchecked")
 @Override
 protected Template handleRequest(HttpServletRequest request,
         HttpServletResponse response, Context ctx) {
     // TODO Auto-generated method stub
     String p1 = "Charles";
     String p2 = "Michael";
     @SuppressWarnings("rawtypes")
     Vector personList = new Vector();
     personList.addElement(p1);
     personList.addElement(p2);
     ctx.put("theList", personList); // 将模板数据 list放置到上下文环境context中
     Template template = velo.getTemplate("hello.vm");
     return template;
 }
}
  1. 配置 web.xml 文件 ```xml <!DOCTYPE web-app PUBLIC “-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN” “http://java.sun.com/dtd/web-app_2_3.dtd” >
velocity_0100_helloworld velocity org.apache.velocity.tools.view.VelocityViewServlet hello velocityhandler.HelloHandler velocity *.vm hello /hello index.html

```

Search

    Table of Contents