在项目开发中为了减少代码书写量,需要学习模板引擎,自动生成代码,今天第一天开始学习,做了一个简单的例子,运行成功,记录学习过程
1、新建web工程,命名为velocity。
2、下载velocity-1.5.jar,velocity-dep-1.5.jar 放在本工程/WE-INF/lib/ 目录下。
3、编写hello.vm
public $tableName{
/**
*@parm id
*@return
*/
public java.util.Vector findById(String id){
String sql="select * from $tableName where $id='"+id+"'";
}
}
4、新建类VelocityServletTest.java
package com.twb;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.io.StringWriter;
import java.util.Properties;
import javax.servlet.ServletConfig;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.velocity.Template;
import org.apache.velocity.context.Context;
import org.apache.velocity.servlet.VelocityServlet;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.VelocityContext;
public class VelocityServletTest extends VelocityServlet {
//重写父类方法
protected Properties loadConfiguration(ServletConfig config)
throws IOException, FileNotFoundException {
VelocityEngine engine = new VelocityEngine();
Properties p = new Properties();
String path = config.getServletContext().getRealPath("/");
if (path == null) {
path = "/";
}
p.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, path);
p.setProperty("runtime.log", path + "velocity.log");
try {
engine.init(p); // 载入模板的路径path ,即上下文路径
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return p;
}
//重写父类方法
public Template handleRequest(HttpServletRequest request,
HttpServletResponse response, Context ctx) {
Template template = null;
Template template2 = null;
try {//页面显示代码
Velocity.init();
VelocityContext context = new VelocityContext();
ctx.put("tableName", "User");
template = Velocity.getTemplate("/web/hello.vm");
} catch (Exception e) {
e.printStackTrace();
}
try {// 获得模板的内容
//加载模板
template2 = Velocity.getTemplate("/web/hello.vm");
VelocityContext context = new VelocityContext();
//设置模板中变量的值
context.put("tableName", "User");
context.put("id", "userId");
StringWriter writer = new StringWriter();
template2.merge(context, writer);
//将模板内容写入twb.java
File file=new File("D:\\twb.java");
FileOutputStream f=new FileOutputStream(file);
f.write(writer.toString().getBytes());
f.close();
} catch (Exception e) {
e.printStackTrace();
}
return template;
}
}
5、配置web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>vilocity</servlet-name> <servlet-class>com.twb.VelocityServletTest</servlet-class> <init-param> <param-name>org.apache.velocity.properties</param-name> <param-value>/WEB-INF/classes/velocity.properties</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>vilocity</servlet-name> <url-pattern>/velocity/*</url-pattern> </servlet-mapping> </web-app>
工程建立基本完成,打开浏览器,输入:http://localhost:8080/velocity/velocity/hello.vm
可以看到页面显示
public User{ /** *@parm id *@return */ public java.util.Vector findById(String id){ String sql="select * from User where $id='"+id+"'"; } }
同时在d:\\下生成twb.java
public User{
/**
*@parm id
*@return
*/
public java.util.Vector findById(String id){
String sql="select * from User where userId='"+id+"'";
}
}
ok,第一个velocity实例成功。