返回顶部

收藏

spring mvc velocity的模板引擎

更多

spring mvc支持velocity的模板引擎, 我们看下如何配置。

从pom.xml文件开始, 在pom文件中需要添加velocity和spring相关依赖:

<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/maven-v4_0_0.xsd">
    <parent>
        <artifactId>j</artifactId>
        <groupId>hello</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>hello-web</artifactId>
    <packaging>war</packaging>
    <name>hello-web Maven Webapp</name>
    <url>http://maven.apache.org</url>
    <properties>
        <spring.version>3.2.3.RELEASE</spring.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <!-- spring framework related dependencies -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- velocity related dependencies -->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity</artifactId>
            <version>1.7</version>
        </dependency>

        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-tools</artifactId>
            <version>2.0</version>
        </dependency>
    </dependencies>
    <build>
        <finalName>hello-web</finalName>
        <plugins>
            <plugin>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>maven-jetty-plugin</artifactId>
                <version>6.1.26</version>
                <configuration>
                    <connectors>
                        <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
                            <port>8080</port>
                        </connector>
                    </connectors>
                    <scanIntervalSeconds>10</scanIntervalSeconds>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

下一步需要配置web.xml文件:

<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
    <display-name>Archetype Created Web Application</display-name>

    <servlet>
        <!-- Override init parameter to avoid nasty -->
        <!-- file locking issue on windows.         -->
        <servlet-name>default</servlet-name>
        <init-param>
            <param-name>useFileMappedBuffer</param-name>
            <param-value>false</param-value>
        </init-param>
    </servlet>

    <!-- spring mvc servlet -->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring/spring-mvc.xml</param-value>
            <description>spring mvc config file</description>
        </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>

在web.xml中指定的spring配置文件位置为spring/spring-mvc.xml, 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:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:component-scan base-package="cn.outofmemory.controller"/>
    <mvc:annotation-driven/>

    <bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
        <property name="resourceLoaderPath" value="/WEB-INF"/>
        <property name="configLocation" value="classpath:velocity.properties"/>
    </bean>

    <!--org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
        <property name="suffix" value=".vm"/>
        <property name="prefix" value="/views"/>
        <!-- 使用springMacro的对象 -->
        <property name="exposeSpringMacroHelpers" value="true"/>
        <property name="requestContextAttribute" value="content"/>
        <property name="exposeRequestAttributes" value="true"/>
        <property name="exposeSessionAttributes" value="true"/>
        <property name="contentType" value="text/html;charset=UTF-8"/>
        <!-- spring的日期格式化 -->
        <property name="dateToolAttribute" value="dateTool"/>
        <!-- velocity toolbox -->
        <property name="toolboxConfigLocation" value="/WEB-INF/toolbox.xml"/>
    </bean>
</beans>

请注意看注释内容, 在VelocityViewResolver bean中指定了toolbox.xml, 其内容如下:

<?xml version="1.0" encoding="utf-8"?>
<toolbox>
    <tool>
        <key>date</key>
        <scope>request</scope>
        <class>
            org.apache.velocity.tools.generic.DateTool
        </class>
        <parameter name="format" value="yyyy-MM-dd HH:mm:ss"/>
    </tool>
    <tool>
        <key>link</key>
        <scope>request</scope>
        <class>org.apache.velocity.tools.view.tools.LinkTool</class>
    </tool>
    <tool>
        <key>stringUtils</key>
        <scope>request</scope>
        <class>org.apache.velocity.util.StringUtils</class>
    </tool>
    <tool>
        <key>math</key>
        <scope>application</scope>
        <class>org.apache.velocity.tools.generic.MathTool</class>
    </tool>
    <tool>
        <key>esc</key>
        <scope>request</scope>
        <class>org.apache.velocity.tools.generic.EscapeTool</class>
    </tool>
    <tool>
        <key>params</key>
        <scope>request</scope>
        <class>org.apache.velocity.tools.view.tools.ParameterParser</class>
    </tool>
</toolbox>

另外我们还需要在resources中配置velocity.properties文件,设定velocity的选项, 其内容如下,你可以根据自己需要来做相应的调整

tools.view.servlet.layout.directory = /WEB-INF/templates/layout/
tools.view.servlet.layout.default.template = default.vm
default.contentType=text/html;charset=utf-8
input.encoding = UTF-8
output.encoding = UTF-8
class.resource.loader.cache=false
velocimacro.library.autoreload=true
directive.set.null.allowed = true
runtime.log.error.stacktrace = true
runtime.log.warn.stacktrace = true
runtime.log.info.stacktrace = true
runtime.log.logsystem.class = org.apache.velocity.runtime.log.SimpleLog4JLogSystem
runtime.log.logsystem.log4j.category = velocity_log

以上spring mvc + velocity相关配置就完成了,下面我们用一个具体的例子来做下测试:

新建一个Controller类,添加index方法:

package cn.outofmemory.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * Created by yukaizhao on 2015/10/17.
 */
@Controller
public class IndexController {

    /**
     *  首页处理方法
     * @return 首页对应的view名称 
     */
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String index() {
        return "/index";
    }
}

然后我们还需要在web项目的WEB-INF目录下建好views目录,并新建index.vm 文件:

<!doctype html>
<html>
    <head>
        <title>hello web application</title>
    </head>
    <body>
        <h1>hello web application</h1>
    </body>
</html>

运行项目即可看到vm模板引擎正常工作了, 本文源码提供如下:

spring mvc + velocity 源码

标签:springMVC,spring,java,velocity

收藏

0人收藏

支持

0

反对

0