JSP 內幕大剖析:JavaServer Pages 簡介

"第一部份:JSP 專案開發所需技術概觀
目前而言,最熱門的網站技術之一,要算是JavaServer Pages(JSP)了。JSP 是以 Java 程式語言為基礎的網站伺服器描述語言程式,可用來建構網站。很多人都想在這個重要的程式語言發展平台上成為專家。這篇專欄的目的,就是要在你的 JSP 自訓過程中,助你一臂之力。我們的目的並不是在教你 JSP,而是在於提供給你如何成功的學習 JSP 的概念,以及告訴你,一個專業的 JSP 開發人員所需的技巧。
學習 JSP 可以是簡單,但同時也可以是複雜的事情。原因在於,JSP 並不是傳統的程式語言。學習 JSP 的基本概念可以在短短的一個禮拜的訓練之內完成。然而,要成為一個成功的 JSP 程式工程師,你還得要學習很多其他的技術。了解這些各式各樣的技術,以及這些技術之間如何互相結合,是學習 JSP 困難的地方。

如果你剛開始接觸 JSP,你很容易被那個長長的技術名單給嚇到。不過,請記住,那些必要的技術都很容易學。難就難在要在同一時間內把它們都學起來。因此,不要被 JSP 嚇到,相反的,你應該運用以下兩個訣竅:

按部就班依序學習,不要一次就想把所有的東西都學起來。許多人犯下的錯誤便是急著要一次把所有的東西都學起來。下面我們會列出學習 JSP 的過程中所會涵蓋到的技術課題。然後,在這個文章系列的第二部分裡面,我們會提供給你一個學習 JSP 的邏輯順序。
將幾個程式設計師組成一個 JSP 專案小組,每個人一次只負責學習幾套技術。如此一來,整個專案小組就能以合理的速度學習 JSP。然後,過些時候,每個人輪流學習新的一套技術。這樣一方面可以讓專案有合理的進度,另一方面又可以讓每個人都學到應有的技術。

JSP 相關技術
一個 JSP 專案所需的技術包括以下所列:

Java
使 用 JSP 時,一個程式設計師免不了要接觸 Java 程式語言。JSP 本身是以一套 Java 物件所寫成的。更重要的是,JSP 的內建描述語言就是 Java。總得來說,一個 JSP 程式設計師一定要懂得 Java 的基本技巧。我建議一個程式設計師在接觸 JSP 之前,至少必須有一個月紮實的 Java 經驗。


HTML / XHTML
不管你如何看待 JSP,你的資料輸出中,至少有百分之九十五會是HTML 檔案。因此,要想成為一個 JSP 程式設計師,你必須要對 HTML 完全了解。我建議在你考慮學習 JSP 以前,必須要先有至少一個月 HTML / XHTML 的經驗。


了解網頁伺服器
因為 JSP 是用來建構網站的,因此就某一個時點來說,對於你的網站所用的伺服器,你也必須略知一二。一個網頁伺服器是用來處理 HTML 網頁的, 通常它必須與其他軟體合作,共同處理 JSP 檔案。談到這裡,我們不得不談到下一個與 JSP 有關的難題。


了解實際運作處理 JSP 的 Container
Container 通常也被稱為 JSP 伺服器。這是用來將某個 JSP 的回詢(request)做解析處理,然後將其結果回傳給那個發出 JSP 回詢的網路用戶的一個軟體。這個 Container 很像一個網頁伺服器,只不過它並不是用來處理 HTML 網頁,而是用來處理 JSP 檔案。學習這個 JSP Container 的相關細節所需的時間,端賴於你到最後選的是哪一套 Container。有些軟體很簡單而易學。另外一些雖然提供的功能強大, 但是卻必須要有人專責來花時間學習並維護該套軟體。欲知詳情,請參考有關 JSP 工具程式的 FAQ 網頁。


JavaScript
JSP 將所產生的資料傳送給客戶(client),通常就是一個網頁瀏覽器,也就是所謂的「客戶端」。目前大部分的 JSP 輸出結果都是以 HTML 為基調的。JavaScript 是 HTML 使用的描述語言的首選工具。JavaScript 允許程式設計師在客戶端撰寫條件式敘述的邏輯。這表示客戶端減少了與伺服端來回交談的次數, 如此一來提昇了客戶端的效能。另外,JavaScript 也允許程式設計師修改 HTML 頁面顯示的方式,加強了 HTML 的能力。JavaScript 不是 Java。在大多數實用的狀況下,它只在用來觀看 HTML 頁面的瀏覽器上執行。

對於 JavaScript,我們有一點必須澄清,市面上有很多不同版本的 JavaScript,每個版本的名字也不一樣(例如,Microsoft 的 JScript)。雖然 JavaScript 被當作這種描述程式語言的通用名稱,不過新的 JavaScript 標準目前在歐洲是以 ECMAScript 的名字來維護的。因此當有人將 JavaScript 稱為 JScript 或 ECMAScript 的時候,你也不用感到困惑。

學習 JSP
JSP 不是真正的程式語言,而是:

— 一套由 Java 寫成的物件。
— 一個簡單的描述程式語法,用來處理物件與 JSP 集裝軟體之間的溝通過程。

學習 JSP 包括熟悉簡單的描述語言語法以及構成 JSP 標準的 Java 物件。在當一個程式設計師了解 Java 以後,學起 JSP 來就很簡單了。


用 JSP 的邏輯方式思考
JSP 是一個離散式,以網頁為基礎的應用程式(Distributed web-based application)。這表示它的邏輯處理過程是分散在不同的主機上面。大部分的處理過程是發生在 JSP 應用程式所在的主機上。 額外的邏輯處理時間則是花在觀看網頁的客戶端處理 HTML 檔案的上面。很多專案也將處理資料的資料庫伺服器整合進來。較大的專案可能會有一個元件伺服器, 集中處理 Enterprise JavaBean 物件。如果一個網頁應用程式夠大,它的 JSP 中央處理中心很可能散佈在不同的 JSP 伺服器上面。 這在在表示,你必須了解如何將一個 JSP 應用程式的邏輯處理散置在不同的機器上。更重要的是,你必須了解一個結合客戶端以及伺服端邏輯的網站應用程式的雙面性質。 以 JSP 的邏輯方式思考,事實上是一種藝術。

學習 JSP 語法以及物件是基本的第一步。但是要完成你對 JSP 的了解,你還必須再跨出更大的一步來。這包括學習:

— 這不同的元件之間是如何交談而互相合作的,還有
— 這個過程是何時開始,從何處開始的

如何讓一個分散式的應用程式取得平衡是最難學習的一項技術。這就需要有一位具備經驗的良師來加速你的學習過程。否則的話,這個技術的養成需要經過一段長時間的嘗試錯誤的過程。


還有更多的技術
其他開發 JSP 專案所需的技術包括了:

DHTML 以及 串接樣式表

任 何一個我現在架構的網站應用軟體都會用到某些 DHTML(動態 HTML),而我通常用的工具就是串接樣式表(Cascading Style Sheets)。這些工具程式大大的擴展了 HTML 網頁的可能性。它們允許使用者架構網站應用軟體,而所架構的軟體可以模仿客戶端與伺服端的應用程式。我個人覺得運用這些工具程式的技巧已經成為必要的了, 然而,很多簡單的專案還是不會用到這些工具程式。


Servlets

你或許不用學這麼多有關 servlet 的東西。事實上,JSP 就是簡化了的 Servlet。當初 Sun 開發 JSP 時,它的目標就是在於提供 Servlet 大部分強大的功能,並且同時提供一個簡單的寫程式的環境平台。而將 JSP 簡單化的代價,就是失去了些微 Servlet 所能提供的強大功能。 有些時候,你還是會需要寫 Servlet 來做一些比較特別的事情。


J2EE(大型專案使用)

比較大型的 JSP 專案需要功能比較強大的伺服器,以及高度的資源再利用性。這就是當專案需要跨入 Java 2 Enterprise Edition 伺服器解決方案的領域的時候了。一個 J2EE 伺服器可以提供很多 JSP 專案所需要的功能,包括大量資料傳輸所需的功能。J2EE 同時也內定使用 Enterprise JavaBeans,這可以讓我們更能重複使用程式碼。最後,J2EE 伺服器一向比較穩定,支援較好的失效備援(fail-over), 以及其他較高階的功能,像是可以提昇資料存取速度的物件共同管理(Object Pooling)。J2EE 所需的成本較高,而且也需要有經驗比較多的人去維護。

這些技術的重要性
大部分在 JSP 討論區被問到的問題,嚴格說來並不是有關 JSP 的問題。其中大約有三分之二是求助有關 Java,JavaScript,JSP Container,以及 HTML 的問題。在開始一項 JSP 專案之前,先把這些技術學好,你就不會感到氣餒、困惑,也比較不會出錯。到頭來, 也會節省你不少時間跟金錢。

在這篇專欄的下一部份,我們會討論一套訓練時程,幫助你成為專業的 JSP 程式設計師。


建立一套 JSP 自學課程
很 多人都犯了同樣的毛病,那就是把 JSP 誤認為是 Java 程式語言的簡化。其實不是這樣的。(事實上,應該說 JSP 是 Servlet 的簡化。)這個錯誤的結果是,程式設計師們大都只嘗試學習 JSP 而不去學其他相關必要的支援技術。JSP 是一種其他技術的橋樑,而要想成功的運用它,你必須了解橋樑另外一端的技術。這表示,如果你已經知道 Java,HTML 還有 JavaScript,那麼 JSP 會變得很簡單。否則的話,你必須花比別人更多的力氣。

以下這套循序漸進的時程,讓我們了解要想成為一個成功的 JSP 程式設計師所必須具備的條件。這套時程是筆者自己設計的,並在所有的 JSP 網站應用程式訓練中使用。請注意下面事項:

— 跳過任何你已經知道的步驟。
— 訓練所需的時間只包括學習其中足夠的基本技巧,以便能前往下一個步驟。

安裝你的網頁伺服器,並針對你的網頁伺服器做一個初步的了解。

因為 Apache 是免費的,而且在大部分的作業平台都可以用,筆者推薦使用 Apache 當作你訓練自己用的網頁伺服器。安裝時間:兩天。


接著,確定你了解 HTML / XHTML。

你 將需要涵蓋一些基本的技巧,尤其是如何在 HTML 頁面控制項(layout control)上 使用表格(table)。另外,由於 XHTML 即將很快的取代 HTML,所以你不妨也學一些有關 XHTML 的基本事項。在學習 HTML 時,你也要注意建立一個格式嚴謹的文件所必須遵守的規則。很多程式設計師透過 HTML IDE(整合性開發環境平台,Integrated Development Environment)學習 HTML。因為大部分的 HTML IDE 所產生的 HTML 程式碼雜亂無章,完全不遵守 XHTML 的規則,你還是花時間手動建立自己的 HTML 吧!你會發現,所花的時間是值得的。這個步驟很重要,因為你在某些情況下必須使用 JSP 來寫定製的 HTML。所以你必須能夠很流利的撰寫 HTML 程式碼。訓練時間:二到四週。


開始學習 Java。從 Java 1.3 開始。

了 解 Java 程式語言的基本技巧是很重要的。你不用擔心要去學那些什麼 Swing 或其他有關 Java 的圖形元件。你在 JSP 裡面用不到它們。 你應該把注意力集中在學習 Java 語言的邏輯,以及有關 Java 是如何運作的細節上面。另外,你可以再花時間學習 JavaBeans。學習 Applets 是很好,不過,跟 Swing 一樣,很多 JSP 專案不會用到 Applets。學習 Applets 有一個好處,那就是它們提供了一個學習基本的 Java 語言技巧的視覺架構,並同時加強了某些基本的 HTML 技術。訓練時間:三到六週。


學習 JavaScript。

學 習如何建構 JavaScript 函式,以便驗證你的 HTML 的 Form,是個不錯的主意。你也可以研究一下,JavaScript 是如何更動 HTML 網頁裡面的某些元件。最後,再看看 HTML 網頁提供給你哪些事件(Event)以便讓你用來觸發一個 JavaScript 函式。 訓練時間:一到兩週。


檢視並了解你的網頁伺服器的較小的細節。

這個步驟很重要,因為它會讓你對於網頁伺服器的功能有更進一步的了解。訓練時間:兩天。


安裝你的 JSP Container。

我 建議使用 Tomcat 做為開端。它是 JSP Container 的參考執行計劃(reference implementation)。或許你不會在正式的生產環境上使用 Tomcat,但是它畢竟是個穩固的伺服器。再者,很多 JSP 程式設計師使用 Tomcat。當你遇到問題的時候,會比較容易找到人問。安裝時間: 一到兩天。


開始學習 JSP。

學習 JSP 包括將從步驟一到六所學的,應用到 JSP 物件以及程式撰寫上,以建構一個 JSP 頁面。其他有關 JSP 訓練方面是學習如何建構一個分散式應用軟體。 訓練時間:四到六週。


學習更多有關你的 JSP Container。

學 會 JSP 而沒有學很多有關真正解析頁面的 JSP Container,是可能的。不過很多 JSP Container 都提供特有的特殊功能, 了解這些技術對於你 JSP 專案的進行是有幫助的。它值得你花時間致力去研究,你也應該學習那個真正執行你的專案的伺服器裡面的有關知識。這對於如何最佳化你的伺服器, 以讓你的 JSP 程式跑得更快、同時也不會出現問題,是有幫助的。訓練時間:二到七天。


研究/學習 JDBC。

大部分的 JSP 專案都會使用某種形式的資料庫。JDBC 是用來跟資料庫連結用的。每一個 JDBC 驅動程式很可能在它所支援的功能上有所不同。 這件事情通常都會被忽略掉。因此,了解並學習專案所使用的 JDBC 驅動程式就變得很重要。(有時候,這部分的訓練會因專案需要或時程因素而被併到 Java 或 JSP 那個步驟裡面。)訓練時間:一到兩週。
到這裡,我認為大多數人都已經具備身為一個初階的 JSP 程式設計師所應有的專業知識。雖然還有很多要學習的,不過,一個人學到這裡就有紮實的根基, 而可以繼續往下一步前進了。從這個點開始,你可以只專精你的專案所需要學習的領域。另外,你也可以考慮將你的專業知識延伸到 DHTML,XML,certificates, JSP Tag Libraries 以及/或者 Servlets,端看你所架構的網頁伺服器是哪一類型而定。

以上就是一個紮實的 JSP 訓練時程。依照你的專案小組的分散性,以及你已經有的知識而言,你或許不用將所有東西學起來。但是我使用過這個學習時程來訓練程式設計師, 而且相當成功。主要的關鍵在於時間。大致上說來,要真正的從頭到尾訓練一個人,讓其成為一個成功的 JSP 使用者,所需的時間大概是五個月。你可以也應該將一個專案做為你訓練過程的基礎架構。 它能夠提供訓練的焦點,同時也允許專案小組專心於某個特定專案的重要課題。縱使五個月好像很長,這個時程還是不足以讓一個人成為完全成熟的網頁應用工程 師。

如果你認為這個時間實在是太長,而覺得學習 ASP 比較快,我勸你再仔細想想。雖然 ASP 的學習曲線跟 JSP 不一樣,我所用的 ASP 訓練時程跟 JSP 訓練時程比起來其實是大同小異。這項訓練重點是在反映網頁應用程式開發的過程,而非只針對某個特定的程式語言。

在這篇專欄的下一部份,我們會帶你看看某些不錯的網路資源,可以幫助你上手。


網路上 JSP 教學資料的快速簡介
網路上有很多很棒的 JSP 學習資料。在第一節我們會列出一些目前在網路上很熱門的 JSP 教學資料。這些教學資料都是免費的,而且也都提供針對 JSP 的很好的介紹。第二節裡面,我們會提到其他你會覺得有用的網路上的學習資料。

JSP 教學手冊
到目前為止,所有的 JSP 教學手冊都有類似以下的兩個弱點:

對於如何安裝一個 JSP Container,都沒有足夠的細節討論。

沒有任何手冊針對 JSP 應用程式的分散性有足夠深入的討論。
說 句公道話,要在基本的教學手冊中做到以上任何一點是有點難。這些教學手冊有一個共同的目的:提供 JSP 簡短的概觀,同時也提供讀者一個學習過程的起點。 就這方面來說,這些教學手冊都做得很成功。每一個手冊所針對的讀者群都有一點不同,有些程式設計師會有興趣輪流閱讀這些手冊,因為每個手冊都有不同的資 訊。


Servlets and JavaServer Pages (JSP) 1.0: A Tutorial(Marty Hall。1999)是網路上最廣為使用的 JSP 教學手冊之一。它也有一點點過時,因為它是為 JSP 1.0 設計的,而現在 JSP 已經到 1.2 版了。其中影響最大的是 "Getting Started:Software and Server Setup" 這一章,應該完全省略掉,其中提到的集裝軟體已經過時。這個教學手冊會被列在這裡的原因是, 它討論的內容也涵蓋了 Servlet。事實上,這個手冊的前四分之三討論有關 Servlet,而後面四分之一才討論到 JSP。結果是,讀者能夠對於 Servlet 有一個基本的認識,同時也能了解為什麼 JSP 會成為開發網頁應用程式簡單化的一大步。這篇手冊討論 JSP 的章節有一點點匆促,而沒有提供太多的程式範例。 如果你對學習更多有關 Servelt 以及它們與 JSP 的關係有興趣,這是個不錯的教學手冊。如果你只對如何開始使用 JSP 有興趣,那麼你可以選擇這裡所列的其他手冊。


JSP: The Short Course(Ray Carnes 8.26.2000)是 JSP 的快速簡介。這個課程假設你對 JSP 一無所知, 而且對於 Java 或 HTML 也認識不多。它是個簡單而快速的教學手冊。如果你是一個中級或進階的程式設計師,你會發現這本手冊太淺了。如果你是個程式設計的新手, 那麼你會覺得這本手冊是個有關 JSP 的簡單介紹,同時也有很多簡單的範例帶著你走過 JSP 的基本知識。既然這本手冊是為資歷較淺的程式設計師而編的,它並不會深入的提到 JSP 的機制。另一個有關這本手冊的好處是,Mr.Carnes 將這本手冊分章節編寫,而且也在 2001 持續的為這本手冊加入新的東西。


JavaServer Pages Fundamentals's(Govind Seshadri 9.13.2000)這本手冊是一個編寫良好的中級課程。它提供很好的 JSP 概觀,並且也讓你對於 JSP 有紮實的觀念。這本手冊沒有提供太多的程式範例,但是它有一些很不錯的圖表,可以幫助程式設計師了解 JSP 的機制。 在所有的 JSP 教學手冊裡面,這份手冊提供最好的 JSP 快速技術簡介。對程式設計方面的新手而言,這份手冊有兩個弱點。首先,除非你有相當的 Java 基礎,否則它讀起來會有點難。其次,程式範例的解釋不是很夠。總的來說,我會推薦這份教學手冊做為任何想要學習 JSP 的人的起點。


額外的 JSP 學習資源
既然使用 JSP 意味著要有 Java 的基本認識,我們認為應該有必要再給你一個 Java 教學手冊,以免你在研讀 JSP 教學手冊時碰到 Java 的問題。

The Java Tutorial (Sun)是 Sun 本身所出版有關 Java 的教學手冊。它是個教你如何使用 Java 的好書。這份手冊分成幾個學習路線。每一個路線涵蓋不同的課題。 例如,如果你要學習如何為你的 JSP 專案建構 JavaBean 物件,你可以到這裡然後使用 JavaBean 學習路線。另一個有關 Servlet 的學習路線可以在 這裡 找到。Servlet 學習路線非常完整,它讓你對 Servlet 會有初步的了解。不過使用 Servlet 學習路線有一個問題,那就是它有點過時, 而沒有討論到目前的 Servlet 版本。網站上並沒有有關 JSP 的學習路線,不過筆者期待 Sun 會在 2001 年年底前為 JSP 1.2 寫一個。

關於 JSP,有一點是先前的手冊都沒有提到的,就是如何建構一個 Tag Library。事實上,一個基本的 JSP 手冊應該不會提到 Tag Library,這是一個進階的 JSP 課題。這表示,直到你熟悉 JSP 手冊中所提到的基本技巧為止,你不用去看 Tag Library 的教學手冊。


JSP Tag Extensions(Wrox 2000)提供一個有關 Tag Library 的教學手冊,這個手冊其實是 Wrox 出版的書 "Java Server Programming — J2EE Edition" 的第十二章。這本書寫得不錯,而且也很完整。 這本手冊則有很好的範例同時對如何建構一個 JSP Tag Library 也解釋得不錯。它包含所有剛開始學習 Tag Library 時所涵蓋的所有東西。


最後,JSP Product Page (Sun)是 JSP 產品的官方網站,你可以在這裡找到正式的官方文件以及有關 JSP 的統計資料。

"