小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

《Velocity Web應(yīng)用指南》中文版

 pablo3518 2007-08-15

Velocity Web應(yīng)用指南》中文版

來(lái)源http://velocity.

 

 

 

 

 

 

 

 

 

 

 

聲明: 轉(zhuǎn)載請(qǐng)保留此頁(yè)聲明

**************************************************************************

此文檔為藍(lán)杰實(shí)訓(xùn)學(xué)員拓展實(shí)訓(xùn)之用.

藍(lán)杰實(shí)訓(xùn)不對(duì)譯文中某些說(shuō)法可能會(huì)對(duì)您的系統(tǒng)或開(kāi)發(fā)造成損害負(fù)責(zé).

如對(duì)您有所幫助,我們不勝榮幸!

*************************************************************************

本文屬NetJava.cn中的Velocity中文系列,本系包含如下文章:

Velocity Java開(kāi)發(fā)指南中文版》(Developer`s Guide)

Velocity模板使用指南中文版》(User`s Guide)

Velocity Web應(yīng)用開(kāi)發(fā)指南中文版》(Web Application Guide)

VTL語(yǔ)法參考指南中文版》(VTL Reference)

DB4O中文系列之起步篇》

 . . .

 更多資料請(qǐng)?jiān)L問(wèn)http://www./ 下載.

**************************************************************************

譯者: javaFound

Mail: javafound@gmail.com

NetJava.cn@gmail.com

*************************************************************************

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

目錄

1.使用Velocity構(gòu)建Web應(yīng)用

2.Use a Framework

3.Web應(yīng)用用例

4.不要改變己輸出對(duì)象的狀態(tài)!

5.HTML/XML字符轉(zhuǎn)義

6.應(yīng)用安全性

7.日志文件

8.布署指南

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.使用Velocity構(gòu)建Web應(yīng)用

Velocity常見(jiàn)的用途是生成web頁(yè)面, 通常用來(lái)替換JSP技術(shù). 使用它生成頁(yè)面有以下優(yōu)勢(shì):

  • 簡(jiǎn)潔一般的web美工不需要懂程序語(yǔ)言的就可以設(shè)計(jì)動(dòng)態(tài)業(yè)面.
  • Web系統(tǒng)容易維護(hù) – MVC推薦的做法是在頁(yè)面中不要存在其它的腳本語(yǔ)言出現(xiàn)..
  • 容易訪問(wèn)數(shù)據(jù)模型的命令和屬性 – 頁(yè)面設(shè)計(jì)者通過(guò)引用簡(jiǎn)單的就可訪問(wèn)context中的java數(shù)據(jù)對(duì)象.
  • 一致性 – Velocity可用做其它的文本模板生成任務(wù),如如發(fā)送email.

本系列全面講解了將Velocity應(yīng)用從入門(mén)到精通其技術(shù)特點(diǎn)應(yīng)用的每個(gè)方面,助你成為MVC構(gòu)架的高手,本文由javaFound(NetJava.cn@gmail.com)譯自http://velocity./ .a

2.Use a Framework

Velocity的主要目標(biāo)是通過(guò)模板生成格式文檔. 因此, Velocity自身不提供任何Web相關(guān)的功能. 當(dāng)你需要開(kāi)發(fā)Web應(yīng)用時(shí), 需要一個(gè)框架來(lái)接收HTTP請(qǐng)求和, 處理用戶認(rèn)證,執(zhí)行業(yè)務(wù)邏輯調(diào)用,最后生成應(yīng)答內(nèi)容返回給客戶端。這里有幾個(gè)良好的可選方案:

1.      Velocity Tools / VelocityViewServlet – 這是最容易的起步方法,你在下載時(shí)可同時(shí)下載Velocity Tools (Velocity的一個(gè)子項(xiàng)目)來(lái)使用其所長(zhǎng) VelocityViewServlet. 這是一個(gè)很容易配置和安裝的Servlet. 在你的web服務(wù)器上創(chuàng)建一個(gè)模板目錄,編輯一下配置的XML文件就行了---這很容易,我們隨后就講到.

2.      Velocity Tools / VelocityStruts – 也許你比較熟悉流行的 Struts framework, Struts最初被設(shè)計(jì)為JSP應(yīng)用提供更多的功能支撐.利用Velocity的 VelocityStruts 模塊工具, 可以替代jsp而用模板語(yǔ)言做Web頁(yè)面對(duì)面. 這樣Struts的強(qiáng)大功能和Velocity有輕巧靈活就有效的結(jié)合到一起.

3.      第三方框架 – 還有更多的第三方框架可用,你可到wiki PoweredByVelocity 頁(yè)面上了解更多, Spring 也許是目前最為知名的了. Jakarta Turbine 也有很多特色也是與Velocity結(jié)合最好的. 它使用VTL做為主要的頁(yè)面語(yǔ)言, 它優(yōu)秀的設(shè)計(jì)會(huì)讓你驚異開(kāi)發(fā)者到底是怎么設(shè)計(jì)的它. 另外還有 Click or Maverick frameworks, 也提供了與Velocity整合很好的結(jié)構(gòu).

4.      創(chuàng)建你自己的 – 最后的一招是創(chuàng)建你自己的應(yīng)用結(jié)構(gòu),只需創(chuàng)建一個(gè)主要用于分發(fā)請(qǐng)求的Servlet servlet, 用來(lái)從文件或DB提取模板,整合你現(xiàn)有的業(yè)務(wù)域處理后,將結(jié)果發(fā)給用戶,一點(diǎn)也不費(fèi)力氣,就可用它整合你現(xiàn)有的系統(tǒng). 更進(jìn)一步,你可以通過(guò)extends  VelocityViewServlet 來(lái)添加更多的你需要的功能.

另一方面,你可以多處引用VelocityServlet,但我們強(qiáng)烈建議你使用Velocity Tools中的VelocityViewServlet替代它.

3.Web應(yīng)用用例

這兒講解一些在Web應(yīng)用中的一般規(guī)則:

4.不要改變己輸出對(duì)象的狀態(tài)!

Velocity實(shí)際上通過(guò)引用來(lái)調(diào)用對(duì)象的命令.當(dāng)頁(yè)面正在顯示時(shí),而程序中的對(duì)象發(fā)生了改變,這就會(huì)帶來(lái)麻煩,如下例程示:

比如,以下是一個(gè)正常的調(diào)用一個(gè)List的命令size() 來(lái)顯示結(jié)果.

There are $users.size() currently logged in.

例如你在一個(gè)計(jì)算銀行帳額的頁(yè)面中如下寫(xiě)道:

2005 data: $table.data

$table.calculateNextYear()

2006 data: $table.data

這里就有可能發(fā)生問(wèn)題:你在通過(guò)VTL來(lái)改變一個(gè)對(duì)象的狀態(tài)后,再輸出對(duì)象的數(shù)據(jù),----要保證輸出的數(shù)據(jù)如你所愿,就絕對(duì)要保證在VTL中計(jì)算完成,沒(méi)有其它操作改變這個(gè)對(duì)象的狀態(tài),但頁(yè)面的設(shè)計(jì)者在使用VTL時(shí)肯定不能保證這一點(diǎn):想像你剛計(jì)算出帳金額,在沒(méi)輸出前某個(gè)地方的另一個(gè)操作將這個(gè)金額清0了,你會(huì)暈死呢。。。。。. 這種問(wèn)題出現(xiàn)的可能性無(wú)法從VTL本身的語(yǔ)法中消除,比如常用的#if 和 #foreach指令操作中就可能出現(xiàn),或在你用來(lái)控制應(yīng)用的會(huì)話狀態(tài)時(shí)會(huì)出現(xiàn)更多.

因此:強(qiáng)烈建議僅僅是使用Velocity將需要的信息插入到文本中---Velocity中的引用只是從java數(shù)據(jù)對(duì)象取得信息,而這個(gè)提取的命令調(diào)用不要改變對(duì)象的任何狀態(tài)!,不要在VTL中操作對(duì)象!

如果確實(shí)需要這樣做 (像上面的那個(gè)例子) ,可以先把計(jì)算出的值放入一個(gè)由控制器管理下的map或list中,所有計(jì)算結(jié)果的提取或狀態(tài)的改變都由一個(gè)控制器來(lái)代理.

另一個(gè)要注意的是, 不要將Iterator or Enumeration 對(duì)象放入context,可以用List或Set對(duì)象..

5.HTML/XML字符轉(zhuǎn)義

用戶輸入的包含特定 HTML or XML 符號(hào)的內(nèi)容 (如 <, >, or &)在Web頁(yè)面中需要轉(zhuǎn)義. 這是保證這字符串有效的辦法, 也可以防止出錯(cuò) cross-site scripting. 與JSTL (the Java Standard Tag Language found in Java Server Pages)不同的是, Velocity 默認(rèn)不會(huì)對(duì)這些字符做轉(zhuǎn)義處理.

Velocity還是提供了這個(gè)事件接口: ReferenceInsertionEventHandler ,在這種字符插入到VTL中時(shí)讓你接收事件.你可以在文件velocity.properties中配置EscapeHtmlReference處理器以處理的表達(dá)式. 以下配置將包裝所有以msg開(kāi)頭的內(nèi)容為HTML 內(nèi)容實(shí)體(e.g. $msgText).

eventhandler.referenceinsertion.class = org.apache.velocity.app.event.implement.EscapeHtmlReference

eventhandler.escape.html.match = /msg.*/

注意:有時(shí)其它封類型.如,CSS( style sheets)中的@ 符號(hào)需要封裝, Javascript中的單引號(hào)‘也需要.

6.應(yīng)用安全性

Web應(yīng)用是運(yùn)行在網(wǎng)絡(luò)上的一個(gè)服務(wù),會(huì)有很多用戶訪問(wèn)不同機(jī)密程序的資源, 安全性是其首要條件. 一些標(biāo)準(zhǔn)的Web安全規(guī)則是Velocity所支持的.一些用法 (系統(tǒng)配置,兼容性腳本,命令攔截)都可以參考 Building Secure Applications with Velocity. 以進(jìn)一步了解, 你也需要防止模板設(shè)計(jì)者寫(xiě)下 "危險(xiǎn)"的引用指令---你需要對(duì)java對(duì)象更好的封裝.還可以這樣做,只是我不知這話是什么意思: you may want to prevent template designers from including "dangerous" reflection-related methods by specifying the SecureUberspector to get/set properties and execute method calls.

runtime.introspector.uberspect = org.apache.velocity.util.introspection.SecureUberspector

 

7.日志文件

Velocity日志配置方面需求較少,它默認(rèn)的會(huì)在使用的web程序的當(dāng)前目錄下創(chuàng)建velocity.log,"current directory" –指的是應(yīng)用服務(wù)器啟動(dòng)的目錄,如你從tomcat的bin目錄下雙擊start.bat啟動(dòng),那這個(gè)日志就是在bin下.

8.布署指南

這是一個(gè)將VelocityViewServlet構(gòu)建到你的Web 應(yīng)用中的簡(jiǎn)潔指南. (建議你先將VelocityViewServlet從源包中編譯,但這不是必須的).我們建議按如下步驟使用:

需要 Java Developer‘s Kit (JDK) and Apache Ant 支持.

更多的信息可以查看 Velocity Tools documentation.

1.      下載Veloicyt tools和源碼: download page.

2.      輸出以下命令使用ant編譯 Velocity Tools jar和例子:

3.             ant example.simple

4.      打開(kāi)目錄 "examples" ,你將看到"index.vm". 這是其中一些內(nèi)容摘要::

5.             <html>

6.             <body>

7.             I‘m a velocity template.

8.              

9.             #if( $XHTML )

10.            #set( $br = "<br />" )

11.          #else

12.            #set( $br = "<br>" )

13.          #end

14.           

15.          $br

16.          $br

17.           

18.          Here we use a custom tool: $toytool.message

19.           

20.          $br

21.          $br

22.           

23.          Here we get the date from the DateTool:  $date.medium

24.          </body>

25.          </html>

You can copy any additional velocity files into this same directory. In examples/WEB-INF you will see a file "toolbox.xml". This specifies a list of "Tools" that are automatically included in the context.

<toolbox>

  <xhtml>true</xhtml>

  <tool>

     <key>toytool</key>

     <class>ToyTool</class>

  </tool>

  <data type="number">

    <key>version</key>

    <value>1.1</value>

  </data>

  <data type="boolean">

    <key>isSimple</key>

    <value>true</value>

  </data>

  <data type="string">

    <key>foo</key>

    <value>this is foo.</value>

  </data>

  <data type="string">

    <key>bar</key>

    <value>this is bar.</value>

  </data>

  <tool>

    <key>map</key>

    <class>java.util.HashMap</class>

  </tool>

  <tool>

    <key>date</key>

    <scope>application</scope>

    <class>org.apache.velocity.tools.generic.DateTool</class>

  </tool>

</toolbox>

And finally the web.xml file specifies the name of the servlet and location of toolbox.properties.

<web-app>

  <servlet>

    <servlet-name>velocity</servlet-name>

    <servlet-class>

        org.apache.velocity.tools.view.servlet.VelocityViewServlet

    </servlet-class>

    <init-param>

      <param-name>org.apache.velocity.toolbox</param-name>

      <param-value>/WEB-INF/toolbox.xml</param-value>

    </init-param>

    <load-on-startup>10</load-on-startup>

  </servlet>

  <servlet-mapping>

    <servlet-name>velocity</servlet-name>

    <url-pattern>*.vm</url-pattern>

  </servlet-mapping>

  <welcome-file-list>

    <welcome-file>index.vm</welcome-file>

  </welcome-file-list>

</web-app>

26.   將這個(gè)目錄下的東東全部考到你的tomcat的"webapps" 目錄下. ---也可以只考 "simple.war",現(xiàn)在可以這樣來(lái)訪問(wèn)了:

27.          http://localhost:8080/simple/index.vm

28.   你可以測(cè)試加入新的velocity模板. 你只需改變?cè)L問(wèn)的URL就可訪問(wèn)這些頁(yè)面. 可以在Toolbox.xml 中改變配置或創(chuàng)建你自己的工具,請(qǐng)查看 Velocity Tools 文檔或 Wiki 取得更多信息.

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多