天天看點

JSP應用程式基礎

概述:

如果你沒有開發WEB應用的經驗,本文檔将會簡單的描述如何一個JSP應用是如何組織的和在運作時的事件。它也說明了一些OAF的的概念。

關鍵的JSP應用的元件

一個典型的JSP應用包括以下元件:用戶端的浏覽器、企業資料庫、包含應用對象的WEB應用伺服器(中間件)。

浏覽器和中間件使用HTTP來互動,浏覽器發送request消息給中間件,中間件以response消息來回應。

JSP檔案是一些HTML和JAVA代碼組成的,在運作時,它被編譯成JAVA類作為SERVLET來執行。

SERVLET是基于JAVA的應用伺服器的标準API的擴充程式

SERVLET SESSION是一種在浏覽器與WEB應用報務器之間的一段時間的連續HTTP請求互動。SESSION可以在任意時間由應用伺服器建立,也可以在任意時間通過應用伺服器、使用者關閉浏覽器或持續一段時間無操作而終止。SESSION通常符後應用伺服器的登入、登出循環。

JAVA BEAN是一個簡單的可重用的實作了設計模式的元件,它可以使開發者或開發工具覆寫它的屬性和方法。

任何在中間層的對象都能冠軍JDBC來的資料庫交換資料。

運作時的流程

第一步

當使用者選擇了連接配接、按鈕或者激活一個圖檔,浏覽器發送一個HTTP請求到WEB應用伺服器,在本文檔中,我們關注兩個主要的HTTP請求方法(POST和GET),它們和OAF應用相關。

HTTP GET

使用者點選一人連接配接或者圖檔連接配接時,浏覽器會發送一個GET請求,你可以把GET當做一個明信片,位址(URL)和任何發信人寫的資訊(URL參數)都寫在明信片上(它的空間是有限的),這意味着所有的資訊都是可見的(在GET請求中,所有的發送給伺服器的資訊都是為用URL參數的)。

HTTP POST

當使用者點選了一個按鈕,圖檔或者送出FORM的連接配接,浏覽器送出一個POST請求到伺服器(從技術上來講,FORM也可以以GET的方式來送出,但是在OAF中,FORM都是用POST方式來送出)。你可以把POST當做一個信封,位址是寫在外面,但内容是在裡面。在内部的資訊是沒有容量限制的。另外,送出的資料在URL中是看不到的,隻是做為信封的内容(當然也不絕對,開發者仍然可以在送出FORM時在URL中添加參數)。

什麼是FORM?

一般情況下,FORM是用來裝載使用者輸入的資料的,然後将資料發送到伺服器處理。

FORM是一個包括了像輸入框、下拉框等的HTML的結構,使用者可以送出這個FORM,當使用者選擇了送出按鈕,浏覽器發送一個POST請求,将FORM中的資料傳到伺服器。

第二步

WEB應用伺服器中的HTTP監聽器将收到的請求發送給JSP檔案,開發者的代碼不必知道也不必關心浏覽器如何送出一個POST或GET請求。它所要做的就是讀取請求中的資料然後決定做什麼。例如:一個請求中的資料可能告訴JSP檔案GO按扭被按下了,意味着要執行一個查詢。

第三步

如上面圖中所示,JSP檔案将事務代理給JAVABEAN,JAVABEAN實作了可為的行為包括資料庫互動。一旦完成事務,JSP準備好HTML内容,将它發給浏覽器。

注意:我們在程式中包括了JAVABEAN就是為了無論多複雜的應用中,JSP都不作用于應用本身,你不用在一個程式中關聯模型、視圖和控制器。無論如何,沒有絕對的技術要求要JSP和其它的類一起工作。如果有,也沒有要求它們一定是JAVABEAN。

第四步

浏覽器顯示它接收的響應的HTML内容。

事件處理:WEB UI和傳統的用戶端UI

在傳統的C/S應用中,你可以選擇處理很底層的滑鼠事件、域或視窗事件。另外,當你在用戶端和服務端通信時,你發送一個簡單的資訊到服務端去驗證結果,你也可以修改使用者界面,它具有高度的互動性。

在WEB應用中,你一般是要處理”page-level”(頁面級)的事件(除非你使用JAVASCRIPT來實作更多的互動,因為OAF代碼标準和ORACLE BLAF禁止使有和,是以這裡不讨論)。在這種情況下,使用者從一個域到另一個域,輸入資料,開發者就不用處理事件。

提示:從11.5.57開始,OAF提供了(部分頁面重新整理)PPR技術,支援一些使用者互動性更強的事件。

當浏覽器發送一個請求,所有的資料都被送出,包括使用者輸入的資料資訊事使用者想要執行的動作。開發者讀取請求中的值來确定發生了什麼(是否按了按鈕,或者按了哪個按鈕),執行標明動作所需要的工作,然後傳送一個新的HTML頁面到浏覽器。

頁面導航

我們已經回顧了當浏覽器和伺服器互動時發生的事情,但是我們還沒讨論從一個頁面到另一個頁面的主要技術。

注意:下面的描述和浏覽器發送和POST或GET請求無關。

标準請求

場景:

一個使用者選擇了一個PAGE X中的到PAGE A連接配接,在PAGE A中她又選擇了一個到PAGE B的連接配接。

實作:

浏覽器發送一個請求到PAGE A,它執行動作發送一個包括HTML的響應并顯示。當使用者想看到PAGE B時,浏覽器發送一個新的請求到PAGE B,它執行動作發送一個響應,PAGE B就顯示了。

如下圖:

JSP FORWARD

提示:你可以在OAF中大量使用JSP FORWARD,但是你必須清楚原理。

場景:在PAGE A中,使用者從一個動态清單中選擇了一個動作,JSP A中的代碼需要處理什麼頁面要被顯示。

實作:在這種情況下,當處理一個使用者選擇的請求,JSP A forward到JSP B,它執行動作發送包括它自己的HTML的響應。因為FORWARD動作發生在伺服器端,浏覽器不清楚背景的動作,這兩個頁面共享一個相同的請求。

另一種情況:在OAF中是很普遍的,PAGE A執行一個FORWARD到它本身。

如:

用戶端的重定向

場景:使用者選擇了PAGE X中的連接配接到PAGE A,但是連接配接已經過期是以開發者想自動将使用者導航到一個新的頁面,PAGE A2。

實作:在這種情況下,當處理一個請求時,JSP A發送一個REDIRECT資訊到浏覽器告訴它産即通路JSP A2,浏覽器發送第二個請求到JSP A2,它執行動作發送一個包括HTML的響應來顯示。

什麼是COOKIE

為了弄清楚當使用者登入後,OAF如何維護應用的上下文,你需要清楚什麼是浏覽器的COOKIE。

COOKIE是一種應用伺服器交給浏覽器的資訊,浏覽器可以将它傳回給伺服器。也就是說,它是一種在請之前保持狀态的技術。

COOKIE可以是基于永久的或基于會話的:

浏覽器保留一個永久的COOKIE在使用者電腦檔案中,這個資訊一直和浏覽器SESSION互動,你有過通路一個網站在你登入之前就已經顯示你的名字的情況嗎,如果有,那就是永久的COOKIE在起作用。

基于SESSION的COOKIE是儲存在浏覽器的記憶體中,當浏覽器關閉時,COOKIE也被清除了。

SEVLET SESSION的更多資訊

在AOL/J和JDBC連接配接是相同的,因為它們都是很昂貴的資源,SERVLET引擎彙集請求的線程。如下圖所示,SERVLET引擎為它收到的請求配置設定一個線程,當請求完成時,SERVLET引擎将線程收回線程池中。

注意:下圖表示的是一個使用者在一個浏覽器中執行了兩個動作,兩個HTTP請求(同一個浏覽器SESSION)。它不能表示兩個浏覽器的情況。

因為一個浏覽器要吧被多個線程服務(每個請求不同),SERVLET SESSION提供了維護請求狀态的資源。

l         如果WEB應用想建立一個SERVLET SESSION,它調用一個請求對象上的方法來申請建立一個SESSION。

l         SERVLET引擎建立SESSION(一個javax.servlet.http.HttpSesson對象),帶有一個特定的傳回給浏覽器的COOKIE,這個COOKIE中儲存着SESSION ID.