这篇文章主要介绍了JAVA velocity模板引擎使用实例,需要的朋友可以参考下
velocity使用1.7版本。 在win7下使用intelliJ IDEA建立一基于tomcat的web app项目,命名为todo_web,设置path为/todo,导入velocity相关jar包。只导入velocity-1.7.jar这个包可能会报错,根据提示再导入velocity自带的其他包。 项目结构如下:
测试Tomcat
index.jsp内容如下: 复制代码 代码如下: <%-- Created by IntelliJ IDEA. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title></title> </head> <body> <% out.print("hi,todo"); %> </body> </html> HelloWorld.java内容如下: 复制代码 代码如下: import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { /** * * @param request * @param response * @throws IOException * @throws ServletException */ @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>Hi!</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Hello World!!!</h1>"); out.println("</body>"); out.println("</html>"); } } 在web.xml中加入以下内容: 复制代码 代码如下: <servlet> <servlet-name>hi</servlet-name> <servlet-class>HelloWorld</servlet-class> </servlet> <servlet-mapping> <servlet-name>hi</servlet-name> <url-pattern>/hi</url-pattern> </servlet-mapping> 运行项目,在http://localhost:8080/todo和http://localhost:8080/todo/hi中可以看到效果。
使用velocity
下面开始使用velocity模板引擎,在src下建立目录templates,在templates目录下建立文件test.vm,内容如下: 复制代码 代码如下: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <body> #set( $this = "Velocity") $this is great! <br/> $name <br/> hi , i am letian <h1>你好</h1> </body> </html> 在src目录下新建java文件MyVelocity01.java: 复制代码 代码如下: import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import org.apache.velocity.app.Velocity; import org.apache.velocity.app.VelocityEngine; import org.apache.velocity.VelocityContext; import java.util.Properties; public class MyVelocity01 extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); Properties properties=new Properties(); properties.setProperty("resource.loader", "class"); properties.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); //properties.setProperty("input.encoding", "UTF-8"); //properties.setProperty("output.encoding", "UTF-8"); properties.setProperty(Velocity.ENCODING_DEFAULT, "UTF-8"); properties.setProperty(Velocity.INPUT_ENCODING, "UTF-8"); properties.setProperty(Velocity.OUTPUT_ENCODING, "UTF-8"); VelocityEngine velocityEngine = new VelocityEngine(properties); VelocityContext context=new VelocityContext(); context.put("name", "test"); StringWriter sw = new StringWriter(); velocityEngine.mergeTemplate("templates/test.vm", "utf-8", context, sw); //velocityEngine.mergeTemplate("templates/test.vm", "utf-8", context, sw); //这样就会出现两次 out.println(sw.toString()); } }
配置web.xml: 复制代码 代码如下: <!--MyVelocity--> <servlet> <servlet-name>ve</servlet-name> <servlet-class>MyVelocity01</servlet-class> </servlet> <servlet-mapping> <servlet-name>ve</servlet-name> <url-pattern>/ve</url-pattern> </servlet-mapping> 重新部署,浏览器访问http://localhost:8080/todo/ve可以看到效果。
简单介绍velocity
velocity是一个基于java的模板引擎,有三种文件加载模板方式: 1、从文件路径加载 2、从类路径(MyVelocity01.java使用该方法) 3、从jar文件加载 开始接触velocity时可能会在加载模板上遇到问题。
如何向模板文件传递变量: 模板本身可以定义变量,例如在test.vm中定义了变量$this,java代码也可以给模板传递变量,例如test.vm中的变量$name便是VelocityContext实例传递过去的。同时velocity也支持迭代对象,例如: 我们在MyVelocity01.java中导入java.util.Vector,将代码: 复制代码 代码如下: context.put("name", "test"); 改为: 复制代码 代码如下: Vector v = new Vector(); v.addElement("Harry"); v.addElement("John"); String[] names = {"Harry", "John"}; context.put("names1", v); context.put("names2", names); 将test.vm内容改为: 复制代码 代码如下: <h1>hello</h1> #foreach($name in $names1) $name <br/> #end #foreach($name in $names2) $name <br/> #end velocity还支持map容器,支持使用#include("")引入静态模板,#parse("模板名")引入动态模板。
如果想不开要用java MVC写网站的话,使用servlet + velocity是一个小巧灵活的选择。 |