回到顶部
您的当前位置: 编程语言> JAVA> JAVA项目> Velocity
Apache Velocity(十一)整合SpringMVC
2014-06-10 16:52:49
标签: 网络整理 Velocity 整合 SpringMVC

注:本站所有项目均使用maven构建!

创建maven项目,目录结构

pom.xml引用jar包
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
</dependency>
<!-- velocity -->
<dependency>
    <groupId>com.e-rimming.third</groupId>
    <artifactId>velocity</artifactId>
</dependency>
<dependency>
    <groupId>com.e-rimming.third</groupId>
    <artifactId>velocity-tools</artifactId>
</dependency>
<!-- apache -->
<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
</dependency>
<dependency>
    <groupId>commons-collections</groupId>
    <artifactId>commons-collections</artifactId>
</dependency>
<dependency>
    <groupId>commons-lang</groupId>
    <artifactId>commons-lang</artifactId>
</dependency>
<dependency>
    <groupId>commons-digester</groupId>
    <artifactId>commons-digester</artifactId>
</dependency>
<!-- servlet -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
</dependency>
<!-- log -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
</dependency>

注:此处引用的jar包比直接在servlet使用velocity多引用了spring和log4j的依赖!

web.xml增加springmvc的监听映射,log4j的配置文件等其他相关内容
<!-- 参 数:log4j配置路径 -->
<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>/WEB-INF/classes/log4j.xml</param-value>
</context-param>

<!-- 参 数:Log4j设定文件中可以引用当前应用的根目录,避免使用绝对路径 -->
<context-param>
    <param-name>webAppRootKey</param-name>
    <param-value>webAppRootKey.templet</param-value>
</context-param>

<!-- 参 数:Spring配置路径 -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>

<!-- Spring Listener -->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> 

<!-- SpringMVC -->
<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/*-servlet.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.xml中除以上内容外,还应该包括项目描述、字符编码拦截、session超时时间、欢迎界面等其他内容,此处就不在一一陈述。

applicationContext.xml中spring相关参数设置
<!-- 注解自动装配 -->
<context:annotation-config/>

<!-- 加入Spring注解自动装配管理 -->
<context:component-scan base-package="cn.ipwin.velocity03.*" />

<!-- 加载properties配置文件 -->
<util:properties id="appProperties" location="classpath:application.properties"/>

<!-- 定义受环境影响易变的变量 -->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
    <property name="ignoreResourceNotFound" value="true" />
    <property name="locations">
        <list>
            <value>classpath*:/application.properties</value>
        </list>
    </property>
</bean>

注:applicationContext.xml中除以上内容外,还应该包括数据源、安全、AOP、异常等处理内容,此处就不在一一陈述。

springmvc-servlet.xml中spring相关参数设置
<!-- 加入Spring注解自动装配管理 -->
<context:component-scan base-package="cn.ipwin.velocity03.controller" />

<!-- 加入SpringMVC注解管理 -->
<mvc:annotation-driven />

<!-- 视图控制器VM,不需要prefix,于velocityConfigurer中设置 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
    <property name="suffix"><value>.vm</value></property>
    <property name="contentType"><value>text/html;charset=utf-8</value></property>
</bean>
velocity-servlet.xml中spring相关参数设置
<bean id="velocityConfigurer"
    class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
    <!-- 模版路径 -->
    <property name="resourceLoaderPath">
        <value>/templates/</value>
    </property>
    <!-- 模版属性 -->
    <property name="velocityProperties">
        <props>
            <prop key="input.encoding">utf-8</prop>
            <prop key="output.encoding">utf-8</prop>
        </props>
    </property>
</bean>

注:以上3个xml配置文件,分开的目的是使结构清晰,各司其职,可以合在一个xml配置文件中。

DemoController.java对应的跳转
package cn.ipwin.velocity03.controller;

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

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class DemoController {

    @RequestMapping(value = "/demo")
    public String hello(ModelMap model) {

        // 准备测试数据
        List<String> list = new ArrayList<String>();
        list.add("List element 1");
        list.add("List element 2");
        list.add("List element 3");
        list.add("List element 4");

        model.put("list", list);

        return "demo";
    }

}
demo.vm模版
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Velocity DEMO</title>
  </head>
  <body>
    #set( $this = "Velocity")
    $this is so great!<br/>
    #foreach( $name in $list )
        $name<br/>
    #end
  </body>
</html>

运行结果如下:

Velocity is so great!
List element 1
List element 2
List element 3
List element 4