第一天學習velocity,參考別人的blog寫了一個與Servlet結合的例子,寫到下面以待備份
目錄結構
倆實體類代碼:
Department
package com.velocity.bean;
public class Department {
private int id;
private String deptname;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getDeptname() {
return deptname;
}
public void setDeptname(String deptname) {
this.deptname = deptname;
}
public Department(int id, String deptname) {
super();
this.id = id;
this.deptname = deptname;
}
public Department() {
super();
}
}
-------------------------------------------------------------------------------------------------
package com.velocity.bean;
public class Employee {
private int id;
private String ename;
private String eaddress;
private int age;
private Department department;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public String getEaddress() {
return eaddress;
}
public void setEaddress(String eaddress) {
this.eaddress = eaddress;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}
public Employee(int id, String ename, String eaddress, int age,
Department department) {
super();
this.id = id;
this.ename = ename;
this.eaddress = eaddress;
this.age = age;
this.department = department;
}
public Employee() {
}
}
看SampleServlet類
package com.velocity.servlet;
import java.util.ArrayList;
import java.util.List;
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.tools.view.servlet.VelocityViewServlet;
import com.velocity.bean.Department;
import com.velocity.bean.Employee;
@SuppressWarnings("serial")
public class SampleServlet extends VelocityViewServlet{
//設置返回視圖爲text/html編碼爲gbk
@Override
protected void setContentType(HttpServletRequest request,
HttpServletResponse response) {
response.setContentType("text/html;charset=utf-8");
}
//處理請求
@Override
protected Template handleRequest(HttpServletRequest request,
HttpServletResponse response, Context ctx){
ctx.put("username", "張三");
ctx.put("password", "123456789");
ctx.put("age", "20");
ctx.put("address", "北京");
ctx.put("blog", "http://wcp88888888.iteye.com/");
List<Employee> list=new ArrayList<Employee>();
list.add(new Employee(1,"張三","北京",18,new Department(1,"軟件研發部1")));
list.add(new Employee(2,"張三","北京",19,new Department(2,"軟件研發部2")));
list.add(new Employee(3,"張三","北京",20,new Department(3,"軟件研發部3")));
list.add(new Employee(4,"張三","北京",21,new Department(4,"軟件研發部4")));
list.add(new Employee(5,"張三","北京",22,new Department(5,"軟件研發部5")));
list.add(new Employee(6,"張三","北京",23,new Department(6,"軟件研發部6")));
list.add(new Employee(7,"張三","北京",24,new Department(7,"軟件研發部7")));
list.add(new Employee(8,"張三","北京",25,new Department(8,"軟件研發部8")));
list.add(new Employee(9,"張三","北京",26,new Department(9,"軟件研發部9")));
list.add(new Employee(10,"張三","北京",27,new Department(10,"軟件研發部10")));
ctx.put("list", list);
//調用父類的方法getTemplate()
return getTemplate("demo.vm");
}
}
-------------------------------------------------------------------------------------------------------------
繼承org.apache.velocity.tools.view.servlet.VelocityViewServlet,覆寫setContentType和handleRequest方法,其中setContentType用於設置瀏覽器的響應,handleRequest處理用戶的請求,返回Template,我們調用父類中的getTemplate()方法返回
在WEB-INF目錄下創建一vm目錄,用於存放模板文件
在WEB-INF目錄下創建velocity.properties(名字可以任意取)
內容爲
webapp.resource.loader.class = org.apache.velocity.tools.view.servlet.WebappLoader
webapp.resource.loader.path=/WEB-INF/vm/
input.encoding=utf-8 ----該處不能加雙引號,要不會爆無法轉換utf-8的錯誤
output.encoding=utf-8
resource.loader = webapp 加載方式爲webapp
webapp.resource.loader.class = org.apache.velocity.tools.view.servlet.WebappLoader webapp方式加載處理類
webapp.resource.loader.path=/WEB-INF/vm/ 模板文件目錄
input.encoding="gbk" 輸入字符編碼
output.encoding="gbk" 輸出字符編碼
配置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>customerVelocityServlet</servlet-name>
<servlet-class>com.velocity.servlet.SampleServlet</servlet-class>
<init-param>
<param-name>org.apache.velocity.properties</param-name>
<param-value>/WEB-INF/velocity.properties</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>customerVelocityServlet</servlet-name>
<url-pattern>/customerVelocityServlet</url-pattern>
</servlet-mapping>
</web-app>
-----------------------------------------------------------------------------------------------------------------
<init-param>
<param-name>org.apache.velocity.properties</param-name>
<param-value>/WEB-INF/velocity.properties</param-value>
</init-param>
加載自定義的velocity.properties
demo.vm
<HTML>
<HEAD>
<TITLE> velocity </TITLE>
</HEAD>
##嘿嘿,我是velocity中的註釋噢
#*
嘿嘿,我也是velocity中的註釋噢
*#
<BODY>
<h1>hehe,這是經過由servlet返回的velocity視圖</h1>
hello ${username},這是你的信息
<ul>
<li>用戶密碼爲:${password}</li>
<li>年齡爲:${age}</li>
<li>出生地址爲:${address}</li>
<li>個人主頁爲:<a href='${blog}'>${blog}</a></li>
</ul>
<br/>
#foreach($emp in $!{list})
$!{velocityCount}
$!{emp.id}
$!{emp.ename}
$!{emp.eaddress}
$!{emp.age}
$!{emp.department.id}
$!{emp.department.deptname} <hr/>
#end
</BODY>
</HTML>
http://localhost:8080/VelocityWeb/customerVelocityServlet
效果圖