- JSP應用與開發技術(第3版)
- 馬建紅 李學相 韓穎 王瑞娟 張晗
- 2706字
- 2020-06-30 17:13:18
1.5 JSP與相關技術
JSP是由Sun Microsystems公司倡導的、許多公司參與建立的一種動態網頁技術標準。JSP技術用Java語言作為腳本語言,JSP網頁為整個服務器端的Java庫單元提供了一個接口來服務于HTTP的應用程序。
在傳統的網頁HTML文件(*.htm,*.html)中加入Java程序片段(Scriptlet)和JSP標記(Tag),就構成了JSP網頁(*.jsp)。Web服務器在遇到訪問JSP網頁的請求時,首先執行其中的程序片段,然后將執行結果以HTML格式返回給客戶。程序片段可以操作數據庫、重新定向網頁及發送E-mail等,這就是建立動態網站所需要的功能。所有程序操作都在服務器端執行,網絡上傳送給客戶端的僅是得到的結果,對客戶瀏覽器的要求最低,可以實現無Plugin、無ActiveX、無Java Applet,甚至無Frame。
1.5.1 什么是JSP
JSP是基于Java的技術,用于創建可支持跨平臺及Web服務器的動態網頁。從構成情況來看,JSP頁面代碼一般由普通的HTML語句和特殊的基于Java語言的嵌入標記組成,所以它具有Web和Java功能的雙重特性。
JSP 1.0規范是1999年9月推出的,當年12月又推出了1.1規范。此后JSP又經歷了幾個版本,本書介紹的技術基于JSP 2.0規范。
為了讓讀者對JSP技術有一個直觀的認識,先來看一個非常簡單的JSP頁面及其運行效果。以下是HelloWorld.jsp的源代碼。程序運行效果如圖1-8所示。

圖1-8 HelloWorld.jsp運行效果

JSP是一種動態網頁技術標準,可以將網頁中的動態部分和靜態的HTML相分離。用戶可以使用平常得心應手的工具并按照平常的方式來書寫HTML語句。然后,將動態部分用特殊的標記嵌入即可,這些標記常常以“<%”開始并以“%>”結束。
同HTML及ASP等語言相比,JSP雖然在表現形式上同它們的差別并不大,但是它提供了一種更為簡便、有效的動態網頁編寫手段。而且,由于JSP程序同Java語言有著天然的聯系,所以在眾多基于Web的架構中,都可以看到JSP程序。
由于JSP程序增強了Web頁面程序的獨立性、兼容性和可重用性,所以,與傳統的ASP、PHP網絡編程語言相比,它具有以下特點:
JSP的執行效率比較高。由于每個基于JSP的頁面都被Java虛擬機事先解析成一個Servlet,服務器通過網絡接收到來自客戶端HTTP的請求后,Java虛擬機解析產生的Servlet將開啟一個“線程”(Thread)來提供服務,并在服務處理結束后自動銷毀這個線程,如圖1-9所示,這樣的處理方式將大大提高系統的利用率,并能有效地降低系統的負載。

圖1-9 Web服務器使用Servlet提供服務的示意圖
編寫簡單。由于JSP是一項基于Java語言和HTML元素的技術,所以只要熟悉Java和HTML的程序員都可以開發JSP。
跨平臺。由于JSP運行在Java虛擬機之上,所以它可以借助于Java本身的跨平臺能力,在任何支持Java的平臺和操作系統上運行。
JSP可以嵌套在HTML或XML網頁中。這樣不僅可以降低程序員開發頁面顯示邏輯效果的工作量,更能提供一種比較輕便的方式來同其他Web程序交互。
1.5.2 JSP技術原理
JSP文件的執行方式是“編譯式”,并非“解釋式”,即在執行JSP頁面時,是把JSP文件先翻譯為Servlet形式的Java類型的字節碼文件,然后通過Java虛擬機來運行。所以從本質上來講,運行JSP文件最終還是要通過Java虛擬機,不過根據JSP技術的相關規范,JSP語言必須在某個構建于Java虛擬機之上的特殊環境中運行,這個特殊環境就是Servlet Container(通常被譯為Servlet容器),而且,每個JSP頁面在被系統調用之前,必須先被Servlet容器解析成一個Servlet文件。
圖1-10顯示了整個JSP的運行流程。每次Servlet容器接收到一個JSP請求時,都會遵循以下步驟。

圖1-10 JSP運行流程
(1)Web容器接收JSP頁面的訪問請求時,它將把該訪問請求交給JSP引擎去處理。每個JSP頁面在第一次被訪問時,JSP引擎先將它翻譯成一個Servlet源程序,接著再把這個Servlet源程序編譯成Servlet的class類文件,Servlet容器查詢所需要加載的JSP文件是否已經被解析成Servlet文件,如果沒有在Servlet容器里找到對應的Servlet文件,容器將根據JSP文件新創建一個Servlet文件。反之,如果在容器里有此Servlet文件,容器則比較兩者的時間,如果JSP文件的時間要晚于Servlet文件,則說明此JSP文件已被重新修改過,需要容器重新生成Servlet文件,反之容器將使用原先的Servlet文件。
(2)Web容器編譯好的Servlet文件被加載到Servlet容器中,執行定義在該JSP文件里的各項操作。
(3)Servlet容器生成響應結果,并返回給客戶端。
(4)JSP文件結束運行。
從JSP的工作原理和運作流程上來看,JSP程序既能以Java語言的方式處理Web程序里的業務邏輯,又可以處理基于HTML協議的請求,它是集眾多功能于一身的。
不過,在編寫程序的過程中,不能過多地在JSP代碼里混雜提供顯示功能和提供業務邏輯的代碼,而是要把JSP程序定位到“管理顯示邏輯”的角色上。
當服務器第一次接收到對某個頁面的請求時,JSP引擎就開始進行上述的處理,將被請求的JSP文件編譯成Class文件。在后續對該頁面再次進行請求時,若頁面沒有進行任何改動,服務器只需直接調用Class文件執行即可。所以當某個JSP頁面第一次被請求時,會有一些延遲,而再次訪問時會感覺快了很多。如果被請求的頁面經過修改,服務器將會重新編譯這個文件,然后執行。
1.5.3 JSP本質與Servlet
嚴格來說,JSP是一種集成技術,以Java平臺為基礎,提供一種簡便的方式,讓Java技術能夠輕易運用于構建動態網頁內容。
Java為了產生與用戶互動的動態網頁內容,開發出一種名為Servlet的應用技術。Servlet是一種純粹以Java語言編寫,符合標準規范的Java應用程序,在網站服務器運行的時候被加載,在客戶端瀏覽器針對服務器提出內容要求時,作出動態響應。
盡管Servlet應用程序產生動態網頁的功能相當強大,但是卻不容易開發。JSP就是為了克服這個障礙而發展出來的一種服務器端網頁技術,其本身是一個內容混雜HTML標簽與Java語言的純文本文件。當瀏覽器請求JSP網頁時,文本文件在網站服務器被編譯成為Servlet加載,然后產生動態的網頁內容,如圖1-11所示。

圖1-11 Servlet執行過程
由于JSP本身被設計得非常容易學習與使用,因此Java動態網頁技術得以快速發展并且被廣泛應用,程序開發人員只需學習基礎Java語法及相關的JSP對象,便可以輕松完成動態網頁的創建與設計。
1.5.4 JSP與JavaBean
讓JSP如此出色的原因,除了Servlet之外,另外一點便是其運用JavaBean的能力。JavaBean是一種組件技術,為Java應用程序提供一種極具靈活性的設計模型,它將程序依功能分開,包裝成為一種稱為JavaBean的程序組件,讓其可以被外部JSP網頁重復使用以提供所需的功能,同時還可以擴充JSP網頁的功能,維持簡潔易于維護的JSP網頁程序代碼。
使用JSP設計動態網頁并不困難,然而當網站的復雜度開始增加時,用戶在必須面對如何有效管理與切割程序內容等,以及在提供強大功能的同時,保有網頁程序設計的靈活性與容易維護的程序代碼等。
如圖1-12所示,JavaBean用來包裝網頁程序邏輯及其相關功能,并且通過網頁作引用,而網頁本身則負責數據收集和內容展示。

圖1-12 JavaBean流程
JavaBean本身是一種包含特定功能的Java程序組件,當一個JSP網頁需要此項功能時,直接引用相關的JavaBean組件即可;而JavaBean最重要的概念在于將程序邏輯與創建網頁界面的程序代碼分開,網頁只負責數據的收集及頁面元素放置的處理,而JavaBean組件則是包含重要的程序邏輯運算。如此一來,JSP網頁將更容易維護與建構,JavaBean同時也是建構商業級JSP網頁程序最為重要的核心。
- HTML5+CSS3+JavaScript從入門到精通:上冊(微課精編版·第2版)
- Kali Linux Web Penetration Testing Cookbook
- LabVIEW 2018 虛擬儀器程序設計
- JavaScript+DHTML語法與范例詳解詞典
- 編程卓越之道(卷3):軟件工程化
- MySQL 8 DBA基礎教程
- 物聯網系統開發:從0到1構建IoT平臺(第2版)
- Servlet/JSP深入詳解
- Processing互動編程藝術
- 快速念咒:MySQL入門指南與進階實戰
- .NET Standard 2.0 Cookbook
- R語言:邁向大數據之路(加強版)
- Getting Started with Electronic Projects
- 大話代碼架構:項目實戰版
- HTML并不簡單:Web前端開發精進秘籍