Servlet和JavaServer Page使用介紹
通過使用 Servlet和JavaServer Pages來集成瘦客戶機與 MQSeries。這種集成需要用戶詳細填寫 HTML 表單,并從該表單中收集用戶數(shù)據(jù)然后通過一個消息隊列將數(shù)據(jù)發(fā)送到后端應用程序。接下來后端應用程序?qū)⑻幚碓摫韱螖?shù)據(jù)并通過該消息隊列發(fā)回一個應答。該應答需要在瀏覽器中顯示。
本文討論了瘦客戶機、Servlet 及消息隊列間的交互,并演示了如何在該解決方案中使用 IBM 提供的不同產(chǎn)品。讀者應該了解Java語言并熟悉 WebSphere 和 MQSeries。
體系結(jié)構(gòu)概述 下圖給出了所建議的解決方案體系結(jié)構(gòu)。它涉及三層方法。
解決方案體系結(jié)構(gòu)
處理流程
用戶填寫 HTML 表單。 將表單發(fā)送給 Servlet。 Servlet 將該 HTTP 請求轉(zhuǎn)換成一個 MQSeries 消息,并將其放入一個隊列。 后端應用程序處理該消息,然后通過消息隊列發(fā)回一個應答。 Servlet 從隊列中檢索消息,并將其存放在一個 Java Bean 中。 然后調(diào)用編譯過的Servlet和JavaServer Page并動態(tài)生成結(jié)果 HTML 頁面。 JSP 從 Java Bean 檢索該頁面的消息內(nèi)容,將其合并到 HTML,然后將結(jié)果頁面回顯在瀏覽器上。
該解決方案利用了下列技術(shù):
HTML/HTTP、Java Beans、Servlet和JavaServer Page、Web 服務器、消息隊列
該解決方案集成了下列產(chǎn)品:
Netscape 4.0/Internet Explorer 3.0 或更高版本 、IBM HTTP Server 3.0 、WebSphere 2.02 、JDK 版本 1.1.7 、MQSeries 版本 5.0
連接至 MQSeries
我們選擇 Servlet 模型是因為該模型相對于 CGI 有許多優(yōu)點。Servlet 是擴展了 Web 服務器的功能的標準服務器端 Java 應用程序。Servlet 完全運行在 Web Server 上,不會將任何東西下載到瀏覽器。在裝入期間或初始請求期間會將 Servlet 裝入服務器的地址空間。在初始請求之后,Servlet 非常迅速地作出響應。Servlet 的 init 方法為 Servlet 的運行做好了準備。每個 Servlet 裝入只調(diào)用一次 init 方法。在 init 方法中,按如下建立到 MQSeries 隊列管理器的連接:
- public void init(ServletConfig config)
- throws ServletException {
- super.init(config);
- try {
- //Create a connection to the queue manager
- qMgr = new MQQueueManager("NC.QManager");
- }
- catch (MQException ex)
- {
- System.out.println
- ("An MQ error occurred in init(): Completion code "
- + ex.completionCode +
- " Reason code" + ex.reasonCode);
- try
- {
- if (qMgr != null)
- //Disconnect from the queue manager
- qMgr.disconnect();
- }
- catch (MQException e)
- {
- System.out.println("An MQ error occurred "
- + "in init() while disconnecting:" + " Completion code " +
- e.completionCode + " Reason code" + e.reasonCode);
- }
- }
- }
由于只須建立一次到 MQSeries 的隊列管理器的連接,并且建立連接需要很長時間,因此 init 方法是執(zhí)行這一過程的理想位置。然后對該 Servlet 的后繼調(diào)用會執(zhí)行得更快。WebSphere 也允許用戶通過使用管理 GUI 預先裝入 Servlet,因此隨著隊列管理器連接的建立,Servlet 做好了準備,接下來就等著傳遞任何消息。
如果在 init 方法中捕獲到 MQException,則上述代碼會與隊列管理器斷開連接。結(jié)果是,為了建立與隊列管理器的連接,用戶將不得不重新裝入 Servlet。
為了使 Servlet 與 MQSeries 對話,必須使用 MQSeries Bindings for Java。MQSeries Bindings for Java 使您能夠用 Java 語言編寫 MQSeries 應用程序。這些應用程序直接與 MQSeries 隊列管理器通信以提供高生產(chǎn)率、高性能開發(fā)選項。它們使用 Java 本機方法直接調(diào)用到現(xiàn)有的隊列管理器 API 而不是通過 MQSeries 服務器連接通道進行通信;這為 Java MQSeries 應用程序提供了更佳性能。在代碼中我們必須導入“com.ibm.mqbind.*”包。MQSeries 的 java 類也應該位于 WebSphere 的類路徑中;這將允許 WebSphere 應用程序服務器定位 MQSeries Bindings for Java 包。
【編輯推薦】