博客信息

Velocity模版介绍

发布时间:『 2019-06-20 02:39』  博客类别:其他框架  阅读(819)

Velocity介绍

Velocity的作用是将指定的模板生成页面;

可以用来做网站页面静态化、代码生成器的制作等等;

本篇博客内容服务于下篇博客(代码生成器制作方案);

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

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晓码阁 版权所有