SpringMVC 整合velocity以及介紹velocity的基本使用語法
Velocity模板(VM)語言介紹以及與MVC整合
Velocity是一個基於java的模板引擎(template engine)。它允許任何人僅僅簡單的使用模板語言(template language)來引用由java程式碼定義的物件。 當Velocity應用於web開發時,介面設計人員可以和java程式開發人員同步開發一個遵循MVC架構的web站點,也就是說,頁面設計人 員可以只關注頁面的顯示效果,而由java程式開發人員關注業務邏輯編碼。Velocity將java程式碼從web頁面中分離出來,這樣為web站點的長 期維護提供了便利,同時也為我們在JSP和PHP之外又提供了一種可選的方案。
Velocity現在應用非常廣泛,現在嘗試將SpringMVC專案與Velocity整合。
1.整合過程
採用以前整合的[SpringMVC專案]。 主要涉及改變的檔案: pom.xml(引入velocity的jar包) spring-mvc.xml(檢視配置,配置velocity)
velocity.properties(velocity配置檔案)
下面簡要描述一下在spring mvc中配置velocity的步驟:
1、引入velocity所需要的包(mvc的基礎上做的新增在這裡就省略mvc所匯入的jar)
<!-- Velocity模板 --> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity</artifactId> <version>1.5</version> </dependency> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-tools</artifactId> <version>2.0</version> </dependency>
2.新增配置資訊(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:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!--包掃描--> <context:component-scan base-package="controller"/> <!--新的名稱空間 mvc 自動註冊處理器介面卡 和 處理器對映器 處理一些響應相關的操作 不僅代替處理器對映器還代替處理器介面卡,還可以處理響應相關的操作 @ResponseBody就是響應到前臺的就要配置在這個名稱空間裡 --> <mvc:annotation-driven/> <!--建立處理器對映器 <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> 建立處理器介面卡 <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/> --> <!-- 檢視解析器 根據controller方法的返回值解析結果為 字首+ return返回值+字尾 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/"/> <property name="suffix" value=".jsp"/> </bean> --> <!-- 檢視模式配置,velocity配置檔案--> <bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer"> <property name="resourceLoaderPath" value="/WEB-INF/views" /> <property name="configLocation" value="classpath:velocity.properties" /> </bean> <!-- 配置字尾 --> <bean id="velocityViewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver"> <property name="suffix" value=".vm" /> <property name="contentType"><value>text/html;charset=UTF-8</value></property> </bean> </beans>
3.velocity.properties配置檔案
#encoding 設定編碼格式 input.encoding=UTF-8 output.encoding=UTF-8 #autoreload when vm changed file.resource.loader.cache=false file.resource.loader.modificationCheckInterval=2 velocimacro.library.autoreload=false
4.配置完後書寫TestController
import org.apache.log4j.Logger; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping("/hello") public class HelloController { private static Logger logger = Logger.getLogger(HelloController.class); @RequestMapping("/showAllUser") public String showAllUser(HttpServletRequest request,Model model){ //volicaty放入集合 List<User> list = new ArrayList<User>(); User user = new User(); user.setAge(1); user.setDate(new Date()); user.setId("1"); user.setName("張三"); User user2 = new User(); user2.setAge(1); user2.setDate(new Date()); user2.setId("s"); user2.setName("李四"); list.add(user); list.add(user2); logger.info("userList's size==============" +list.size()); model.addAttribute("userList",list); //放入單個數據 model.addAttribute("user","測試資料"); return "showAllUser"; } }
5.showAllUser.vm模板(放置在WEB-INFO下面新增views資料夾)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>show all users</title> </head> <body> <h2>單個名字:$user</h2> <hr/> <table >遍歷集合所得到的資料 #foreach($user in $userList) <tr > <td >$user.name</td> <td >$user.age</td> </tr> #end </table> <hr/> #set($directoryRoot = "www" ) #set($templateName = "index.vm" ) #set($template = "$directoryRoot/$templateName" ) 最終結果:$template </body> </html>
6.訪問結果展示:
2. Velocity基本使用語法
1.展示單條資料
<!--展示單條資料這兩種方式都可以推薦第一種--> <h2>1.單個名字:$user</h2> <hr/> <h2>2.單個名字:${user}</h2> <hr/>
2.展示集合資料
<!--展示集合資料--> <table > #foreach($user in $userList) <tr > <td >$user.name</td> <td >$user.age</td> </tr> #end </table>
3.在模版中給變數賦值
<!--前面兩個都是給變數賦值,展示的結果為:www/index.vm--> #set($directoryRoot = "www" ) #set($templateName = "index.vm" ) #set($template = "$directoryRoot/$templateName" ) 結果:$template
4.條件語句使用語法
<!-- 條件語句使用語法--> #if (${a}>18) 小學 #elseif (${a}<15)中學 #else大學 #end
5.單行以及多行註釋
<!-- 單行註釋--> ## This is a single line comment. <!-- 多行註釋--> #* Thus begins a multi-line comment. Online visitors won’t see this text because the Velocity Templating Engine will ignore it. *#
6.set語法
#set可以建立一個Velocity的變數,一般用於向一個變數或屬性賦值,下面的第一個例子,大概和java中的String name=user.getName();是一個意思. 在Velocity語法樹中,#set表示式對應的是一個ASTSetDirective類,"="兩邊的表示式值,分別對應該類的兩個子節點,LHS和RHS. #set($user.name="zhangsan") 可以理解為 user.setName("zhangsan") #set(name=user.name) 可以理解為 user.getName(); 像上述例子中的第一個:不僅可以表示 user.setName("zhangsan"),還可以表示user.setname("zhangsan"),或者user.put("name","zhangsan"), 這是動態語言的特點,不想java語法那樣嚴格的定義. 注意:#set表示式,結尾不需要#end跟隨,其他表示式基本都需要加#end.
--------------------- 本文來自 weixin_40470497 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/weixin_40470497/article/details/79951169?utm_source=copy