Velocity的作用是将指定的模板生成页面;
可以用来做网站页面静态化、代码生成器的制作等等;
本篇博客内容服务于下篇博客(代码生成器制作方案);
导入pom依赖
<!--velocity代码生成使用模板 --> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity</artifactId> <version>1.7</version> </dependency> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-tools</artifactId> <version>2.0</version> </dependency>
准备的实体类
package com.javaxl.entity;
public class Order {
private String item;
private String type;
private String price;
public Order(String item, String type, String price) {
super();
this.item = item;
this.type = type;
this.price = price;
}
public Order() {
super();
}
public String getItem() {
return item;
}
public void setItem(String item) {
this.item = item;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
@Override
public String toString() {
return "Order [item=" + item + ", type=" + type + ", price=" + price + "]";
}
}
乱码处理工具类
package com.javaxl.util;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 中文乱码处理
*
*/
public class EncodingFiter implements Filter {
private String encoding = "UTF-8";// 默认字符集
public EncodingFiter() {
super();
}
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
// 中文处理必须放到 chain.doFilter(request, response)方法前面
res.setContentType("text/html;charset=" + this.encoding);
if (req.getMethod().equalsIgnoreCase("post")) {
req.setCharacterEncoding(this.encoding);
} else {
Map map = req.getParameterMap();// 保存所有参数名=参数值(数组)的Map集合
Set set = map.keySet();// 取出所有参数名
Iterator it = set.iterator();
while (it.hasNext()) {
String name = (String) it.next();
String[] values = (String[]) map.get(name);// 取出参数值[注:参数值为一个数组]
for (int i = 0; i < values.length; i++) {
values[i] = new String(values[i].getBytes("ISO-8859-1"),
this.encoding);
}
}
}
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
String s = filterConfig.getInitParameter("encoding");// 读取web.xml文件中配置的字符集
if (null != s && !s.trim().equals("")) {
this.encoding = s.trim();
}
}
}
模板页list.vm
velocity.properties
file.resource.loader.class=org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader input.encoding=UTF-8 output.encoding=UTF-8
将模板生成页面的servlet
package com.javaxl.web;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.velocity.Template;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.context.Context;
import org.apache.velocity.tools.view.VelocityViewServlet;
import com.javaxl.entity.Order;
public class ListServlet extends VelocityViewServlet {
@Override
protected Template handleRequest(HttpServletRequest request, HttpServletResponse response, Context ctx) {
List<Order> orders = new ArrayList<Order>();
orders.add(new Order("iphone4", "智能手机", "5999"));
orders.add(new Order("PSP3003", "多媒体产品", "1760"));
orders.add(new Order("Kinest", "体感器", "1999"));
// 初始化Velocity引擎
VelocityEngine ve = new VelocityEngine();
InputStream is = this.getClass().getResourceAsStream("/velocity.properties");
Properties properties = new Properties();
try {
properties.load(is);
} catch (IOException e) {
e.printStackTrace();
}
ve.init(properties);
Template template = ve.getTemplate("/list.vm");
// 为模版中的元素赋值
ctx.put("orders", orders);
return template;
}
}
Web.xml的配置
<filter> <filter-name>encodingFiter</filter-name> <filter-class>com.javaxl.util.EncodingFiter</filter-class> </filter> <filter-mapping> <filter-name>encodingFiter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>listServlet</servlet-name> <servlet-class>com.javaxl.web.ListServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>listServlet</servlet-name> <url-pattern>/list</url-pattern> </servlet-mapping>
浏览器访问结果


备案号:湘ICP备19000029号
Copyright © 2018-2019 javaxl晓码阁 版权所有