編譯時間標籤(對JSP進行的XSLT預先處理)

來源:互聯網
上載者:User
js|編譯 一篇舊文,翻出來回顧一下。BTW,抗議csdn的分類,XML怎能歸於.NET之下!!

發信人: HAX(海曦), 信區: WebDevelop

標 題:

發信站: 飲水思源 (2002年02月12日00:10:32 星期二), 站內信件



編譯時間標籤(對JSP進行的XSLT預先處理)



原文:http://www.mail-archive.com/taglibs-dev@jakarta.apache.org/msg00390.html



From: James Strachan

Subject: [OT]: Compile time tags. (XSLT preprocessing of JSP)

Date: Wed, 21 Mar 2001 12:20:45 -0800



翻譯:hax at sjtu dot edu dot cn





這裡是近來令我陷入沉思的關於分離的想法……



我喜歡JSP和自訂標籤,那讓我們把複雜的表現(presentation)和

商務邏輯抽象出來,隱藏到XML標籤之後。我也喜歡快速的JSP開發循

環??編輯一個JSP,在瀏覽器裡按下reload,烏拉!



我注意到有一些使用XSLT來實現JSP標籤的替代方案。例如Cocoon的

XSP和Resin的XTP。



http://xml.apache.org/cocoon/xsp.html

http://www.caucho.com/articles/xtp_templates.xtp



它讓我驚奇,在使用標準的JSP的同時,給我們的工具集裡加入基於X

SLT的“編譯時間”的標籤將會如何?



什麼是必需的?答案是:我們只要使用XML格式的JSP,並且在我們的

servlet引擎嘗試運行它們之前,將我們的XSLT文檔應用於這些JSP。

XSLT可以預先處理特定的XML標籤來完成簡單的格式轉換或加入動態代碼

。這些標籤可以像一般的JSP自訂標籤一樣,賦予命名空間。有了編

譯時標籤,以後我們可以做得更多……



----



實現:



如果servlet引擎不完全支援(JSP的)XML格式(我試過的許多引擎都

是如此),那麼我們可以總是使用XSLT預先處理進程來把JSP的XML格式

轉換成標準的<%= %>格式。



今天我們可以立即實現XSLT預先處理,就是在使用我們的web應用程式之

前,用Ant build system 構建(bulid)所有的JSP檔案。



然而這打斷了我們美妙的快速“編輯JSP然後reload”的開發環境。所

以如果我們能把XSLT‘預先處理’階段整合到我們的JSP編譯器裡,那將

是很cool的。



(這一段是以Tomcat/Jasper舉了個例子,譯略)



……我已經粗略的看過Jasper的原始碼,看上去給它加入某種預先處理

器的配置並不會太難。(當然如果JSP標準裡有使用web deployment

descriptor對JSP進行XSLT預先處理的入口(entry),那將更好 ;-) )



----



例子:



編譯時間標籤僅可以使用編譯時間變數,儘管它可以輸出JSP小指令碼

(scriptlet)運算式。例如,這裡是一個在JSP片斷中的普通的HTML

表單的例子。



<FORM action="something.jsp" method="get">

<P>

First name:

<INPUT type="text" name="firstname" />

<BR />

Last name:

<INPUT type="text" name="lastname" />

<BR />

email:

<INPUT type="text" name="email" />

</P>

<BR />

<INPUT type="submit" value="Send">

<INPUT type="reset">

</FORM>



使用XSLT預先處理,我們可以加入小指令碼運算式,以根據當前表單的狀

態在表單域中填入對應值,(於是變成):



<FORM action="something.jsp" method="get">

<P>

First name:

<INPUT

type="text" name="firstname"

value=´<%= getFormValue( pageContext, "firstname") %>´/>

<BR />

Last name:

<INPUT

type="text" name="lastname"

value=´<%= getFormValue( pageContext, "lastname") %>´/>

<BR />

email:

<INPUT

type="text" name="email"

value=´<%= getFormValue( pageContext, "email") %>´/>



</P>

<BR />

<INPUT type="submit" value="Send">

<INPUT type="reset">

</FORM>



函數getFormValue()可以用任何真實的Java代碼來擷取表單域值,可

以是自訂的表單包或者僅僅把servlet請求的參量拉出來。



這意味著從開發人員(developer)/設計者(designer)的視點來看,

JSP保持了‘clear’和類HTML的形式而沒有小指令碼??所有聰明的填

充發生在我們編譯JSP到Java代碼的時候。



請注意這也意味著我們不需要為每個類型(type)的Input標籤寫JSP

自訂標籤,不需要讓每個我們希望使用的可能屬性值有對應的Java

Bean屬性。在運行時,並沒有標籤被建立,頁面上僅僅有一點動態ja

va代碼將調用getFormValue()。所以,頁面將真的高效。



注意我不是在此鼓吹替代JSP自訂標籤,僅僅是鼓吹結合使用XSLT預

處理和JSP自訂標籤,這種構建web應用的真正優雅的方式……



Comments?

<James/>

James Strachan



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.