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