在Spring MVC中使用Velocity实例演示 (参考 Spring in Action),mvcvelocity,Velocity是一种针
在Spring MVC中使用Velocity实例演示 (参考 Spring in Action),mvcvelocity,Velocity是一种针
Velocity是一种针对Java应用研究的易用的模板语言。Velocity将Java代码从Web页面中分离出来,使用Web站点从长远看更容易维护,并且提供了一种可行的JavaServer Pages替代解决方案。
下面是参考 Spring in Action中的第九章之使用Velocity模板的一个Spring MVC 与 Velocity 整合的例子:
我们要显示一个课程列表,需要如下的 Java 类,在 mvc ??中分别建立:Course.java、Instructor.java、CourseService.java及ListCourse.java。其中Course是课程表信息;Instructor是任课教师的信息;CourseService用来列出课程信息,相当于DAO;ListCourse是实现了Controller的控制器,返回ModelAndView。下面分别列出代码:
1、Course.java
package cn.outofmemory.mvc;import java.util.Date;public class Course { private String id; private String name; private Instructor instructor; private Date startDate; private Date endDate; public Date getEndDate() { return endDate; } public void setEndDate(Date endDate) { this.endDate = endDate; } public String getId() { return id; } public void setId(String id) { this.id = id; } public Instructor getInstructor() { return instructor; } public void setInstructor(Instructor instructor) { this.instructor = instructor; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getStartDate() { return startDate; } public void setStartDate(Date startDate) { this.startDate = startDate; }}
2、Instructor.java
package cn.outofmemory.mvc;public class Instructor{ private String firstName; private String lastName; public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; }}
3、CourseService.java
package cn.outofmemory.mvc;import java.util.ArrayList;import java.util.Date;import java.util.List;public class CourseService { public List<Course> getAllCourses(){ List<Course> courseList = new ArrayList<Course>(); Course course = null; Date date = null; for(int i = 0; i < 8; i++){ course = new Course(); course.setId("XB2006112-"+i); course.setName("Name-"+i); date = new Date(); date.setYear(104-i); course.setStartDate(date); date = new Date(); date.setYear(105+i); course.setEndDate(date); Instructor instructor = new Instructor(); instructor.setFirstName("firstName-"+i); instructor.setLastName("lastName-"+i); course.setInstructor(instructor); courseList.add(course); } return courseList; }}
4、ListCourse.java
package cn.outofmemory.mvc;import java.util.List;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.mvc.Controller;public class ListCourse implements Controller{ private CourseService courseService; public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception { List<Course> courses = courseService.getAllCourses(); return new ModelAndView("courseList","courses",courses); } public void setCourseService(CourseService courseService){ this.courseService = courseService; }}
5、现在编写Velocity模板,在WEB-INF/velocitly下面建立一个courseList.vm的文件,内容如下:
<html> <head> <title>Course List</title> </head> <body> <h2>COURSE LIST</h2> <table width="600" border="1" cellspacing="1" cellpadding="1"> <tr bgcolor="#999999"> <td>Course ID</td> <td>Name</td> <td>Instructor</td> <td>Start</td> <td>End</td> </tr> #foreach($course in $courses) <tr> <td> <a href="dispalyCourse.htm?id=${course.id}"> ${course.id} </a> </td> <td>$course.name</td> <td>$course.instructor.lastName</td> <td>${course.startDate}</td> <td>${course.endDate}</td> </tr> #end </table> </body></html>
6、配置web.xml及Spring配置文件training-servlet.xml:
web.xml:
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/log4j.properties</param-value> </context-param> <servlet> <servlet-name>training</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>training</servlet-name> <url-pattern>*.htm</url-pattern> </servlet-mapping></web-app>
training-servlet.xml:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" ><beans> <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="listCourse.htm">listCourse</prop> </props> </property> </bean> <bean id="velocityConfigurer" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer"> <property name="resourceLoaderPath"> <value>WEB-INF/velocity</value> </property> </bean> <bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver"> <property name="suffix"> <value>.vm</value> </property> </bean> <bean id="listCourse" class="mvc.ListCourse"> <property name="courseService"> <ref bean="courseService"/> </property> </bean> <bean id="courseService" class="mvc.CourseService"/></beans>
7、当然,建立工程时保证WEB-INF/lib下有如下包:
spring.jar、velocity-1.4.jar、commons-collections.jar、commons-logging.jar、log4j-1.2.13.jar等。
同时,视需要配置log4j.properties放在WEB-INF下。
然后运行工程,如:
http://localhost:8080/velocity/listCourse.htm
用户点评