一、什么是Velocity及简单示例
1、velocity简介:
velocity是一个java模板引擎技术,任何人可以使用这种简单而又强有力的模板语言去获取java对象。
在使用Velocity进行web开发时,web开发人员和java程序员可以同时根据Model-View-Controller(MVC)模型,进行网站开发,这也意味着web开发人员可以纯粹的专注于创建看起来好看的网页而程序员可专门编写完美的代码。Velocity使的Java代码从web网页中分离出来,使的web站点在其生命周期中更易于维护,并提供了一种可行的替代Java Server pages(jsp)或PHP的方法。
Velocity的用处远不止于web范围的应用,例如,它可以用于从模板生成SQL、PostScript和XML。它可以用作生成源代码和报告的独立工具,也可以作为其他系统的集成组件使用。例如,Velocity为各种web框架提供模板服务,使其能够根据一个真正的MVC模型为web应用程序开发提供一个视图引擎。
Velocity是Apache Software Foundation的一个项目,其负责创建和维护与Apache Velocity引擎相关的开源软件。在Velocity项目中创建的所有软件都可以在Apache software License下使用,并且可以免费向公众开放。
2、velocity第一个简单示例:
转自 http://blog.csdn.net/wangxin1982314/article/details/51234766,纯用于学习 开发环境 eclipse、tomcat、new java project
2.1HelloHandler.java
package com.velocitydemo.velocityhandler;
import java.io.IOException;
import java.io.StringWriter;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.Vector;
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.exception.MethodInvocationException;
import org.apache.velocity.exception.ParseErrorException;
import org.apache.velocity.exception.ResourceNotFoundException;
import org.apache.velocity.tools.view.VelocityViewServlet; public class HelloHandler extends VelocityViewServlet {
//在服务器启动的时候构造方法就行了
public HelloHandler(){
System.out.println("构造方法执行");
}
private static final long serialVersionUID = 1L;
private VelocityEngine velo;
//在服务启动的时候init()方法执行
public void init() throws ServletException {
//1.创建Velocity引擎对象
velo = new VelocityEngine();
Properties prop = new Properties();
//path值: D:\Program Files\apache-tomcat-7.0.78 - DemoSys\webapps\velocity-demo\
String path = this.getServletContext().getRealPath("/");
System.out.println("path--->"+path);
//2.设置vm模板的装载路径
prop.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, path + "templates/");
prop.setProperty(VelocityEngine.ENCODING_DEFAULT, "UTF-8");
prop.setProperty(VelocityEngine.INPUT_ENCODING, "UTF-8");
prop.setProperty(VelocityEngine.OUTPUT_ENCODING, "UTF-8");
try {
/*
*Velocity引擎对象初始化设置:下面用到getTemplate("*.vm")输出时;一定要调用velo对象去做,即velo.getTemplate("*.vm")
*/
velo.init(prop);
} catch (Exception e1) {
e1.printStackTrace();
}
} protected Template handleRequest(HttpServletRequest request, HttpServletResponse response, Context ctx) {
System.out.println("handleRequest--->执行");
String p1 = "zhangsan";
String p2 = "pangshaoyun";
//3.1创建Vector对象,并把数据放入到该对象
Vector personList = new Vector();
personList.addElement(p1);
personList.addElement(p2);
//3.2或者:将数据放入到List中
List tempList = new ArrayList();
tempList.add("list1");
tempList.add("list2");
List studList = new ArrayList();
studList.add(new Student("123", "Guangzhou"));
studList.add(new Student("456", "Zhuhai")); //4.1ctx.put()表示:把数据填入上下文 Context表示: velocity的上下文context
ctx.put("theList", personList);
ctx.put("temp", tempList);
ctx.put("students", studList);
Template template=null;
try {
//5.1 取得velocity的模版
template = velo.getTemplate("hello.vm");
} catch (ResourceNotFoundException e) {
System.out.println("Example : error : cannot find template " + "hello.vm");
} catch (ParseErrorException e) {
System.out.println("Example : Syntax error in template " + "hello.vm" + ":" + e);
} catch (Exception e) {
e.printStackTrace();
}
//6.1 创建输出流
StringWriter writer = new StringWriter();
//6.2 转换输出,可在前台进行显示
if(template!=null){
try {
template.merge(ctx, writer);
} catch (ResourceNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParseErrorException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MethodInvocationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//6.3 在控制台进行显示
System.out.println(writer.toString());
//5.2 在前台页面进行显示
return template;
}
}
2.2 hello.vm文件
<html>
<head>
<title>Hello Velocity</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 #foreach ($temp in $temp)
<tr>
<td bgcolor="#6666FF" align="center">$temp</td>
</tr>
#end #foreach ($s in $students)
<tr>
<td bgcolor="#6666FF" align="center"><$velocityCount>Address: $s.address</td>
</tr>
#end
</table>
</center>
</body>
</html>
2.3 web.xm
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>velocity-demo</display-name>
<servlet>
<servlet-name>velocity</servlet-name>
<servlet-class>org.apache.velocity.tools.view.VelocityViewServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>velocity</servlet-name>
<url-pattern>*.vm</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.velocitydemo.velocityhandler.HelloHandler</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
一、什么是Velocity及简单示例的更多相关文章
- 非刚性图像配准 matlab简单示例 demons算法
2011-05-25 17:21 非刚性图像配准 matlab简单示例 demons算法, % Clean clc; clear all; close all; % Compile the mex f ...
- Linux下的C Socket编程 -- server端的简单示例
Linux下的C Socket编程(三) server端的简单示例 经过前面的client端的学习,我们已经知道了如何创建socket,所以接下来就是去绑定他到具体的一个端口上面去. 绑定socket ...
- C# 构建XML(简单示例)
C# 构建XML的简单示例: var pars = new Dictionary<string, string> { {"url","https://www. ...
- 根据juery CSS点击一个标签弹出一个遮罩层的简单示例
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- ACEXML解析XML文件——简单示例程序
掌握了ACMXML库解析XML文件的方法后,下面来实现一个比较完整的程序. 定义基本结构 xml文件格式如下 <?xml version="1.0"?> <roo ...
- demo工程的清单文件及activity中api代码简单示例
第一步注册一个账户,并创建一个应用.获取app ID与 app Key. 第二步下载sdk 第三步新建工程,修改清单文件,导入相关的sdk文件及调用相应的api搞定. 3.1 修改清单文件,主要是加入 ...
- spring-servlet.xml简单示例
spring-servlet.xml简单示例 某个项目中的spring-servlet.xml 记下来以后研究用 <!-- springMVC简单配置 --> <?xml versi ...
- SignalR 简单示例
一.什么是 SignalR ASP.NET SignalR is a library for ASP.NET developers that simplifies the process of add ...
- Web API 简单示例
一.RESTful和Web API Representational State Transfer (REST) is a software architecture style consisting ...
随机推荐
- 从QC到QA
QC遇到了什么无法逾越的障碍 我们公司的主要业务是项目外包,一般的项目都在2-3个月的周期,采用瀑布模式.这种模式本身是相对简单,且十分成熟的模式.但是在实际的工作中,我们还是遇到了前所未有的挑战. ...
- 【兆易创新RISC-V开发板评测】01.干货分享
背景介绍:2019年12月19日在面板包偶然发可以免费申请测评GD32VF103开发板,欣喜万分:在这之前各大技术论坛说是已经有国产兆易创新的RISCV指令集的MCU发布的事情,一时间摩拳擦掌想购入一 ...
- 计算机基础,Python - Map和Reduce
例子1. python中实现hashable def __hash__(self): hashes = map(hash, self.components) return functools.redu ...
- HDU 3081 Marriage Match II (二分+网络流+并查集)
注意 这题需要注意的有几点. 首先板子要快,尽量使用带当前弧优化的dinic,这样跑起来不会超时. 使用弧优化的时候,如果源点设置成0,记得将cur数组从0开始更新,因为有的板子并不是. 其次这题是多 ...
- 洛谷P1006传纸条
题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个 m 行 n 列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了. ...
- 洛谷 P1119 灾后重建(Floyd)
嗯... 题目链接:https://www.luogu.org/problem/P1119 这道题是一个Floyd的很好的题目,在Floyd的基础上加一点优化: 中转点k在这里不能暴力枚举,否则会超时 ...
- Plastic Sprayers Manufacturer - Spray Principle, Spray Note
The Plastic Sprayers Manufacturer stated that the spray is artificial fogging. Simply put, th ...
- 关于java自学的内容以及感受(7.28)
这一周学习了关于一些算法运算,我进行了程序的编写与运行,代码如下: public class TestSign{ public static void main(String[] args){ int ...
- nginx日志模块与HTTP过滤模块与sub模块修改返回内容
日志格式使用指令 指令介绍 Syntax: log_format name [escape=default|json|none] string ...; Default: log_format com ...
- 对象和Map转化gongju
package czc.superzig.modular.utils; import java.lang.reflect.Field; import java.util.HashMap; import ...