您的位置:首页 > 编程语言 > Java开发

Spring MVC 与 Velocity 整合

2010-04-30 11:33 253 查看
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 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 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 mvc;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class CourseService {
public List getAllCourses(){
List courseList = new ArrayList();
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 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模板,在WebRoot/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:

<?xml version="1.0" encoding="UTF-8"?>
<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/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<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>*.do</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</prop>
</props>
</property>
</bean>
<bean id="velocityConfigurer" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
<property name="resourceLoaderPath">
<value>./velocitly/</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等。

然后运行工程,如:
http://localhost:8080/velocity/listCourse.do

转自:http://hi.baidu.com/zhangxuan1224/blog/item/6c7b795900ecb6222934f07f.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: