一、框架顯示層技術(shù)
-
Jsp
優(yōu)點(diǎn):1、功能強(qiáng)大,可以寫java代碼2、支持jsp標(biāo)簽(jsp tag)3、支持表達(dá)式語言(el)4、官方標(biāo)準(zhǔn),用戶群廣,豐富的第三方j(luò)sp標(biāo)簽庫5、性能良好。jsp編譯成class文件執(zhí)行,有很好的性能表現(xiàn).
缺點(diǎn):jsp沒有明顯缺點(diǎn),非要挑點(diǎn)骨頭那就是,由于可以編寫java代碼,如使用不當(dāng)容易破壞mvc結(jié)構(gòu)
-
Velocity
Velocity是較早出現(xiàn)的用于代替jsp的模板語言
優(yōu)點(diǎn):
1、不能編寫java代碼,可以實(shí)現(xiàn)嚴(yán)格的mvc分離
2、性能良好,據(jù)說比jsp性能還要好些
3、使用表達(dá)式語言,據(jù)說jsp的表達(dá)式語言就是學(xué)velocity的
缺點(diǎn):
1、不是官方標(biāo)準(zhǔn)
2、用戶群體和第三方標(biāo)簽庫沒有jsp多。
3、對(duì)jsp標(biāo)簽支持不夠好
-
freemarker
優(yōu)點(diǎn):
1、不能編寫java代碼,可以實(shí)現(xiàn)嚴(yán)格的mvc分離
2、性能非常不錯(cuò)
3、對(duì)jsp標(biāo)簽支持良好
4、內(nèi)置大量常用功能,使用非常方便
5、宏定義(類似jsp標(biāo)簽)非常方便
6、使用表達(dá)式語言
缺點(diǎn):
1、不是官方標(biāo)準(zhǔn)
2、用戶群體和第三方標(biāo)簽庫沒有jsp多
二、Velocity模板(VM)語言介紹
Velocity是一個(gè)基于java的模板引擎(template engine)。它允許任何人僅僅簡(jiǎn)單的使用模板語言(template language)來引用由java代碼定義的對(duì)象。
當(dāng)Velocity應(yīng)用于web開發(fā)時(shí),界面設(shè)計(jì)人員可以和java程序開發(fā)人員同步開發(fā)一個(gè)遵循MVC架構(gòu)的web站點(diǎn),也就是說,頁面設(shè)計(jì)人 員可以只關(guān)注頁面的顯示效果,而由java程序開發(fā)人員關(guān)注業(yè)務(wù)邏輯編碼。
Velocity將java代碼從web頁面中分離出來,這樣為web站點(diǎn)的長(zhǎng) 期維護(hù)提供了便利,同時(shí)也為我們?cè)贘SP和PHP之外又提供了一種可選的方案。
三、SpringMVC項(xiàng)目與Velocity整合
整合過程:
- pom.xml(引入velocity的jar包)
- spring-mvc.xml(視圖配置,配置velocity)
- velocity.properties(velocity配置文件)
(1)加入dependency
<!-- Velocity模板 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.5</version>
</dependency>
<dependency>
<groupId>velocity-tools</groupId>
<artifactId>velocity-tools-generic</artifactId>
<version>1.2</version>
</dependency>
(2)視圖配置
<!-- 視圖模式配置,velocity配置文件-->
<bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
<property name="resourceLoaderPath" value="/WEB-INF/views" />
<property name="configLocation" value="classpath:properties/velocity.properties" />
</bean>
<!-- 配置后綴 -->
<bean id="velocityViewResolver"class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
<property name="suffix" value=".vm" />
</bean>
(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
四、Velocity語法教程
五、Controller返回參數(shù)值:Controller中綁定、添加模型數(shù)據(jù)為視圖頁面展示時(shí)所使用
Controller中進(jìn)行頁面控制,執(zhí)行業(yè)務(wù)邏輯,計(jì)算得到頁面要展示的數(shù)據(jù),需要將這些數(shù)據(jù)綁定到Model上,才能被顯示層獲取到,從而顯示到頁面上。
-
方式一:Controller返回類型為ModelAndView
@RequestMapping("index") public ModelAndView index(){ Map<String,Object> map= new HashMap<String,Object>(); map.put(String,Object); return ModelAndView(String <視圖模板名>,map); } -
方式二:在Controller方法中加Model參數(shù),將數(shù)據(jù)綁定到Model上
@RequestMapping("checkLogin") public String checkLogin(Model model){ model.addAttribute(key,value); // 在視圖模板文件中即可通過key獲取value return "ok"; } -
方式三:利用@ModelAttribute注解,可以將普通方法返回值、請(qǐng)求參數(shù)、Controller方法返回值放入Model中(具體參見Spring(4)——Spring MVC中對(duì)@ModelAttribute注解的介紹)
三種方法中,推薦使用第二種方法。
六、Controller如何獲取Request參數(shù)
1、利用原有的Servlet方法,使用HttpServletRequest
2、利用@RequestParam注解
@RequestParam("username")String name
當(dāng)username在request中不存在,會(huì)拋出異常,可以使用@RequestParam(value="username" required=false default=" 默認(rèn)值")這樣請(qǐng)求有值就取,沒有值就不取。3、使用實(shí)體類封裝
將實(shí)體類(需要具有setter,getter方法)作為Controller方法的參數(shù),請(qǐng)求參數(shù)與實(shí)體類的屬性保持一致,則會(huì)完成自動(dòng)綁定,將請(qǐng)求參數(shù)自動(dòng)綁定到這個(gè)實(shí)體類上,方法直接使用即可。