velocity(4)——velocity與springmvc集成,使用veloctiy布局

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";
    }  
} 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容