Spring(6)——框架顯示層之Velocity技術(shù)

Velocity教程

一、框架顯示層技術(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語法教程

《Velocity教程》
《使用 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í)體類上,方法直接使用即可。

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

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

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