国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

充分利用 EJB 使移動工作群體變得強大

2019-11-18 12:37:59
字體:
來源:轉載
供稿:網友

  假如您的企業已經依靠于使用多層的企業 java 應用,那么您也許比想象中更接近無線科技的未來。通過描述一個樣本應用,Aashish Patil 向您展示了如何用最少的人力物力把您現有的企業 Java 基礎構件連接到無線網絡中去。使用現有的 EJB、修改過的 Servlet 以及新的 WML 和 WMLScript 頁面會使這個過程產生一個飛躍。
  無線應用協議(Wireless application PRotocol,WAP)可以提高一個企業現有 Web 體系結構的含金量。假如您已經使用了企業 Java 應用,您可以輕易地將它們與 WAP 服務集成,這樣可以為移動工作群體帶來有用的數據和功能。在這篇文章里,我會涉及到使用與 WAP 相關的 J2EE 的基本要素,然后創建一個 WAP/企業 Java 樣本應用,以展示您如何把自己的 EJB 連接到無線網絡中去。
  背景:J2EE 和 WAP
  在閱讀本文前,您應該對 Java 2 平臺,Enterprise Edition(J2EE)體系結構有個基本的了解。您可以通過下面的參考資料章節找到關于 J2EE 的更多信息的鏈接。作為一個回顧,下面是一張為臺式客戶機設計的典型 J2EE 應用的示意圖。
  圖 1 — J2EE 應用結構
   充分利用 EJB 使移動工作群體變得強大(圖一)
  在圖 1 中,包含 JavaServer Page(jsp)和 Servlet 的那一層負責 什么是 WML?
  正如 Web 瀏覽器顯示 Html 編碼的數據一樣,支持無線標記語言(WAP)的設備顯示 WML 編碼的數據;另外,正如 Web 開發人員使用 Javascript 把腳本功能嵌入到 Web 頁面一樣,設備開發人員使用 WMLScript 把同樣的功能嵌入到 WML 頁面中。WML 是 xml 的一個子集,而對于精通 HTML 或其它標記語言的人來說它看起來很眼熟。WML 有一個獨一無二的特征需要牢記:它像一盒卡片;一個單一的 HTML 文檔顯示成一個單一的 Web 文檔,而一個單一的 WML 文檔 可以包含很多卡片。WAP 設備的屏幕一次只能顯示一張卡片。
  生成動態 HTML 頁面。而在 WAP 應用中,這一層將生成動態的無線標記語言(Wireless Markup Language,簡稱 WML)頁面。因此,為了轉換一個標準的 J2EE 應用使之為移動設備所使用,您將不得不編寫新的 JSP,并且在某些情況下,還要編寫新的 Servlet。企業 JavaBean(EJB)保持不變,因為它們與數據表現無關。
  有些人認為 Servlet 無需更改,或者說:只要把 Servlet 的輸出簡單地重定向到生成動態 WML 頁面的 JSP 上就已經足夠了。然而,Servlet 不能區別從臺式機和從 WAP 設備發來的請求;既然 WAP 應用可能無法實現基于 Web 的體系結構的所有功能,所以在這方面并沒有混淆的地方,這一點很重要。也正由于此,開發人員通常為 WAP 應用設計新的 Servlet。然而在大多數情況下,這些 Servlet 與那些在基于 Web 的體系結構上提供類似功能的 Servlet 非常相似。
  在圖 1 中沒有出現但對 WAP 應用又很重要的另一個組件是 WAP 網關。這個組件負責 WAP 棧和 Internet 棧之間的相互轉換。
  圖 2 是圖 1 的改進版,顯示了使用 WAP 設備作為客戶端的 J2EE 應用的結構:
  圖 2 — WAP/J2EE 應用的結構
   充分利用 EJB 使移動工作群體變得強大(圖二)
  按照圖示,所有自 WAP 客戶端到 Web 服務器的請求必須通過 WAP 網關發送。盡管 WAP 網關也可以作為放置 WML/WMLScript 頁面的 WAP 服務器,但使用 Web 服務器來放置這些頁面更為方便。
  有很多 WAP 網關的部署方法。對于多數 WAP 應用來說,網關或由 ISP 部署,或由提供這個應用的公司來部署。后者更為安全,我們以后會解釋;然而,假如用戶要求在他們的 WAP 設備上進行多用途的網絡訪問,一個內部的 WAP 網關會很不方便。大多數非 ISP 不希望他們的網關被用來訪問他們自己站點以外的其他站點;因此,為了訪問其他站點,用戶將不得不使用 ISP 網關。但對于被 WAP 客戶端使用的每一個網關來說,用戶都必須定義一個不同的連接,正如 Windows 98 的撥號網絡一樣 — 而且在每個設備上,這樣連接的數目通常是有限的。這就增加了用戶的不便性,并且在訪問一個站點時造成 WAP 設備中的連接阻塞。
  WAP 應用設計的考慮事項
  當使用 WAP 時,一個習慣為臺式客戶機編寫 J2EE 應用的開發人員會碰到一些新的挑戰。以下是在構建 WAP 應用時您也許會碰到的一些問題。
  我可以在屏幕上顯示幾行信息?
  事實上,對顯示多少行沒有非凡限制,只要不超過面板的最大尺寸就行(隨設備的不同而不同)。然而,為了避免太多滾屏,每屏(即卡片)5 至 7 行最佳。
  我應該考慮哪些安全問題?
  一些電話不支持使用 POST 方法發送表單數據。因此,用戶名和密碼必須通過 GET 方法發送。在 WAP 網關上,假如日志功能被激活并且請求已被記錄,治理員就有能看到用戶名和密碼。假如網關是由 ISP 或其它第三方提供的,這個問題就會非凡突出。
  即使一個安全的連接也不能完全消除安全隱患。那些發送到 WAP 網關的數據使用 WTLS(Wireless Transport Layer Security)加密,它使用與標準 TLS 相同的算法。然而,發送到 WAP 網關的數據是二進制的編碼格式(對 WAP),所以這些加密后的數據必須用 TLS 解密和再加密以適用于因特網。經過一段時間以后,敏感數據在 WAP 網關上以明文的形式出現。黑客則會在適當的時刻,將內存中的信息轉儲出來,進而成功地訪問這些敏感數據。
  按照注釋,解決該問題的一種辦法是在自己公司(而不是在 ISP)設一個 WAP 網關。在這種情況下,一個可信的人可以操作網關,并且可以關閉日志功能。
  您也可以用 WMLScript 來編寫自定義的加密算法,以對客戶端的用戶名和密碼進行加密。這只有在使用簡單的算法時才有可能實現;在支持 DES 類的算法上,WMLScript 不夠強大。
  我怎樣保持 session
  WAP 客戶端不支持 Cookie。這樣,當用戶在您的站點的不同頁面之間穿梭時,為了在服務器端保留關于客戶端的信息,在向服務器發送每個請求的同時,一個 Session ID 必須被當作參數傳遞。Session ID 的參數名根據 Servlet 引擎的不同而不同。
  有時,缺省的 Session ID 長度很大幅度地增加了每個請求的長度。結果導致客戶端或 WAP 網關可能將此請求看作一個無效的 URL 而拒絕。這樣有必要縮短 Session ID 的長度。請查看一下您正在使用的 Servlet 引擎的說明文檔中關于 Session ID 參數名的部分。假如您碰到過無效 URL 的錯誤,這個說明文檔也應提供有關縮短 Session ID 值長度的指南。
  構造樣本應用
  XYZ Ltd. 是一家生產 PDA,可佩戴的計算機,及其它普及計算設備的公司。公司的銷售人員拜訪客戶,提供 XYZ 產品的現場演示;某些演示要求銷售人員必須跑很遠的路去客戶那里。那么在路上,他們是怎么收到客戶列表和其它重要數據的呢?
  為此使用電子郵件會需要體積較大且昂貴的便攜式電腦或無休止的 Internet cafés 的搜索;在客戶端使用傳真機則更不切實際。取而代之的是 XYZ 的銷售人員會通過支持 WAP 功能的設備接收數據,例如手機或 PDA。使用移動設備,銷售人員能在拜訪客戶時向公司提供及時的反饋。公司就能馬上安排給客戶及時發貨并維護目前的銷售統計信息。
  我們的應用有兩個主要目標。首先,我們流動的銷售人員應該能使用它在 WAP 設備上查看客戶列表。第二,假如一個客戶希望買貨,那么銷售人員應能使用設備來下訂單。此外,任何 WAP 應用的一個重要目標應該是減少用戶必要的按鍵數目。由于受手持設備的用戶界面限制,用戶需要輸入的數據量應控制在最少。
  這是一張顯示我們系統的體系結構的流程示意圖
  圖 3 — 應用流程示意圖
   充分利用 EJB 使移動工作群體變得強大(圖三)
  用戶首先必須登錄以訪問系統;然后他們能瀏覽客戶列表和每個客戶的具體信息。假如他們希望為某一特定的客戶下訂單,那么系統會提供他們一個產品列表,他們可以從中為該客戶選擇一個特定的產品。
  在本文余下的大多數內容中,我們會討論實現該應用的 Servlet 和 JSP 代碼,并會考察 JSP 和 Servlet 一起工作的方式。關于每個 JavaServer Page 的討論還配有圖解,顯示了 JSP 在設備屏幕上的輸出。
  清單 1,Login.jsp 接受用戶名和密碼,并把它們作為參數來調用 LoginServlet。對這個和其它所有的 JSP 來說,MIME 類型都應被設置成 text/vnd.wap.wml 類型。在傳遞請求的同時,上面的 Login.jsp 還傳遞了一個叫 SessionID 的參數。它必須與每個傳送到服務器的請求一起傳遞。參數名 SessionID 是一個占位符;請參考應用服務器的說明文檔,找到適用于您特定的應用服務器的正確的參數名。Java 方法 HttpServletResponse.encodeURL(String URL) 自動添加 Session ID;在我們的應用里,這已經被廣泛地使用在 Servelet 中。
   充分利用 EJB 使移動工作群體變得強大(圖四)
  驗證空白的輸入域時會出現問題。在 input 標記里有一個屬性,它讓您使輸入域不為空:
  〈input name="name" type="text" emptyok="false"/〉
  一個手機用戶必須訪問各個獨立的對話框屏幕去輸入數據。問題出現了,因為用戶寧愿選擇直接訪問下一盒或下一張卡片而不愿通過對話框屏幕去輸入數據。一個用戶面對如圖 4 所示的屏幕時也許會遺漏密碼并撳下 NEXT。
  一個開發人員可以通過使用 WMLScript 的驗證來避免這個問題的發生(通過使用 onclick 事件)。然而,直到輸入一個值到輸入框以后,您傳遞到 WMLScript 函數的代表輸入域值的那個變量才開始被初始化。因此,若無密碼鍵入,傳遞到該函數的是未初始化的變量和腳本錯誤結果。這個問題的解決方法是在服務器端驗證所有的輸入域。
  清單 2,LoginServlet 是我們問題的解決方案:它可以認證銷售人員,并把他記錄在系統中。它也可以在服務器端為銷售人員創建一個 Session。代碼塊上的注釋指明了在哪里這些操作會被執行。一旦成功登錄,設備

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 东乡族自治县| 宿迁市| 临泽县| 七台河市| 方山县| 方城县| 南皮县| 兴化市| 华宁县| 遵义县| 台南市| 乌兰县| 攀枝花市| 随州市| 铜川市| 紫金县| 广饶县| 怀来县| 贡嘎县| 丰顺县| 隆化县| 仙居县| 哈密市| 丰城市| 航空| 东乡县| 清丰县| 汶川县| 景谷| 抚顺县| 洮南市| 南通市| 泰安市| 措美县| 桓台县| 犍为县| 卢氏县| 湘西| 新龙县| 花莲市| 班玛县|