JSP簡明教程:組件為中心的開發(fā)平臺
JSP是建立在Java servlets模型之上的表達層技術(shù),它使編寫HTML變得更簡單。像SSJS一樣,它也允許你將靜態(tài)HTML內(nèi)容與服務(wù)器端腳本混合起來生成動態(tài)輸出。JSP把Java作為默認的腳本語言,然而,就像ASP可以使用其他語言(如JavaScript和VBScript)一樣,JSP規(guī)范也允許使用其他語言。盡管JSP和Java比那些基于簡單語言的腳本平臺(如JavaScript和VBScript)具有更好的兼容性和堅固性,但同時Java的學(xué)習(xí)難度也比簡單的腳本語言要大。
為了兼顧兩者的優(yōu)點――一個健壯的web應(yīng)用平臺和一種簡單易用的語言工具――JSP提供了大量的服務(wù)器端標簽(Tag),這使得開發(fā)者可以在不寫Java代碼的情況下完成大多數(shù)動態(tài)內(nèi)容操作。那些只熟悉編寫腳本的開發(fā)人員,甚至僅僅是HTML設(shè)計者,就可以使用JSP標簽生成簡單的輸出而不必學(xué)習(xí)Java。高級的腳本編寫者或Java程序員也可以使用這些標簽,如果要在JSP頁面中完成更高級的操作,他們可以使用完整的Java語言。在這個JSP簡明教程中你將了解到JSP產(chǎn)生的由來以及優(yōu)勢。
Page過時了,Component妙極了
要理解JSP怎樣聯(lián)合無限的力量來輕而易舉地實現(xiàn)魔術(shù)般的效果,你必須首先了解“組件為中心的網(wǎng)頁開發(fā)”和“頁面為中心的網(wǎng)頁開發(fā)”的區(qū)別。
SSJS和ASP都是在幾年前推出的,那時網(wǎng)絡(luò)還很年輕,沒有人知道除了把所有的商務(wù)、數(shù)據(jù)和表達邏輯統(tǒng)統(tǒng)堆進原始網(wǎng)頁中之外還有什么更好的解決方法。這種以頁面為中心的模型容易學(xué)習(xí)并且得到相當(dāng)快速的發(fā)展。然而,隨著時間的推移,人們認識到這種方法不適于構(gòu)建大型的、可升級的web應(yīng)用程序。在腳本環(huán)境中書寫的表達邏輯被鎖在頁面內(nèi),只有通過剪切和粘貼才能被重用。表達邏輯通常和商務(wù)及數(shù)據(jù)邏輯混在一起,這使得當(dāng)程序員試圖改變一個應(yīng)用程序的外觀而不想破壞與之緊密結(jié)合的商務(wù)邏輯時,應(yīng)用程序的維護就像在蛋殼上走路一樣困難。其實在企業(yè)中,可重用組件的應(yīng)用早已經(jīng)很成熟,沒有人愿意為他們的應(yīng)用程序重寫那些邏輯。HTML和圖形設(shè)計師把他們的設(shè)計的實施工作交給了web編寫者,使他們不得不加倍工作――常常是手工編寫,因為沒有合適的工具可以把服務(wù)器端腳本與HTML內(nèi)容結(jié)合起來。簡而言之,隨著web應(yīng)用程序的復(fù)雜性不斷提升,以頁面為中心的開發(fā)方式的局限性變得明顯起來。
與此同時,人們一直在尋找建立web應(yīng)用程序的更好方法,組件在客戶機-服務(wù)器領(lǐng)域風(fēng)行起來。JavaBeans和ActiveX被“快速應(yīng)用程序開發(fā)”(RAD)工具發(fā)行商推廣給Java和Windows應(yīng)用程序開發(fā)者用來快速開發(fā)復(fù)雜的程序。這些技術(shù)使某領(lǐng)域內(nèi)的專家可以為本領(lǐng)域內(nèi)的垂直應(yīng)用編寫組件,而開發(fā)者可以直接拿來使用而不必掌握這一領(lǐng)域的專門技術(shù)。比如,編制旅鼠交配習(xí)性圖表的Java程序員不需要了解任何關(guān)于旅鼠的知識,他只要調(diào)用 LemmingsInLove JavaBeans(JavaBeans是一種基于Java的組件)就可得到相應(yīng)的領(lǐng)域?qū)iT信息,他只需關(guān)注如何使軟件更易于使用。出現(xiàn)一種把組件為中心的程序設(shè)計方法帶到服務(wù)器端web應(yīng)用領(lǐng)域的技術(shù)只是時間的問題。
作為一種以組件為中心的開發(fā)平臺,JSP出現(xiàn)了。它以JavaBeans和Enterprise JavaBeans(EJB)組件包含商務(wù)和數(shù)據(jù)邏輯的模型為基礎(chǔ),提供大量標簽和一個腳本平臺用來在HTML頁中顯示由JavaBeans產(chǎn)生或回送的內(nèi)容。由于JSP的以組件為中心的性質(zhì),他可以被Java和非Java開發(fā)者同樣使用。非Java開發(fā)者可以通過JSP的標簽(Tags)來使用高級Java開發(fā)者創(chuàng)建的JavaBeans。Java開發(fā)者不僅可以創(chuàng)建和使用JavaBeans,還能在JSP頁中使用Java語言來更精密地控制基于底層JavaBeans的表達邏輯。
JSP請求模型
現(xiàn)在我們來看看JSP是如何處理HTTP請求的。在基本請求模型中,一個請求直接被送到JSP頁中。JSP代碼控制著進行邏輯處理時與JavaBeans組件的交互,并在動態(tài)生成的、混合了靜態(tài)HTML代碼的HTML頁中顯示結(jié)果。
Beans 可以是JavaBeans 或EJB組件。另外,更加復(fù)雜的請求模型可看作從被請求頁呼叫其他JSP頁或Java servlets。
JSP引擎技術(shù)內(nèi)幕
JSP引擎實際上要把JSP標簽、JSP頁中的Java代碼甚至連同靜態(tài)HTML內(nèi)容都轉(zhuǎn)換為大塊的Java代碼。這些代碼塊被JSP引擎組織到用戶看不到的Java servlet中去,然后servlet自動把它們編譯成Java字節(jié)碼。這樣,當(dāng)網(wǎng)站的訪問者請求一個JSP頁時,在他不知道的情況下,一個已經(jīng)生成的、預(yù)編譯過的servlet實際上將完成所有的工作。非常隱蔽-而又高效。因為servlet是編譯過的,所以網(wǎng)頁中的JSP代碼不需要在每次請求該頁時被解釋一遍。JSP引擎只需在servlet代碼***被修改后編譯一次,然后這個編譯過的servlet就可以被執(zhí)行了。由于是JSP引擎自動生成并編譯servlet,不用程序員動手編譯代碼,所以JSP能帶給你高效的性能和快速開發(fā)所需的靈活性。
如果你從Sun的網(wǎng)站下載JSP reference implementation并用它編寫應(yīng)用程序,你將能夠看到JSP引擎生成的.java和.class文件。如果你想更多地了解所生成的代碼,可以用文本編輯器打開.java文件查看Java servlet的代碼。
閱讀完了這篇JSP簡明教程,你對于JSP大概有了一些新的認識了吧。
【編輯推薦】