1、maven依賴
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mipo</groupId>
<artifactId>velocity_spring</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId><!-- velocity與velocity-tools缺一不可 -->
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-tools</artifactId>
<version>2.0</version>
</dependency>
</dependencies>
</project>
2、web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID"
version="3.0">
<!--+引入spring mvc
|若未配置默認(rèn)為WEB-INF下的"servlet name"-servlet.xml
+-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
3、/WEB-INF/spring-mvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/jdbc
http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd">
<context:component-scan base-package="com.mipo.controller" />
<!-- 注解驅(qū)動 -->
<mvc:annotation-driven />
<!--velocity模板配置-->
<bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
<property name="resourceLoaderPath" value="WEB-INF/views/"/><!-- 這個好像沒效果,velocity.properties中的配置起作用 -->
<property name="configLocation" value="classpath:velocity.properties"/>
<property name="velocityProperties">
<props>
<prop key="input.encoding">UTF-8</prop>
<prop key="output.encoding">UTF-8</prop>
</props>
</property>
</bean>
<!--VelocityViewResolver視圖配置-->
<!--<bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">-->
<!--<property name="suffix" value=".vm"/>-->
<!--<property name="prefix" value=""/>-->
<!--<property name="contentType" value="text/html;charset=UTF-8"/>-->
<!--</bean>-->
<!--
layout功能
上面我們使用的是VelocityLayoutWithCommonToolsViewResolver這個對象做為springmvc的視圖解析器,這個對象是集成了layout功能和tool功能為一體的解析器。
對于一個WEB應(yīng)用來說,頁面的基本結(jié)構(gòu)往往是固定的,頁面中的很多部分,例如頁面統(tǒng)一的頭部、尾部和菜單,我們一般是不太需要變化的,各個頁面基本一致,變化的往往是頁面的具體內(nèi)容部分,這樣,布局(layout)功能的使用,就能大大減化前端頁面的復(fù)雜性了。這里簡單介紹一下如何使用velocity框架來實(shí)現(xiàn)頁面的布局。
我們知道,要在spring框架中配置velocity,一般需要配置兩個bean,一個是velocityConfig, 別一個則是viewResolver。先來看velocityConfig的配置,基本配置如下所示,這里和不使用布局的配置方式?jīng)]有任何差別。
1. 一般情況下,當(dāng)我們不使用velocity的布局功能時,我們一般會把viewResolver的class配置為:
org.springframework.web.servlet.view.velocity.VelocityViewResolver,當(dāng)需要使用布局功能的時候,viewResolver的class需要配置為:
org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver,顧名思義,從命名中我們就能看出來這個viewResolver是支持layout功能的。
2. 不同的是,這里多了一個layoutUrl的屬性配置:, 這個配置是設(shè)置你的layout文件的存在路徑,需要注意的是,這個路徑不是相對于webapp路徑來的,而是相對于velocityConfig配置中的resourceLoaderPath屬性配置的路徑(resourceLoaderPath的路徑是相對于webapp的路徑)。
普通的頁面實(shí)現(xiàn):比如我們要輸出一個帶帶固定頁頭和頁尾的頁面,內(nèi)容就是screen_content的值,知識后使用普通解析器頁面如下
-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver">
<property name="suffix" value=".vm"/><!-- 后綴可以是任何東西,只要跟你的文件后綴名相同,控制器進(jìn)行視圖重定向就能找到這個文件 -->
<property name="prefix" value=""/>
<property name="contentType" value="text/html;charset=UTF-8"/>
<property name="layoutUrl" value="layout/layout.vm"/>
</bean>
</beans>
4、classpath:velocity.properties
## 設(shè)置模板文件加載器,webapp從應(yīng)用根目錄加載
resource.loader = webapp
webapp.resource.loader.class = org.apache.velocity.tools.view.WebappResourceLoader
## 模板路徑,根目錄下的vm文件夾,比如訪問http://localhost:8080/velocity/t.htm,則選中的模板路徑是webapp/vm/t.htm,如果沒配置,默認(rèn)是模板路徑是webapp/t.htm
webapp.resource.loader.path = /vm
## 設(shè)置編碼,不設(shè)置會中文亂碼
input.encoding = UTF-8
output.encoding = UTF-8
tools.view.servlet.layout.default.template=default.vm
tools.view.servlet.layout.directory=/WEB-INF/layout/
5、webapp/vm/layout/layout.vm
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>
<div>header</div>
<div>
$screen_content
</div>
<div>footer</div>
</body>
</html>
6、webapp/vm/test/index.vm
<h2>hello world!${name}</h2>
7、java類
package com.mipo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@RequestMapping(value="/test")
@Controller
public class TestController {
@RequestMapping(value="/index")
public String index(Model model) {
String name = "tester";
model.addAttribute("name", name);
return "test/index";
}
}