亚洲韩日午夜视频,欧美日韩在线精品一区二区三区,韩国超清无码一区二区三区,亚洲国产成人影院播放,久草新在线,在线看片AV色

您好,歡迎來(lái)到思海網(wǎng)絡(luò),我們將竭誠(chéng)為您提供優(yōu)質(zhì)的服務(wù)! 誠(chéng)征網(wǎng)絡(luò)推廣 | 網(wǎng)站備案 | 幫助中心 | 軟件下載 | 購(gòu)買(mǎi)流程 | 付款方式 | 聯(lián)系我們 [ 會(huì)員登錄/注冊(cè) ]
促銷推廣
客服中心
業(yè)務(wù)咨詢
有事點(diǎn)擊這里…  531199185
有事點(diǎn)擊這里…  61352289
點(diǎn)擊這里給我發(fā)消息  81721488
有事點(diǎn)擊這里…  376585780
有事點(diǎn)擊這里…  872642803
有事點(diǎn)擊這里…  459248018
有事點(diǎn)擊這里…  61352288
有事點(diǎn)擊這里…  380791050
技術(shù)支持
有事點(diǎn)擊這里…  714236853
有事點(diǎn)擊這里…  719304487
有事點(diǎn)擊這里…  1208894568
有事點(diǎn)擊這里…  61352289
在線客服
有事點(diǎn)擊這里…  531199185
有事點(diǎn)擊這里…  61352288
有事點(diǎn)擊這里…  983054746
有事點(diǎn)擊這里…  893984210
當(dāng)前位置:首頁(yè) >> 技術(shù)文章 >> 文章瀏覽
技術(shù)文章

用Apache Velocity模板引擎速造網(wǎng)站

添加時(shí)間:2014-9-1 17:59:06  添加: 思海網(wǎng)絡(luò) 

  基于Java的網(wǎng)站開(kāi)發(fā),很多人都采用JSP作為前端網(wǎng)頁(yè)制作的技術(shù),尤其是在國(guó)內(nèi)。這種技術(shù)通常會(huì)存在一些問(wèn)題,可以通過(guò)簡(jiǎn)單地分析網(wǎng)站開(kāi)發(fā)過(guò)程來(lái)看看這些問(wèn)題。通常網(wǎng)站開(kāi)發(fā)采用以下兩種方式:

  ◆ 網(wǎng)站功能確定后,由美工設(shè)計(jì)網(wǎng)頁(yè)的UI(界面)部分,然后由程序員在其上加入代碼顯示邏輯(比如循環(huán)、判斷顯示數(shù)據(jù)結(jié)果)。這就是通常的JSP頁(yè)面制作,當(dāng)然這部分可以由美工完成模板,然后由JSP工程師以它為原型創(chuàng)建相應(yīng)的JSP頁(yè)面。

  ◆ 網(wǎng)站功能確定后,由美工設(shè)計(jì)網(wǎng)頁(yè)的UI(界面)部分,然后由網(wǎng)頁(yè)制作人員在其上加入代碼顯示邏輯(比如循環(huán)、判斷顯示數(shù)據(jù)結(jié)果)。在這一步的JSP頁(yè)面制作中,網(wǎng)頁(yè)制作人員通常只需要懂Java和HTML,在工程師的指導(dǎo)下學(xué)會(huì)如何嵌入JSP taglib標(biāo)記,然后以美工的模板為原型制作JSP網(wǎng)頁(yè)。

  顯然后一種方式要比前一種方式分工明確。然而在很多小公司,或者項(xiàng)目緊急的情況下,JSP網(wǎng)頁(yè)制作和后臺(tái)程序開(kāi)發(fā)都是同一個(gè)人,這樣無(wú)疑加大了程序員的負(fù)擔(dān)。后一種情況也有兩個(gè)缺點(diǎn),一是網(wǎng)頁(yè)制作人員必須學(xué)會(huì)如何使用JSP taglib,這將加大網(wǎng)頁(yè)制作人員的負(fù)擔(dān);二是如果頁(yè)面因?yàn)榭蛻舻囊笾匦略O(shè)計(jì),那么無(wú)論哪種情況,網(wǎng)頁(yè)制作人員都要將顯示邏輯重新嵌入JSP網(wǎng)頁(yè)。

  雖然從性能角度和taglib的使用上來(lái)說(shuō),JSP比PHP和ASP做得要好,但它在設(shè)計(jì)上同樣類似PHP這種服務(wù)器頁(yè)面語(yǔ)言,即在頁(yè)面中嵌入腳本語(yǔ)言的技術(shù)。這使得它雖然比傳統(tǒng)基于CGI腳本語(yǔ)言的開(kāi)發(fā)模式速度快,但卻將后臺(tái)程序邏輯與頁(yè)面顯示混淆。

  用MVC模式開(kāi)發(fā)網(wǎng)站

  現(xiàn)在更多的網(wǎng)站制作采用一種稱為MVC的模式,也就是將網(wǎng)站制作工作分工,分為M(Model,模型)、V(View,視圖)和C(Controller,控制器)。

  ◆ M(Model,模型) M包括后臺(tái)的事務(wù)邏輯、真正處理事務(wù)的代碼和商業(yè)邏輯等,它們是整個(gè)網(wǎng)站最重要的工作部分。通常這部分代碼相對(duì)比較穩(wěn)定,不會(huì)經(jīng)常變動(dòng),就是有所變動(dòng)也不會(huì)對(duì)前端的頁(yè)面產(chǎn)生影響。

  ◆ V(View,視圖) V是網(wǎng)頁(yè)的顯示部分,這部分接受來(lái)自后臺(tái)程序的結(jié)果或數(shù)據(jù),進(jìn)行顯示。V視圖通常是變化比較大的部分,比如網(wǎng)站界面的每日更新,每隔一段時(shí)間更新網(wǎng)頁(yè)風(fēng)格等都會(huì)造成V視圖部分的大量更改工作。

  ◆ C(Controller,控制器) C在視圖和模型之間傳遞控制,并根據(jù)要求調(diào)用相應(yīng)的視圖顯示模型返回的數(shù)據(jù),主要負(fù)責(zé)調(diào)度工作。

  這種職責(zé)的分工到底有什么好處呢?它簡(jiǎn)化了軟件開(kāi)發(fā)過(guò)程中所有相關(guān)人員的工作,使不同部分的修改通常不會(huì)影響到其它部分的工作。比如,修改后臺(tái)某些程序的算法并不影響前臺(tái)的頁(yè)面顯示,前臺(tái)頁(yè)面的修改也不影響后臺(tái)程序的開(kāi)發(fā)。

  這種分工合作比起JSP混淆代碼邏輯和顯示層的方式要好得多。所以越來(lái)越多的國(guó)外程序員在不斷提出替代JSP的方案。在眾多方案中,基于Java模板引擎的技術(shù)脫穎而出,其中著名的有Velocity和Webmacro兩種模板技術(shù)。

  Velocity模板引擎

  
模板引擎的設(shè)計(jì)思想最早由Webmacro提出,并被應(yīng)用在一個(gè)著名的搜索引擎www.altavista.com上。后來(lái),這種思想漸漸被Apache開(kāi)發(fā)小組所采用,并作為一個(gè)子項(xiàng)目被提出來(lái),這就是現(xiàn)在的Velocity。

  模板引擎與MVC中視圖部分的關(guān)系更為密切。Velocity可以應(yīng)用在任何需要格式化數(shù)據(jù)顯示的Java程序中。那么Velocity到底是什么呢?它的官方解釋是:“Velocity是一種基于Java的模板引擎,它允許任何人使用簡(jiǎn)單而強(qiáng)大的模板語(yǔ)言來(lái)引用定義在Java代碼中的對(duì)象。”

  使用Velocity的優(yōu)點(diǎn)在于:

  ◆ 很容易集成在各種各樣的程序領(lǐng)域中;

  ◆ 為網(wǎng)頁(yè)制作人員提供了一種清晰而簡(jiǎn)單的語(yǔ)法;

  ◆ 因?yàn)槟0搴痛a是分離的,所以可以分別獨(dú)立的開(kāi)發(fā)和維護(hù)它們;

  ◆ Velocity引擎可以很容易地集成到一些Java運(yùn)行環(huán)境,特別是Servlet中;

  ◆ Velocity使得模板可以訪問(wèn)任何環(huán)境對(duì)象中的共有方法。

  Velocity的強(qiáng)大之處還在于它嚴(yán)格地區(qū)分程序開(kāi)發(fā)功能的職責(zé)劃分。它通過(guò)限制模板可能訪問(wèn)的對(duì)象(即后臺(tái)程序允許其得到的對(duì)象)來(lái)實(shí)現(xiàn)這一點(diǎn)。這意味著網(wǎng)頁(yè)設(shè)計(jì)人員可以只把精力放在數(shù)據(jù)的顯示部分(View),而程序員則只要關(guān)注如何寫(xiě)好程序的控制層(Controller)、商業(yè)邏輯與數(shù)據(jù)管理(Model)。這就是典型的MVC開(kāi)發(fā)模式,它簡(jiǎn)化了開(kāi)發(fā)和日益復(fù)雜的應(yīng)用和維護(hù)工作。

  Velocity最擅長(zhǎng)做的工作包括:

  ◆ 基于Servlet的網(wǎng)站制作;

  ◆ Java和SQL代碼生成;

  ◆ XML處理和轉(zhuǎn)換;

  ◆ 文字處理,比如生成trf文件等。

  不過(guò),Velocity用得最多的還是在基于Java Servlet的網(wǎng)頁(yè)程序中做生成網(wǎng)頁(yè)的引擎,以替代JSP等技術(shù)。除了使用比較容易外,它提供了強(qiáng)大的模板語(yǔ)言來(lái)顯示和操作數(shù)據(jù)。注意,不是生成數(shù)據(jù),這點(diǎn)很重要,因?yàn)樯晒ぷ鲬?yīng)該是程序邏輯的部分。

  Velocity非常適合在J2EE(Java 2 Platform,Enterprise Edition)的網(wǎng)站開(kāi)發(fā)中替代JSP,做輸出頁(yè)面的技術(shù)工作。雖然JSP包含在J2EE規(guī)范中,但是J2EE本身并不需要JSP。

  用Velocity做網(wǎng)頁(yè)

  Velocity是如何工作的呢?雖然大多數(shù)Velocity的應(yīng)用都是基于Servlet的網(wǎng)頁(yè)制作,但是為了說(shuō)明Velocity的使用,這里將采用更通用的Java Application來(lái)說(shuō)明它的工作原理。

  任何Velocity的應(yīng)用都包括模板制作和程序部分兩個(gè)方面。按照慣例,采用HelloWorld來(lái)作為第一個(gè)程序的示例。

  1. 模板制作模板示例hellosite.vm的內(nèi)容如下(雖然其不是以HTML為主,但很容易改成一個(gè)HTML的頁(yè)面):

Hello $name!  Welcome to $site world!

  2.Java程序部分 

  下面是Java代碼:

import java.io.StringWriter;import org.apache.velocity.app.VelocityEngine;import org.apache.velocity.Template;import org.apache.velocity.VelocityContext;public class HelloWorld{public static void main( String[] args )throws Exception{/*  first, get and initialize an engine  */VelocityEngine ve = new VelocityEngine();ve.init();/*  next, get the Template  */Template t = ve.getTemplate( "hellosite.vm" );/*  create a context and add data */VelocityContext context = new VelocityContext();context.put("name", "Eiffel Qiu");context.put("site", "http://www.eiffelqiu.com");/* now render the template into a StringWriter */StringWriter writer = new StringWriter();t.merge( context, writer );/* show the World */System.out.println( writer.toString() );}}

  將這兩個(gè)文件放在同一個(gè)目錄下,編譯運(yùn)行,結(jié)果是:

Hello Eiffel Qiu!  Welcome to http://www.eiffelqiu.com world

  為了保證運(yùn)行順利,請(qǐng)從Velocity的網(wǎng)站http://jakarta.apache.org/velocity/上下載Velocity的運(yùn)行包,并將其中Velocity Jar包的路徑放在系統(tǒng)的Classpath中,這樣就可以順利編譯和運(yùn)行以上程序了。

  這個(gè)程序很簡(jiǎn)單,但是它能清楚地說(shuō)明Velocity的基本工作原理。程序中的其它部分基本上很固定,最主要的部分在以下幾段代碼。

  ◆ Velocity獲取模板文件,得到模板引用:

  

Template t = ve.getTemplate( "hellosite.vm" );

  ◆ 初始化環(huán)境,并將數(shù)據(jù)放入環(huán)境: 

  

VelocityContext context = new VelocityContext();context.put("name", "Eiffel Qiu");context.put("site", "http://www.eiffelqiu.com");

  ◆ 初始化Velocity模板引擎: 

  

VelocityEngine ve = new VelocityEngine();ve.init();

  ◆ 將環(huán)境變量和輸出部分結(jié)合: 

  

StringWriter writer = new StringWriter();t.merge( context, writer );/* show the World */System.out.println( writer.toString() );

  這一部分在將來(lái)的Servlet應(yīng)用中會(huì)有所區(qū)別,因?yàn)榫W(wǎng)頁(yè)輸出并不和命令行輸出相同,如果用于網(wǎng)頁(yè)輸出,將并不通過(guò)System.out輸出。 

  小結(jié) 

  Velocity解決了如何在Servlet和網(wǎng)頁(yè)之間傳遞數(shù)據(jù)的問(wèn)題,當(dāng)然這種傳輸數(shù)據(jù)的機(jī)制是在MVC模式上進(jìn)行的,也就是View、Modle和Controller之間相互獨(dú)立工作,一方的修改不影響其它方面的變動(dòng)。 

  他們之間的聯(lián)系通過(guò)環(huán)境變量(Context)來(lái)實(shí)現(xiàn),當(dāng)然網(wǎng)頁(yè)制作方和后臺(tái)程序方要相互約定好對(duì)所傳遞變量的命名,比如上個(gè)程序例子中的site、name變量,它們?cè)诰W(wǎng)頁(yè)上就是$name、$site。 

  這樣只要雙方約定好變量名字,就可以獨(dú)立工作了。無(wú)論頁(yè)面如何變化,只要變量名不變,后臺(tái)程序無(wú)需改動(dòng),前臺(tái)網(wǎng)頁(yè)也可以任意由網(wǎng)頁(yè)制作人員修改。 

  通常簡(jiǎn)單變量名無(wú)法滿足網(wǎng)頁(yè)制作顯示數(shù)據(jù)的需要,比如經(jīng)常會(huì)循環(huán)顯示一些數(shù)據(jù)集,或者是根據(jù)一些數(shù)據(jù)的值來(lái)決定如何顯示下一步的數(shù)據(jù)等。 

  Velocity同樣提供了循環(huán)、判斷的簡(jiǎn)單語(yǔ)法以滿足網(wǎng)頁(yè)制作的需要。Velocity提供了一個(gè)簡(jiǎn)單的模板語(yǔ)言,供前端網(wǎng)頁(yè)制作人員使用,這個(gè)模板語(yǔ)言簡(jiǎn)單到大部分懂得Java的人都可以很快掌握,其甚至比Java更簡(jiǎn)單。 

  當(dāng)然這種簡(jiǎn)單是刻意的,因?yàn)椴恍枰猇elocity什么都能完成,而只需專注于其應(yīng)該完成的。View層不應(yīng)該包含更多的邏輯,Velocity的簡(jiǎn)單模板語(yǔ)法完全可以滿足所有對(duì)頁(yè)面顯示邏輯的需要,并且也不會(huì)發(fā)生像JSP那樣因?yàn)橐粋(gè)無(wú)限循環(huán)語(yǔ)句而毀掉系統(tǒng)的情況。

關(guān)鍵字:數(shù)據(jù)、網(wǎng)站、模板、Apache

分享到:

頂部 】 【 關(guān)閉
版權(quán)所有:佛山思海電腦網(wǎng)絡(luò)有限公司 ©1998-2024 All Rights Reserved.
聯(lián)系電話:(0757)22630313、22633833
中華人民共和國(guó)增值電信業(yè)務(wù)經(jīng)營(yíng)許可證: 粵B1.B2-20030321 備案號(hào):粵B2-20030321-1
網(wǎng)站公安備案編號(hào):44060602000007 交互式欄目專項(xiàng)備案編號(hào):200303DD003  
察察 工商 網(wǎng)安 舉報(bào)有獎(jiǎng)  警警  手機(jī)打開(kāi)網(wǎng)站