一、什么是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 ...
随机推荐
- Flex:实例
目的: 代码: <!--pages/index/index.wxml--> <view class="container"> <view class= ...
- Ubuntu python3 与 python2 的 pip调用
ubuntu 是默认装有pytthon2.x 与 python3.x 共存的 通常终端里 python 表示 python2 版本 python3 表示 python3 版本 (如果你没更改软链接设置 ...
- 创业学习--《预判行业机会》--B-2.预判模块---HHR计划--以太一堂
一,<开始学习> 1,行业机会的判断,是可以通过不断地训练提高自己的判准的概率的,要科学思考创业. 2,创业者在行业机会上的三个问题: a. 对市场变化,敏感性太弱,没有洞察行业的意识. ...
- JPA 级联保存的问题
前提:系统有学校-学生关系,学校可以包含多个学生,学生只能属于一个学校 在使用 spring-data-jpa 的时候,保存学校的同时保存学生信息,不需要先逐个保存学生信息,再将学生信息放在学校中保存 ...
- C++中的sort函数和⾃定义cmp函数
写在最前面,本文摘录于柳神笔记: sort 函数在头⽂件 #include ⾥⾯,主要是对⼀个数组进⾏排序( int arr[] 数组或 者 vector 数组都⾏), vector 是容器,要⽤ v ...
- Nginx安装部署!
安装Nginx方法一:利用u盘导入Nginx软件包 二nginx -t 用于检测配置文件语法 如下报错1:配置文件43行出现错误 [root@www ~]# nginx -tnginx: [emerg ...
- jemter-plugins-maven dependency -WIiki用法配置介绍
1.先介绍下jmeter 的maven中央仓库地址,有兴趣自己看下 https://mvnrepository.com/artifact/org.apache.jmeter 2.Wiki github ...
- Centos610无桌面安装Docker-安装
1.必备环境 设定docker源yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.rep ...
- iOS之Xcode提交App中断出现:Cannot proceed with delivery: an existing transporter instance is currently uploading this package
https://www.jianshu.com/p/6d465a0ea58e 这句英文翻译过来就是: 无法继续交付:现有的传输程序实例目前正在上载此包 原因:上传的动作被记录在UploadToken中 ...
- vb.net与vb的区别
本文链接:https://blog.csdn.net/dfshsdr/article/details/63255645最近接触了vb.net,它增加了vb的很多特性,而且演化成为完全面向对象的编程语言 ...