JAVA velocity模板引擎使用實(shí)例
velocity使用1.7版本。 在win7下使用intelliJ IDEA建立一基于tomcat的web app項(xiàng)目,命名為todo_web,設(shè)置path為/todo,導(dǎo)入velocity相關(guān)jar包。只導(dǎo)入velocity-1.7.jar這個(gè)包可能會(huì)報(bào)錯(cuò),根據(jù)提示再導(dǎo)入velocity自帶的其他包。 項(xiàng)目結(jié)構(gòu)如下:
測(cè)試Tomcat
index.jsp內(nèi)容如下:
<%-- 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內(nèi)容如下:
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中加入以下內(nèi)容:
<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>
運(yùn)行項(xiàng)目,在http://localhost:8080/todo和http://localhost:8080/todo/hi中可以看到效果。
使用velocity
下面開始使用velocity模板引擎,在src下建立目錄templates,在templates目錄下建立文件test.vm,內(nèi)容如下:
<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); //這樣就會(huì)出現(xiàn)兩次
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可以看到效果。
簡(jiǎn)單介紹velocity
velocity是一個(gè)基于java的模板引擎,有三種文件加載模板方式: 1、從文件路徑加載 2、從類路徑(MyVelocity01.java使用該方法) 3、從jar文件加載 開始接觸velocity時(shí)可能會(huì)在加載模板上遇到問題。
如何向模板文件傳遞變量: 模板本身可以定義變量,例如在test.vm中定義了變量$this,java代碼也可以給模板傳遞變量,例如test.vm中的變量$name便是VelocityContext實(shí)例傳遞過去的。同時(shí)velocity也支持迭代對(duì)象,例如: 我們?cè)贛yVelocity01.java中導(dǎo)入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內(nèi)容改為:
<h1>hello</h1>
#foreach($name in $names1)
$name <br/>
#end
#foreach($name in $names2)
$name <br/>
#end
velocity還支持map容器,支持使用#include("")引入靜態(tài)模板,#parse("模板名")引入動(dòng)態(tài)模板。
如果想不開要用java MVC寫網(wǎng)站的話,使用servlet + velocity是一個(gè)小巧靈活的選擇。
- 詳解使用Mybatis-plus + velocity模板生成自定義的代碼
- c#基于NVelocity實(shí)現(xiàn)代碼生成
- SiteMesh如何結(jié)合Freemarker及velocity使用
- Vue中JS動(dòng)畫與Velocity.js的結(jié)合使用
- 如何解決SpringBoot2.x版本對(duì)Velocity模板不支持的方案
- SpringBoot與velocity的結(jié)合的示例代碼
- 聊聊JS動(dòng)畫庫 Velocity.js的使用
- springMVC+velocity實(shí)現(xiàn)仿Datatables局部刷新分頁方法
- 詳解velocity模板使javaWeb的html+js實(shí)現(xiàn)模塊化
- Mybatis velocity腳本的使用教程詳解(推薦)
- html文件中jquery與velocity變量中的$沖突的解決方法
- Java 如何使用Velocity引擎生成代碼
相關(guān)文章
基于jsp實(shí)現(xiàn)新聞管理系統(tǒng) 附完整源碼
這篇文章主要介紹了基于jsp的新聞管理系統(tǒng),具有一定的參考價(jià)值,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09jsp頁面數(shù)據(jù)分頁模仿百度分頁效果(實(shí)例講解)
下面小編就為大家?guī)硪黄猨sp頁面數(shù)據(jù)分頁模仿百度分頁效果(實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07賣jsp編程技巧的那個(gè)垃圾的所有實(shí)例的答案全部已收集,現(xiàn)將他人收集的實(shí)例答案公布出來,大家鑒賞!
賣jsp編程技巧的那個(gè)垃圾的所有實(shí)例的答案全部已收集,現(xiàn)將他人收集的實(shí)例答案公布出來,大家鑒賞!...2007-04-04Jsp中request的3個(gè)基礎(chǔ)實(shí)踐
本篇文章給大家分享了Jsp內(nèi)置對(duì)象request的3個(gè)基礎(chǔ)實(shí)踐以及相關(guān)代碼分享,有需要的朋友學(xué)習(xí)下。2018-04-04JSP隱含對(duì)象response實(shí)現(xiàn)文件下載的兩種方法
JSP隱含對(duì)象response實(shí)現(xiàn)文件下載的兩種方式,二進(jìn)制文件的下載與文本文件下載2014-09-09