明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

JSP簡(jiǎn)明圖文說(shuō)明教程:JSP基礎(chǔ)

[摘要]JSP是建立在Java servlets模型之上的表達(dá)層技術(shù),它使編寫(xiě)HTML變得更簡(jiǎn)單。像SSJS一樣,它也允許你將靜態(tài)HTML內(nèi)容與服務(wù)器端腳本混合起來(lái)生成動(dòng)態(tài)輸出。JSP把Java作為默認(rèn)的腳本語(yǔ)言,然而,就像ASP可以使用其他語(yǔ)言(如JavaScript和VBScript)一樣,JSP規(guī)范...
JSP是建立在Java servlets模型之上的表達(dá)層技術(shù),它使編寫(xiě)HTML變得更簡(jiǎn)單。像SSJS一樣,它也允許你將靜態(tài)HTML內(nèi)容與服務(wù)器端腳本混合起來(lái)生成動(dòng)態(tài)輸出。JSP把Java作為默認(rèn)的腳本語(yǔ)言,然而,就像ASP可以使用其他語(yǔ)言(如JavaScript和VBScript)一樣,JSP規(guī)范也允許使用其他語(yǔ)言。盡管JSP和Java比那些基于簡(jiǎn)單語(yǔ)言的腳本平臺(tái)(如JavaScript和VBScript)具有更好的兼容性和堅(jiān)固性,但同時(shí)Java的學(xué)習(xí)難度也比簡(jiǎn)單的腳本語(yǔ)言要大。



  為了兼顧兩者的優(yōu)點(diǎn)――一個(gè)健壯的web應(yīng)用平臺(tái)和一種簡(jiǎn)單易用的語(yǔ)言工具――JSP提供了大量的服務(wù)器端標(biāo)簽(Tag),這使得開(kāi)發(fā)者可以在不寫(xiě)Java代碼的情況下完成大多數(shù)動(dòng)態(tài)內(nèi)容操作。那些只熟悉編寫(xiě)腳本的開(kāi)發(fā)人員,甚至僅僅是HTML設(shè)計(jì)者,就可以使用JSP標(biāo)簽生成簡(jiǎn)單的輸出而不必學(xué)習(xí)Java。高級(jí)的腳本編寫(xiě)者或Java程序員也可以使用這些標(biāo)簽,如果要在JSP頁(yè)面中完成更高級(jí)的操作,他們可以使用完整的Java語(yǔ)言。



Page過(guò)時(shí)了,Component妙極了

  要理解JSP怎樣聯(lián)合無(wú)限的力量來(lái)輕而易舉地實(shí)現(xiàn)魔術(shù)般的效果,你必須首先了解“組件為中心的網(wǎng)頁(yè)開(kāi)發(fā)”和“頁(yè)面為中心的網(wǎng)頁(yè)開(kāi)發(fā)”的區(qū)別。



  SSJS和ASP都是在幾年前推出的,那時(shí)網(wǎng)絡(luò)還很年輕,沒(méi)有人知道除了把所有的商務(wù)、數(shù)據(jù)和表達(dá)邏輯統(tǒng)統(tǒng)堆進(jìn)原始網(wǎng)頁(yè)中之外還有什么更好的解決方法。這種以頁(yè)面為中心的模型容易學(xué)習(xí)并且得到相當(dāng)快速的發(fā)展。然而,隨著時(shí)間的推移,人們認(rèn)識(shí)到這種方法不適于構(gòu)建大型的、可升級(jí)的web應(yīng)用程序。在腳本環(huán)境中書(shū)寫(xiě)的表達(dá)邏輯被鎖在頁(yè)面內(nèi),只有通過(guò)剪切和粘貼才能被重用。表達(dá)邏輯通常和商務(wù)及數(shù)據(jù)邏輯混在一起,這使得當(dāng)程序員試圖改變一個(gè)應(yīng)用程序的外觀而不想破壞與之緊密結(jié)合的商務(wù)邏輯時(shí),應(yīng)用程序的維護(hù)就像在蛋殼上走路一樣困難。其實(shí)在企業(yè)中,可重用組件的應(yīng)用早已經(jīng)很成熟,沒(méi)有人愿意為他們的應(yīng)用程序重寫(xiě)那些邏輯。HTML和圖形設(shè)計(jì)師把他們的設(shè)計(jì)的實(shí)施工作交給了web編寫(xiě)者,使他們不得不加倍工作――常常是手工編寫(xiě),因?yàn)闆](méi)有合適的工具可以把服務(wù)器端腳本與HTML內(nèi)容結(jié)合起來(lái)。簡(jiǎn)而言之,隨著web應(yīng)用程序的復(fù)雜性不斷提升,以頁(yè)面為中心的開(kāi)發(fā)方式的局限性變得明顯起來(lái)。



  與此同時(shí),人們一直在尋找建立web應(yīng)用程序的更好方法,組件在客戶(hù)機(jī)-服務(wù)器領(lǐng)域風(fēng)行起來(lái)。JavaBeans和ActiveX被“快速應(yīng)用程序開(kāi)發(fā)”(RAD)工具發(fā)行商推廣給Java和Windows應(yīng)用程序開(kāi)發(fā)者用來(lái)快速開(kāi)發(fā)復(fù)雜的程序。這些技術(shù)使某領(lǐng)域內(nèi)的專(zhuān)家可以為本領(lǐng)域內(nèi)的垂直應(yīng)用編寫(xiě)組件,而開(kāi)發(fā)者可以直接拿來(lái)使用而不必掌握這一領(lǐng)域的專(zhuān)門(mén)技術(shù)。比如,編制旅鼠交配習(xí)性圖表的Java程序員不需要了解任何關(guān)于旅鼠的知識(shí),他只要調(diào)用 LemmingsInLove JavaBeans(JavaBeans是一種基于Java的組件)就可得到相應(yīng)的領(lǐng)域?qū)iT(mén)信息,他只需關(guān)注如何使軟件更易于使用。出現(xiàn)一種把組件為中心的程序設(shè)計(jì)方法帶到服務(wù)器端web應(yīng)用領(lǐng)域的技術(shù)只是時(shí)間的問(wèn)題。



  作為一種以組件為中心的開(kāi)發(fā)平臺(tái),JSP出現(xiàn)了。它以JavaBeans和Enterprise JavaBeans(EJB)組件包含商務(wù)和數(shù)據(jù)邏輯的模型為基礎(chǔ),提供大量標(biāo)簽和一個(gè)腳本平臺(tái)用來(lái)在HTML頁(yè)中顯示由JavaBeans產(chǎn)生或回送的內(nèi)容。由于JSP的以組件為中心的性質(zhì),他可以被Java和非Java開(kāi)發(fā)者同樣使用。非Java開(kāi)發(fā)者可以通過(guò)JSP的標(biāo)簽(Tags)來(lái)使用高級(jí)Java開(kāi)發(fā)者創(chuàng)建的JavaBeans。Java開(kāi)發(fā)者不僅可以創(chuàng)建和使用JavaBeans,還能在JSP頁(yè)中使用Java語(yǔ)言來(lái)更精密地控制基于底層JavaBeans的表達(dá)邏輯。



JSP請(qǐng)求模型

  現(xiàn)在我們來(lái)看看JSP是如何處理HTTP請(qǐng)求的。在基本請(qǐng)求模型中,一個(gè)請(qǐng)求直接被送到JSP頁(yè)中。圖1說(shuō)明了這個(gè)模型中的信息流程。JSP代碼控制著進(jìn)行邏輯處理時(shí)與JavaBeans組件的交互,并在動(dòng)態(tài)生成的、混合了靜態(tài)HTML代碼的HTML頁(yè)中顯示結(jié)果。



  圖1.基本JSP請(qǐng)求模型





  Beans 可以是JavaBeans 或EJB組件。另外,更加復(fù)雜的請(qǐng)求模型可看作從被請(qǐng)求頁(yè)呼叫其他JSP頁(yè)或Java servlets。



JSP引擎技術(shù)內(nèi)幕

  JSP引擎實(shí)際上要把JSP標(biāo)簽、JSP頁(yè)中的Java代碼甚至連同靜態(tài)HTML內(nèi)容都轉(zhuǎn)換為大塊的Java代碼。這些代碼塊被JSP引擎組織到用戶(hù)看不到的Java servlet中去,然后servlet自動(dòng)把它們編譯成Java字節(jié)碼。這樣,當(dāng)網(wǎng)站的訪問(wèn)者請(qǐng)求一個(gè)JSP頁(yè)時(shí),在他不知道的情況下,一個(gè)已經(jīng)生成的、預(yù)編譯過(guò)的servlet實(shí)際上將完成所有的工作。非常隱蔽-而又高效。因?yàn)閟ervlet是編譯過(guò)的,所以網(wǎng)頁(yè)中的JSP代碼不需要在每次請(qǐng)求該頁(yè)時(shí)被解釋一遍。JSP引擎只需在servlet代碼最后被修改后編譯一次,然后這個(gè)編譯過(guò)的servlet就可以被執(zhí)行了。由于是JSP引擎自動(dòng)生成并編譯servlet,不用程序員動(dòng)手編譯代碼,所以JSP能帶給你高效的性能和快速開(kāi)發(fā)所需的靈活性。



  如果你從Sun的網(wǎng)站下載JSP reference implementation并用它編寫(xiě)應(yīng)用程序,你將能夠看到JSP引擎生成的.java和.class文件。如果你想更多地了解所生成的代碼,可以用文本編輯器打開(kāi).java文件查看Java servlet的代碼。