当前位置: 首页 > others > 正文

velocity 的学习笔记

项目中需要使用模板来建构整体框架,使前台和后台分开,

找来找去发apache的 velocity 不错,周末研究了一下,

部分代码是网上所得,根据自己实际的操作做了下笔记。

 velocity 网站:   http://velocity.apache.org/

 从官网上看,velocity自己有一套模板书写的语法格式,

 不是很难,关键是要懂得模板运行机制,总结了一下,

 模板技术就是一种替换技术,以前php使用正则表达式同样可以

 实现模板的替换,而在JAVA下,apache已经提供了功能强大且开源的velocity,

 为何不试试呢。

 以下是我的Linux AD4+RESIN-2.1.17+JDK1.6下的配置

aaa.png

基本机制:

建立模板文件,

使用jsp或者servlet来读取模板文件,替换相应的变量,达到你需要的表现效果,

其中velocity有一些特有的配置方法,具体可以看看相关资料。

目录结构:

我把模板文件放在发布目录中,为了方便,建立了templates目录

../httpdocs/templates

把velocity-1.5.jar 放到lib目录下,

具体为: WEB-INF/lib

我在配置时出现了缺少apache.common包的问题,google了一下,原来是少了

velocity-dep-1.5.jar包,把它也放到lib下

新建 velocity.properties 配置文件

内容为:

file.resource.loader.path = templates  #指定模板的目录

runtime.log = log/velocity.log         #实际为发布目录的log目录,但是我在测试过程中没有生成日志。

把它放到classes目录下

接下可以是新建模板文件

本例子也网上看到的。修改了一下,servlet读取模板时出现了中文显示的乱码问题。

filename:  temp.vm

<html>

          <head>

   <meta http-equiv=”Content-Type” content=”text/html;charset=gb2312″ />

   <title>velocity 测试页面</title>

   </head>

          <body bgcolor=”#ffffff”>

            <center>

              <h2>模板测试</h2>

              <i>d动物列表:</i>

              <table cellspacing=”0″ cellpadding=”5″ width=”100%”>

                <tr>

                  <td bgcolor=”#eeeeee” align=”center”>姓名</td>

                </tr>

                #foreach ($name in $theList)

                <tr>

                  <td bgcolor=”#eeeeee”>$name</td>

                </tr>

                #end

              </table>

            </center>

</html>

#### TempServlet.java

package com.2hei.temp.Exp;

import javax.servlet.*;

import javax.servlet.http.*;

import java.io.IOException;

import java.io.FileNotFoundException;

import java.io.FileInputStream;

import java.util.Properties;

import java.util.Vector;

import javax.servlet.ServletConfig;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.ServletException;

import org.apache.velocity.Template;

import org.apache.velocity.context.Context;

import org.apache.velocity.servlet.VelocityServlet;

import org.apache.velocity.app.Velocity;

import org.apache.velocity.exception.ResourceNotFoundException;

import org.apache.velocity.exception.ParseErrorException;

public class TempServlet extends VelocityServlet

{

 protected Properties loadConfiguration(ServletConfig config)throws IOException, FileNotFoundException{

  /*

   *  得到属性配置文件并load它

   */

  String propsFile = config.getInitParameter(INIT_PROPS_KEY);

  Properties p = new Properties();

  if(propsFile != null){

    String realPath = getServletContext().getRealPath(propsFile);

    if(realPath != null){

        propsFile = realPath;

    }

    p.load(new FileInputStream(propsFile));

  }

  /*

   *  设置velocity日志文件在web应用中的位置

   */

  String log = p.getProperty(Velocity.RUNTIME_LOG);

  if (log != null){

    log = getServletContext().getRealPath(log);

    if (log != null)   {

    p.setProperty(Velocity.RUNTIME_LOG, log);

    }

  }

  /*

   *  设置模板文件在web应用中的位置

   */

  String path = p.getProperty(Velocity.FILE_RESOURCE_LOADER_PATH);

  if (path != null){

    path = getServletContext().getRealPath(path);

    if (path != null){

    p.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, path);

    }

  }

  return p;

 }

public Template handleRequest(HttpServletRequest request,HttpServletResponse response,Context ctx){

   

  //response.setContentType(“text/html;charset=utf-8”);    

  String p1 = “I’m a Cat”;

  String p2 = “I’m a Dog”;

  Vector personList = new Vector();

  personList.addElement(p1);

  personList.addElement(p2);

  /*

   *  将模板数据 list 放置到上下文环境 context 中去

   */

  ctx.put(“theList”, personList);

  /*

   *  获取模板对象,有三种可能产生的异常

   */

  Template outty = null;

  try{

   outty = getTemplate(“temp.vm”);

  } catch (ParseErrorException pee){

   System.out.println(

    “SampleServlet : parse error for template ” + pee);

  }catch (ResourceNotFoundException rnfe){

   System.out.println(“TempServlet : template not found ” + rnfe);

  }catch (Exception e){

   System.out.println(“Error ” + e);

  }

  return outty;

 }

}

现在模板可以显示出来:

本文固定链接: https://www.2hei.net/2007/09/02/velocity-%e7%9a%84%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0/ | 2hei.net

该日志由 u2 于2007年09月02日发表在 others 分类下,
原创文章转载请注明: velocity 的学习笔记 | 2hei.net

报歉!评论已关闭.