一、什么是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 ...
随机推荐
- Ora 命令行建立账号
.使用cmd 进入 sqlplus /nolog conn system/ as sysdba .修改密码 alter user ebthis identified by new_psw; .查看用户 ...
- ASP.NET Core搭建多层网站架构【14-扩展之部署到IIS】
2020/02/03, ASP.NET Core 3.1, VS2019, IIS 10, dotnet-hosting-3.1.1-win.exe 摘要:基于ASP.NET Core 3.1 Web ...
- Centos7 虚拟环境安装Django 出现ImproperlyConfigured('SQLite 3.8.3 or later is required (found %s).' %Database.sqlite_version)错误
Centos7 虚拟环境安装Django 出现SQLite版本问题 raise ImproperlyConfigured('SQLite 3.8.3 or later is required (fou ...
- Webflux是什么东东
转自:百家号-薇薇心语 各位Javaer们,大家都在用SpringMVC吧?当我们不亦乐乎的用着SpringMVC框架的时候,Spring5.x又悄(da)无(zhang)声(qi)息(gu)的推出了 ...
- spark sql 访问mysql数据库
pom.xml <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-ja ...
- 吴裕雄--天生自然Numpy库学习笔记:NumPy 数组属性
NumPy 数组的维数称为秩(rank),秩就是轴的数量,即数组的维度,一维数组的秩为 1,二维数组的秩为 2,以此类推. 在 NumPy中,每一个线性的数组称为是一个轴(axis),也就是维度(di ...
- Linux搭建maven私服
1.把压缩包上传到服务器/usr/local/tmp 2.在/usr/local下创建nexus文件夹(mkdir nexus) 3.解压压缩包nexus-3.13.0-01-unix.tar.gz到 ...
- cmake学习资料收集
CMake 学习笔记 : https://www.jianshu.com/p/c417e4ab8b30
- Tomcat认识
Tomcat目录结构: bin:存放启动和关闭的一些脚本 common:共享(部署在该服务器上的一些)jar包 conf:存放服务器的一些配置文件 webapps:部署文件 work:服务器运行时,产 ...
- c++中的运算符重载operator2(翁恺c++公开课[31-33]学习笔记)
上一篇operator1中,大概说了下重载的基本用法,接下来对c++中常见的可重载运算符归一下类,说一下它们的返回值,讨论下较为复杂的运算符重载上的坑