1. 程式人生 > >JSP學習(1)

JSP學習(1)

單純的JSP程式設計

在單純的JSP程式設計模式下,通過應用JSP中的指令碼標誌,可直接在JSP頁面中實現各種功能。雖然這種模式很容易實現,但是其缺點也非常明顯。因為將大部分的Java程式碼與HTML程式碼混淆在一起,會給程式的維護和除錯帶來很多的困難,而且對於整個程式的結構更是無從談起。這就好比規劃管理一個大的企業,如果將負責不同任務的所有員工都安排在一起工作,勢必會造成公司秩序混亂、不易管理等許多的隱患。所以說,單純的JSP頁面程式設計模式是無法應用到大型、中型甚至小型的JSP Web應用程式開發中。

JSP+JavaBean程式設計

該模式是JSP程式開發經典設計模式之一,適合小型或中型網站的開發。利用JavaBean技術,可以很容易地完成一些業務邏輯上的操作,例如資料庫的連線、使用者登入與登出等。JavaBean是一個遵循了一定規則的Java類,在程式的開發中,將要進行的業務邏輯封裝到這個類中,在JSP頁面中通過動作標籤來呼叫這個類,從而執行這個業務邏輯。此時的JSP除了負責部分流程的控制外,大部分用來顯示頁面,而JavaBean則負責業務邏輯的處理。可以看出,該模式具有一個比較清晰的程式結構,在JSP技術的起步階段,JSP+JavaBean設計模式曾被廣泛應用。下面將通過一個流程圖說明該模式對客戶端的請求進行處理的過程。

在這裡插入圖片描述

SP+Servlet+JavaBean程式設計

JSP+JavaBean設計模式雖然已經將網站的業務邏輯和顯示頁面進行分離,但這種模式下的JSP不但要進行程式中大部分的流程控制,而且還要負責頁面的顯示,所以仍然不是一種理想的設計模式。
在JSP+JavaBean設計模式的基礎上加入Servlet來實現程式中的控制層,是一個很好的選擇。在這種模式中,由Servlet來執行業務邏輯並負責程式的流程控制,JavaBean元件實現業務邏輯,充當著模型的角色,JSP用於頁面的顯示。可以看出這種模式使得程式中的層次關係更明顯,各元件的分工也非常明確。下面將通過一個流程圖說明該模式對客戶端的請求進行處理的過程。

在這裡插入圖片描述
但JSP+Servlet+JavaBean模式同樣也存在缺點。該模式遵循了MVC設計模式,MVC只是一個抽象的設計概念,它將待開發的應用程式分解為三個獨立的部分:模型(Model)、檢視(View)和控制器(Controller)。雖然用來實現MVC設計模式的技術可能都是相同的,但各公司都有自己的MVC架構。也就是說,這些公司用來實現自己的MVC架構所應用的技術可能都是JSP、Servlet與JavaBean,但他們的流程及設計卻是不同的,所以工程師需要花更多的時間去了解。從專案的開發觀點上來說,因為需要設計MVC各物件之間的資料交換格式與方法,所以會需要花費更多的時間在系統的設計上

使用JSP+Servlet+JavaBean模式進行專案開發時,可以選擇一個實現了MVC模式的現成的框架,在此下進行開發,大大節省了開發時間,會取得事半功倍的效果。目前已有很多可以使用的現成的MVC框架,例如Struts框架。
JSP+JavaBean程式設計與JSP+Servlet+JavaBean程式設計,是JSP開發中的兩種經典設計模式。

MVC模式

MVC(Model-View-Controller,模型—檢視—控制器)是一種程式設計概念,它同時適用於簡單的和複雜的程式。使用該模式可將待開發的應用程式分解為3個獨立的部分:模型、檢視和控制器。提出這種設計模式主要是因為應用程式中用來完成任務的程式碼——模型(也稱為“業務邏輯”)通常是程式中相對穩定的部分,並且會被重複使用,而程式與使用者進行互動的頁面——檢視,卻是經常改變的。如果因需要更新頁面而不得不對業務邏輯程式碼進行改動,或者要在不同的模組中應用到相同的功能而重複地編寫業務邏輯程式碼,不僅降低了整體程式開發的程序,而且會使程式變得難以維護。因此,將業務邏輯程式碼與外觀呈現分離,將會更容易地根據需求的改變來改程序序。

MVC模式中的Model(模型)指的是業務邏輯的程式碼,是應用程式中真正用來完成任務的部分。
View(檢視),實際上就是程式與使用者進行互動的介面,使用者可以看到它的存在。檢視可以具備一定的功能並應遵守對其的約束,在檢視中不應包含對資料處理的程式碼,即業務邏輯程式碼。
Controller(控制器),主要控制使用者請求並作出響應。它根據使用者的請求選擇模型或修改模型,並決定返回怎樣的檢視。

JSP的執行環境

使用JSP進行開發,需要具備以下對應的執行環境:Web瀏覽器、Web伺服器、JDK開發工具包以及資料庫。下面分別介紹這些環境。

1.Web瀏覽器
瀏覽器主要用於客戶端使用者訪問Web應用的工具,與開發JSP應用不存在很大的關係,所以開發JSP對瀏覽器的要求並不是很高,任何支援HTML的瀏覽器都可以。

2.Web伺服器
Web伺服器是執行及釋出Web應用的大容器,只有將開發的Web專案放置到該容器中,才能使網路中的所有使用者通過瀏覽器進行訪問。開發JSP應用所採用的伺服器主要是Servlet相容的Web伺服器,比較常用的有BEA WebLogic、IBM WebSphere和Apache Tomcat等。

  • Weblogic是BEA公司的產品,它又分為WebLogic Server、WebLogic Enterprise和WebLogic
    Portal系列,其中WebLogic
    Server的功能特別強大,它支援企業級的、多層次的和完全分散式的Web應用,並且伺服器的配置簡單、介面友好,對於那些正在尋求能夠提供Java平臺所擁有的一切的應用伺服器的使用者來說,WebLogic是一個十分理想的選擇。

  • Tomcat伺服器最為流行,它是Apache-Jarkarta開源專案中的一個子專案,是一個小型的、輕量級的、支援JSP和Servlet技術的Web伺服器,它已經成為學習開發JSP應用的首選。目前Tomcat的最新版本為apache-tomcat-8.0.23。

3.JDK
JDK(Java Develop Kit,Java開發工具包)包括執行Java程式所必須的JRE環境及開發過程中常用的庫檔案。在使用JSP開發網站之前,首先必須安裝JDK,目前JDK的最新版本為JDK 8 Update 45。

4.資料庫
任何專案的開發幾乎都需要使用資料庫,資料庫用來儲存專案中需要的資訊。根據專案的規模,應採用合適的資料庫。如大型專案可採用Oracle資料庫,中型專案可採用Micosoft SQL Server或MySQL資料庫,小型專案可採用Microsoft Access資料庫。Microsoft Access資料庫的功能遠比不上Microsoft SQL Server和MySQL強大,但它具有方便、靈活的特點,對於一些小型專案來說是比較理想的選擇。

1.3 JSP的處理過程

當客戶端瀏覽器向伺服器發出請求訪問一個JSP頁面時,伺服器根據該請求載入相應的JSP頁面,並對該頁面進行編譯,然後執行。
  JSP的具體處理過程如下圖所示。

在這裡插入圖片描述
從前面的介紹中,可以知道JSP檔案被JSP引擎進行轉換後,又被編譯成了Class檔案,最終由伺服器通過執行這個Class檔案來對客戶端的請求進行響應。
但並不是每次請求都需要重複進行這樣的處理。當伺服器第一次接收到對某個頁面的請求時,JSP引擎就開始進行上述的處理過程,將被請求的JSP檔案編譯成Class檔案。在後續對該頁面再次進行請求時,若頁面沒有進行任何改動,伺服器只需直接呼叫Class檔案執行即可。所以當某個JSP頁面第一次被請求時,會有一些延遲,而再次訪問時會感覺快了很多。如果被請求的頁面經過修改,伺服器將會重新編譯這個檔案,然後執行。

  1. CGI( Common Gateway Interface )即通用閘道器介面。是最早用來建立動態網頁的一種技術,它可以使瀏覽器與伺服器之間產生互動關係。它允許使用不同的語言來編寫適合的CGI程式,該程式被放在Web伺服器上執行。當客戶端發出請求給伺服器時,伺服器根據客戶請求建立一個新的程序來執行指定的CGI程式,並將執行結果以網頁的型別傳輸到客戶端的瀏覽器上進行顯示。CGI可以說是當前應用程式的基礎技術,但這種技術編制方式比較困難而且效率低下,因為每次頁面被請求的時候,都要求伺服器重新將CGI程式編譯成可執行的程式碼。在CGI中使用最為常見的語言為C/C++、Java和Perl(Practical Extraction and Report Language,檔案分析報告語言)。
  2. ASP(Active Server Page)是一種使用很廣泛的開發動態網站的技術。它通過在頁面程式碼中嵌入VBScript或JavaScript指令碼語言來生成動態的內容,在伺服器端必須安裝了適當的直譯器後,才可以通過呼叫此直譯器來執行指令碼程式,然後將執行結果與靜態內容部分結合並傳送到客戶端瀏覽器上。對於一些複雜的操作,ASP可以呼叫存在於後臺的COM元件來完成,所以說COM元件無限地擴充了ASP的能力;正因如此依賴本地的COM元件,使得ASP主要用於Windows平臺中。ASP存在很多優點,簡單易學,並且ASP是與微軟的IIS捆綁在一起,在安裝Windows 2000、Windows XP的同時安裝上IIS,就可以執行ASP應用程式了。
  3. PHP來自於Personal Home Page一詞,但現在的PHP已經不再表示名詞的縮寫,而是一種開發動態網頁技術的名稱。PHP語法類似於C,並且混合了Perl、C++和Java的一些特性。它是一種開源的Web伺服器指令碼語言,與ASP和JSP一樣可以在頁面中加入指令碼程式碼來生成動態內容。對於一些複雜的操作可以封裝到函式或類中,在PHP中提供了許多已經定義好的函式,例如提供的標準的資料庫介面,使得資料庫連線方便,擴充套件性強。PHP可以被多個平臺支援,主要被廣泛應用於UNIX/Linux平臺。由於PHP本身的程式碼對外開放,經過許多軟體工程師的檢測,因此到目前為止該技術具有公認的安全效能。
  4. ASP.NET也是一種建立動態Web應用程式的技術,它是.NET框架的一部分,可以使用任何.NET相容的語言,如Visual Basic.NET,C#,J#等來編寫ASP.NET應用程式。這種ASP.NET頁面(Web Forms)編譯後可以提供比指令碼語言更出色的效能表現。Web Forms允許在網頁基礎上建立強大的窗體。當建立頁面時,可以使用ASP.NET服務端控制元件來建立常用的UI元素,並對它們程式設計來完成一般的任務。這些控制元件允許開發者使用內建可重用的元件和自定義元件來快速建立Web Form,使程式碼簡單化

Servlet技術

Servlet是在JSP之前就存在的執行在服務端的一種Java技術,它是用Java語言編寫的伺服器端程式,Java語言能夠實現的功能,Servlet基本上都可以實現(除圖形介面外)。Servlet主要用於處理Http請求,並將處理的結果傳遞給瀏覽器生成動態Web頁面。Servlet具有可移植(可在多種系統平臺和伺服器平臺下執行)、功能強大、安全、可擴充套件和靈活等優點。

在JSP中用到的Servlet通常都繼承自javax.servlet.http.HttpServlet類,在該類中實現了用來處理Http請求的大部分功能。
JSP是在Servlet的基礎上開發的一種新的技術,所以JSP與Servlet有著密不可分的關係。JSP頁面在執行過程中會被轉換為Servlet,然後由伺服器執行該Servlet。

JavaBean技術

JavaBean是根據特殊的規範編寫的普通的Java類,可稱它們為“獨立的元件”。每一個JavaBean實現一個特定的功能,通過合理地組織具有不同功能的JavaBean,可以快速地生成一個全新的應用程式。如果將這個應用程式比作一輛汽車,那麼程式中的JavaBean就好比組成這輛汽車的不同零件。對於程式開發人員來說,JavaBean的最大優點就是充分提高了程式碼的可重用性,並且對程式的後期維護和擴充套件起到了積極的作用。

JavaBean可按功能劃分為視覺化和不視覺化兩種。視覺化JavaBean主要應用在圖形介面程式設計的領域中,在JSP中通常應用不視覺化JavaBean,應用這種JavaBean可用來封裝各種業務邏輯,例如連線資料庫、獲取當前時間等。這樣,當在開發程式的過程中需要連線資料庫或實現其他功能時,就可直接在JSP頁面或Servlet中呼叫實現該功能的JavaBean來實現。
通過應用JavaBean,可以很好地將業務邏輯和前臺顯示程式碼分離,這大大提高了程式碼的可讀性和易維護性。

JSP技術

Java Server Pages簡稱JSP,是由Sun公司倡導,與多個公司共同建立的一種技術標準,它建立在Servlet之上。應用JSP,程式設計師或非程式設計師可以高效率地建立Web應用程式,並使得開發的Web應用程式具有安全性高、跨平臺等優點。
JSP是執行在伺服器端的指令碼語言之一,與其他的伺服器端指令碼語言一樣,是用來開發動態網頁的一種技術。

JSP頁面由傳統的HTML程式碼和嵌入到其中的Java程式碼組成。當用戶請求一個JSP頁面時,伺服器會執行這些Java程式碼,然後將結果與頁面中的靜態部分相結合返回給客戶端瀏覽器。JSP頁面中還包含了各種特殊的JSP元素,通過這些元素可以訪問其他的動態內容並將它們嵌入到頁面中,例如訪問JavaBean元件的jsp:useBean動作元素。程式設計師還可以通過編寫自己的元素來實現特定的功能,開發出更為強大的Web應用程式。

JSP是以Java為基礎開發的,所以它不僅可以沿用Java強大的API功能,而且不管是在何種平臺下,只要伺服器支援JSP,就可以執行使用JSP開發的Web應用程式,體現了它的跨平臺、跨伺服器的特點。例如在Windows NT下的IIS通過JRUN或ServletExec外掛就能支援JSP。如今最流行的Web伺服器Apache同樣能夠支援JSP,而且Apache支援多種平臺,從而使得JSP可以在多個平臺上執行。

在資料庫操作中,因為JDBC同樣是獨立於平臺的,所以在JSP中使用Java API提供的JDBC來連線資料庫時,就不用擔心平臺變更時的程式碼移植問題。正是因為Java的這種特徵,使得應用JSP開發的Web應用程式能夠很簡單地運用到不同的平臺上。

分離靜態內容和動態內容

在前面提到的Java Servlet,對於開發Web應用程式而言是一種很好的技術。但同時面臨著一個問題:所有的內容必須在Java程式碼中來完成,包括HTML程式碼同樣要嵌入到程式程式碼中來生成靜態的內容。這使得即使因HTML程式碼出現的小問題,也需要有熟悉Java Servlet的程式設計師來解決。

JSP彌補了Java Servlet在工作中的不足。使用JSP,程式設計師可以使用HTML或XML標記來設計和格式化靜態內容,並通過JSP標記及JavaBean元件來製作動態內容。伺服器將執行JSP標記和小指令碼程式,並將結果與頁面中的靜態部分結合後以HTML頁面的形式傳送給客戶端瀏覽器。程式設計師可以將一些業務邏輯封裝到JavaBean元件中,Web頁面的設計人員可以利用程式設計師開發的JavaBean元件和JSP標記來製作出動態頁面,而且不會影響到內容的生成。
將靜態內容與動態內容的明確分離,是以Java Servlet開發Web應用發展為以JSP開發Web應用的重要因素之一。

可重複使用的元件

JavaBean元件是JSP中不可缺少的重要組成部分之一,程式通過JavaBean元件來執行所要求的更為複雜的運算。JavaBean元件不僅可以應用於JSP中,同樣適用於其他的Java應用程式中。這種特性使得開發人員之間可以共享JavaBean元件,加快了應用程式的總體開發程序。

同樣,JSP的標準標籤和自定義標籤與JavaBean元件一樣可以一次生成重複使用。這些標籤都是通過編寫的程式程式碼來實現特定功能的,在使用它們時與通常在頁面中用到的HTML標記用法相同。這樣可以將一個複雜而且需要出現多次的操作簡單化,大大提高了工作效率。

沿用了Java Servlet的所有功能

相對於Java Servlet來說,使用從Java Servlet發展而來的JSP技術開發Web應用更加簡單易學,並且JSP同樣提供了Java Servlet所有的特性。實際上伺服器在執行JSP檔案時先將其轉換為Servlet程式碼,然後再對其進行編譯,可以說JSP就是Servlet,建立一個JSP檔案其實就是建立一個Servlet檔案的簡化操作。理所當然,Servlet中的所有特性在JSP中同樣可以使用。

預編譯

預編譯是JSP的另一個重要的特性。JSP頁面在被伺服器執行前,都是已經被編譯好的,並且通常只進行一次編譯,即在JSP頁面被第一次請求時進行編譯,在後續的請求中如果JSP頁面沒有被修改過,伺服器只需要直接呼叫這些已經被編譯好的程式碼,這大大提高了訪問速度。