1. 程式人生 > >J2EE第五周

J2EE第五周

aid 這一 最大的 james align 復雜 安全性 ajax AC

一.AJAX技術

AJAX全稱為“Asynchronous JavaScript and XML”(異步JavaScript和XML),是指一種創建交互式網頁應用的網頁開發技術。它有機地包含了以下幾種技術:

Ajax(Asynchronous JavaScript + XML)的定義:基於web標準(standards-based presentation)XHTML+CSS的表示; 使用 DOM(Document Object Model)進行動態顯示及交互; 使用 XML 和 XSLT 進行數據交換及相關操作; 使用 XMLHttpRequest 進行異步數據查詢、檢索; 使用 JavaScript 將所有的東西綁定在一起。

類似於DHTML或LAMP,AJAX不是指一種單一的技術,而是有機地利用了一系列相關的技術。事實上,一些基於AJAX的“派生/合成”式(derivative/composite)的技術正在出現,如“AFLAX”。

AJAX的應用使用支持以上技術的web瀏覽器作為運行平臺。這些瀏覽器目前包括:Mozilla、Firefox、Internet Explorer、Opera、Konqueror及Safari。但是Opera不支持XSL格式對象,也不支持XSLT。

Ajax技術的核心

Ajax其核心只有JavaScript、XMLHTTPRequest和DOM,如果所用數據格式為XML的話,還可以再加上XML這一項(Ajax從服務器端返回的數據可以是XML格式,也可以是文本等其他格式)。

在舊的交互方式中,由用戶觸發一個HTTP請求到服務器,服務器對其進行處理後再返回一個新的HTHL頁到客戶端,每當服務器處理客戶端提交的請求時,客戶都只能空閑等待,並且哪怕只是一次很小的交互、只需從服務器端得到很簡單的一個數據,都要返回一個完整的HTML頁,而用戶每次都要浪費時間和帶寬去重新讀取整個頁面。

而使用Ajax後用戶從感覺上幾乎所有的操作都會很快響應沒有頁面重載(白屏)的等待。

1、XMLHTTPRequest

Ajax的一個最大的特點是無需刷新頁面便可向服務器傳輸或讀寫數據(又稱無刷新更新頁面),這一特點主要得益於XMLHTTP組件XMLHTTPRequest對象。這樣就可以向再發桌面應用程序只同服務器進行數據層面的交換,而不用每次都刷新界面也不用每次將數據處理的工作提交給服務器來做,這樣即減輕了服務器的負擔又加快了響應速度、縮短了用戶等候時間。

最早應用XMLHTTP的是微軟,IE(IE5以上)通過允許開發人員在Web頁面內部使用XMLHTTP ActiveX組件擴展自身的功能,開發人員可以不用從當前的Web頁面導航而直接傳輸數據到服務器上或者從服務器取數據。這個功能是很重要的,因為它幫助減少了無狀態連接的痛苦,它還可以排除下載冗余HTML的需要,從而提高進程的速度。Mozilla(Mozilla1.0以上及NetScape7以上)做出的回應是創建它自己的繼承XML代理類:XMLHttpRequest類。Konqueror (和Safari v1.2,同樣也是基於KHTML的瀏覽器)也支持XMLHttpRequest對象,而Opera也將在其v7.6x+以後的版本中支持XMLHttpRequest對象。對於大多數情況,XMLHttpRequest對象和XMLHTTP組件很相似,方法和屬性也類似,只是有一小部分屬性不支持。

2、JavaScript

JavaScript是一在瀏覽器中大量使用的編程語言,,他以前一直被貶低為一門糟糕的語言(他確實在使用上比較枯燥),以在常被用來作一些用來炫耀的小玩意和惡作劇或是單調瑣碎的表單驗證。但事實是,他是一門真正的編程語言,有著自已的標準並在各種瀏覽器中被廣泛支持。

3、DOM

Document Object Model。 DOM是給 HTML 和 XML 文件使用的一組 API。它提供了文件的結構表述,讓你可以改變其中的內容及可見物。其本質是建立網頁與 Script 或程序語言溝通的橋梁。 所有WEB開發人員可操作及建立文件的屬性、方法及事件都以對象來展現(例如,document 就代表“文件本身“這個對像,table 對象則代表 HTML 的表格對象等等)。這些對象可以由當今大多數的瀏覽器以 Script 來取用。

一個用HTML或XHTML構建的網頁也可以看作是一組結構化的數據,這些數據被封在DOM(Document Object Model)中,DOM提供了網頁中各個對象的讀寫的支持。

4、XML

可擴展的標記語言(Extensible Markup Language)具有一種開放的、可擴展的、可自描述的語言結構,它已經成為網上數據和文檔傳輸的標準。它是用來描述數據結構的一種語言,就正如他的名字一樣。他使對某些結構化數據的定義更加容易,並且可以通過他和其他應用程序交換數據。

5、綜合

Jesse James Garrett提到的Ajax引擎,實際上是一個比較復雜的JavaScript應用程序,用來處理用戶請求,讀寫服務器和更改DOM內容。

JavaScript的Ajax引擎讀取信息,並且互動地重寫DOM,這使網頁能無縫化重構,也就是在頁面已經下載完畢後改變頁面內容,這是我們一直在通過JavaScript和DOM在廣泛使用的方法,但要使網頁真正動態起來,不僅要內部的互動,還需要從外部獲取數據,在以前,我們是讓用戶來輸入數據並通過DOM來改變網頁內容的,但現在,XMLHTTPRequest,可以讓我們在不重載頁面的情況下讀寫服務器上的數據,使用戶的輸入達到最少。 基於XML的網絡通訊也並不是新事物,實際上FLASH和JAVA Applet都有不錯的表現,現在這種富交互在網頁上也可用了,基於標準化的並被廣泛支持和技術,並且不需要插件或下載小程序。

Ajax是傳統WEB應用程序的一個轉變。以前是服務器每次生成HTML頁面並返回給客戶端(瀏覽器)。在大多數網站中,很多頁面中至少90%都是一樣的,比如:結構、格式、頁頭、頁尾、廣告等,所不同的只是一小部分的內容,但每次服務器都會生成所有的頁面再返回給客戶端,這無形之中是一種浪費,不管是對於用戶的時間、帶寬、CPU耗用,還是對於ISP的高價租用的帶寬和空間來說。如果按一頁來算,只能幾K或是幾十K可能並不起眼,但像SINA每天要生成幾百萬個頁面的大ISP來說,可以說是損失巨大的。而AJAX可以所為客戶端和服務器的中間層,來處理客戶端的請求,並根據需要向服務器端發送請求,用什麽就取什麽、用多少就取多少,就不會有數據的冗余和浪費,減少了數據下載總量,而且更新頁面時不用重載全部內容,只更新需要更新的那部分即可,相對於純後臺處理並重載的方式縮短了用戶等待時間,也把對資源的浪費降到最低,基於標準化的並被廣泛支持和技術,並且不需要插件或下載小程序,所以Ajax對於用戶和ISP來說是雙盈的。

Ajax使WEB中的界面與應用分離(也可以說是數據與呈現分離),而在以前兩者是沒有清晰的界限的,數據與呈現分離的分離,有利於分工合作、減少非技術人員對頁面的修改造成的WEB應用程序錯誤、提高效率、也更加適用於現在的發布系統。也可以把以前的一些服務器負擔的工作轉嫁到客戶端,利於客戶端閑置的處理能力來處理。

四、應用

Ajax理念的出現,揭開了無刷新更新頁面時代的序幕,並有代替傳統web開發中采用form(表單)遞交方式更新web頁面的趨勢,可以算是一個裏程碑。但Ajax都不是適用於所有地方的,它的適用範圍是由它的特性所決定的。

舉個應用的例子,是關於級聯菜單方面的Ajax應用。我們以前的對級聯菜單的處理是這樣的:

為了避免每次對菜單的操作引起的重載頁面,不采用每次調用後臺的方式,而是一次性將級聯菜單的所有數據全部讀取出來並寫入數組,然後根據用戶的操作用JavaScript來控制它的子集項目的呈現,這樣雖然解決了操作響應速度、不重載頁面以及避免向服務器頻繁發送請求的問題,但是如果用戶不對菜單進行操作或只對菜單中的一部分進行操作的話,那讀取的數據中的一部分就會成為冗余數據而浪費用戶的資源,特別是在菜單結構復雜、數據量大的情況下(比如菜單有很多級、每一級菜又有上百個項目),這種弊端就更為突出。

如果在此案中應用Ajax後,結果就會有所改觀:

在初始化頁面時我們只讀出它的第一級的所有數據並顯示,在用戶操作一級菜單其中一項時,會通過Ajax向後臺請求當前一級項目所屬的二級子菜單的所有數據,如果再繼續請求已經呈現的二級菜單中的一項時,再向後面請求所操作二級菜單項對應的所有三級菜單的所有數據,以此類推……這樣,用什麽就取什麽、用多少就取多少,就不會有數據的冗余和浪費,減少了數據下載總量,而且更新頁面時不用重載全部內容,只更新需要更新的那部分即可,相對於後臺處理並重載的方式縮短了用戶等待時間,也把對資源的浪費降到最低。

此外,Ajax由於可以調用外部數據,也可以實現數據聚合的功能(當然要有相應授權),比如微軟剛剛在3月15日發布的在線RSS閱讀器BETA版;還可以利於一些開放的數據,開發自已的一些應用程序,比如用Amazon的數據作的一些新穎的圖書搜索應用。

總之,Ajax適用於交互較多,頻繁讀數據,數據分類良好的WEB應用。

Ajax技術全解之二

術語Ajax用來描述一組技術,它使瀏覽器可以為用戶提供更為自然的瀏覽體驗。在Ajax之前,Web站點強制用戶進入提交/等待/重新顯示範例,用戶的動作總是與服務器的“思考時間”同步。Ajax提供與服務器異步通信的能力,從而使用戶從請求/響應的循環中解脫出來。借助於Ajax,可以在用戶單擊按鈕時,使用JavaScript和DHTML立即更新UI,並向服務器發出異步請求,以執行更新或查詢數據庫。當請求返回時,就可以使用JavaScript和CSS來相應地更新UI,而不是刷新整個頁面。最重要的是,用戶甚至不知道瀏覽器正在與服務器通信:Web站點看起來是即時響應的。

雖然Ajax所需的基礎架構已經出現了一段時間,但直到最近異步請求的真正威力才得到利用。能夠擁有一個響應極其靈敏的Web站點確實激動人心,因為它最終允許開發人員和設計人員使用標準的HTML/CSS/JavaScript堆棧創建“桌面風格的(desktop-like)”可用性。

與傳統的web應用比較

傳統的web應用允許用戶填寫表單(form),當提交表單時就向web服務器發送一個請求。服務器接收並處理傳來的表單,然後返回一個新的網頁。這個做法浪費了許多帶寬,因為在前後兩個頁面中的大部分HTML代碼往往是相同的。由於每次應用的交互都需要向服務器發送請求,應用的響應時間就依賴於服務器的響應時間。這導致了用戶界面的響應比本地應用慢得多。

與此不同,AJAX應用可以僅向服務器發送並取回必需的數據,它使用SOAP或其它一些基於XML的web service接口,並在客戶端采用JavaScript處理來自服務器的響應。因為在服務器和瀏覽器之間交換的數據大量減少,結果我們就能看到響應更快的應用。同時很多的處理工作可以在發出請求的客戶端機器上完成,所以Web服務器的處理時間也減少了。

Ajax的工作原理

Ajax的核心是JavaScript對象XmlHttpRequest。該對象在Internet Explorer 5中首次引入,它是一種支持異步請求的技術。簡而言之,XmlHttpRequest使您可以使用JavaScript向服務器提出請求並處理響應,而不阻塞用戶。

在創建Web站點時,在客戶端執行屏幕更新為用戶提供了很大的靈活性。下面是使用Ajax可以完成的功能:

  • 動態更新購物車的物品總數,無需用戶單擊Update並等待服務器重新發送整個頁面。
  • 提升站點的性能,這是通過減少從服務器下載的數據量而實現的。例如,在Amazon的購物車頁面,當更新籃子中的一項物品的數量時,會重新載入整個頁面,這必須下載32K的數據。如果使用Ajax計算新的總量,服務器只會返回新的總量值,因此所需的帶寬僅為原來的百分之一。
  • 消除了每次用戶輸入時的頁面刷新。例如,在Ajax中,如果用戶在分頁列表上單擊Next,則服務器數據只刷新列表而不是整個頁面。
  • 直接編輯表格數據,而不是要求用戶導航到新的頁面來編輯數據。對於Ajax,當用戶單擊Edit時,可以將靜態表格刷新為內容可編輯的表格。用戶單擊Done之後,就可以發出一個Ajax請求來更新服務器,並刷新表格,使其包含靜態、只讀的數據。

Ajax的優勢

1、減輕服務器的負擔。因為Ajax的根本理念是“按需取數據”,所以最大可能在減少了冗余請求和響影對服務器造成的負擔;

2、無刷新更新頁面,減少用戶實際和心理等待時間;

首先,“按需取數據”的模式減少了數據的實際讀取量,打個很形象的比方,如果說重載的方式是從一個終點回到原點再到另一個終點的話,那麽Ajax就是以一個終點為基點到達另一個終點,其次,即使要讀取比較大的數據,也不用像RELOAD一樣出現白屏的情況,由於Ajax是用XMLHTTP發送請求得到服務端應答數據,在不重新載入整個頁面的情況下用Javascript操作DOM最終更新頁面的,所以在讀取數據的過程中,用戶所面對的也不是白屏,而是原來的頁面狀態(或者可以加一個LOADING的提示框讓用戶了解數據讀取的狀態),只有當接收到全部數據後才更新相應部分的內容,而這種更新也是瞬間的,用戶幾乎感覺不到。總之用戶是很敏感的,他們能感覺到你對他們的體貼,雖然不太可能立竿見影的效果,但會在用戶的心中一點一滴的積累他們對網站的依賴。

3、更好的用戶體驗;
4、也可以把以前的一些服務器負擔的工作轉嫁到客戶端,利於客戶端閑置的處理能力來處理,減輕服務器和帶寬的負擔,節約空間和帶寬租用成本;
5、Ajax由於可以調用外部數據;
6、基於標準化的並被廣泛支持和技術,並且不需要插件或下載小程序;
7、Ajax使WEB中的界面與應用分離(也可以說是數據與呈現分離);
8、對於用戶和ISP來說是雙盈的。

Ajax的問題

1、一些手持設備(如手機、PDA等)現在還不能很好的支持Ajax;
2、用JavaScript作的Ajax引擎,JavaScript的兼容性和DeBug都是讓人頭痛的事;

3、Ajax的無刷新重載,由於頁面的變化沒有刷新重載那麽明顯,所以容易給用戶帶來困擾――用戶不太清楚現在的數據是新的還是已經更新過的;現有的解決有:在相關位置提示、數據更新的區域設計得比較明顯、數據更新後給用戶提示等;

4、對流媒體的支持沒有FLASH、Java Applet好;

文章來源:http://blog.chinaunix.net/uid-8995925-id-2011784.html

二.Applet程序組件

Applet

定義

  Applet是一種運行於Web客戶端環境下的Java程序組件。

工作原理

  Applet以代碼的形式嵌入Web頁面中,用標簽<applet></applet>標明,當支持Java的網絡瀏覽器遇到這對標記時,就下載相應的應用程序代碼,並在本地計算機上執行Applet。

作用優勢

  Applet可以提高Web頁面的交互能力和動態執行能力

開發步驟

  (1)編輯Applet的java源文件
  (2)編譯Applet
  (3)創建HTML文件
  (4)訪問HTML頁面,執行Applet

生命周期

  Applet類中的四個方法提供一個框架,用戶在此框架上開發小程序
  init: 此方法的目的是為Applet程序提供所需的任何初始化。在Applet標記內的param標簽被處理後調用此方法。
  start: 瀏覽器調用init方法後,此方法被自動調用。每當用戶從其他頁面返回到包含Applet的頁面時,則調用此方法。
  stop: 當用戶從包含Applet的頁面移除的時候,此方法自動被調用。因此,可以在相同的Applet中反復調用此方法。
  destroy: 此方法僅當瀏覽器正常關閉時調用。
  paint: 此方法在start()方法之後立即被調用,或者在Applet需要重繪在瀏覽器的時候調用。paint方法實際上繼承於java.awt

安全性限制

  1.不允許Applet訪問本地文件系統
  2.Applet不能執行任何本地計算機上的程序
  3.不允許Applet嘗試打開除提供Applet的服務器之外的任何系統的Socket
  4.不允許Applet訪問用戶名、電子郵件地址等與本地系統有關的信息
  5.對於Applet而言,Java環境中的某些標準系統屬性是只讀的
  6.Applet不能創建或者裝載Applet機器的網絡連接
  7.Applet不能充當網絡服務器,監聽或接收來自遠程系統的連接請求
  8.不允許Applet裝載動態庫或定義本地方法調用
  9.Applet不能操縱不在自己線程組中的任何線程
  10.Applet不能關閉JVM

獨立的Java應用程序和Applet程序之間的不同:

  (1)Java中Applet類繼承了Java.applet.Applet類
  (2)Applet類中沒有定義main(),所以一個Applet程序不會調用main()方法
  (3)Applet被設計為嵌入在一個HTML頁面
  (4)當用戶瀏覽包含Applet的HTML頁面,Applet的代碼被下載到用戶的機器上
  (5)要查看一個Applet需要JVM,JVM可以是Web瀏覽器的一個插件,或一個獨立的運行時環境
  (6)用戶機器上的JVM創建一個Applet類的實例,並調用Applet生命周期過程中的各種方法
  (7)Applet有Web瀏覽器強制執行的嚴格的安全規則,Applet的安全機制被稱為沙箱安全
  (8)Applet需要的其他類可以用Java歸檔(JAR)文件的形式下載下來

參考源:https://baike.baidu.com/item/Applet
    http://www.runoob.com/java/java-applet-basics.html

J2EE第五周