Servlet和JavaServer Page使用介紹
通過(guò)使用 Servlet和JavaServer Pages來(lái)集成瘦客戶機(jī)與 MQSeries。這種集成需要用戶詳細(xì)填寫 HTML 表單,并從該表單中收集用戶數(shù)據(jù)然后通過(guò)一個(gè)消息隊(duì)列將數(shù)據(jù)發(fā)送到后端應(yīng)用程序。接下來(lái)后端應(yīng)用程序?qū)⑻幚碓摫韱螖?shù)據(jù)并通過(guò)該消息隊(duì)列發(fā)回一個(gè)應(yīng)答。該應(yīng)答需要在瀏覽器中顯示。
本文討論了瘦客戶機(jī)、Servlet 及消息隊(duì)列間的交互,并演示了如何在該解決方案中使用 IBM 提供的不同產(chǎn)品。讀者應(yīng)該了解Java語(yǔ)言并熟悉 WebSphere 和 MQSeries。
體系結(jié)構(gòu)概述 下圖給出了所建議的解決方案體系結(jié)構(gòu)。它涉及三層方法。
解決方案體系結(jié)構(gòu)
處理流程
用戶填寫 HTML 表單。 將表單發(fā)送給 Servlet。 Servlet 將該 HTTP 請(qǐng)求轉(zhuǎn)換成一個(gè) MQSeries 消息,并將其放入一個(gè)隊(duì)列。 后端應(yīng)用程序處理該消息,然后通過(guò)消息隊(duì)列發(fā)回一個(gè)應(yīng)答。 Servlet 從隊(duì)列中檢索消息,并將其存放在一個(gè) Java Bean 中。 然后調(diào)用編譯過(guò)的Servlet和JavaServer Page并動(dòng)態(tài)生成結(jié)果 HTML 頁(yè)面。 JSP 從 Java Bean 檢索該頁(yè)面的消息內(nèi)容,將其合并到 HTML,然后將結(jié)果頁(yè)面回顯在瀏覽器上。
該解決方案利用了下列技術(shù):
HTML/HTTP、Java Beans、Servlet和JavaServer Page、Web 服務(wù)器、消息隊(duì)列
該解決方案集成了下列產(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 模型是因?yàn)樵撃P拖鄬?duì)于 CGI 有許多優(yōu)點(diǎn)。Servlet 是擴(kuò)展了 Web 服務(wù)器的功能的標(biāo)準(zhǔn)服務(wù)器端 Java 應(yīng)用程序。Servlet 完全運(yùn)行在 Web Server 上,不會(huì)將任何東西下載到瀏覽器。在裝入期間或初始請(qǐng)求期間會(huì)將 Servlet 裝入服務(wù)器的地址空間。在初始請(qǐng)求之后,Servlet 非常迅速地作出響應(yīng)。Servlet 的 init 方法為 Servlet 的運(yùn)行做好了準(zhǔn)備。每個(gè) Servlet 裝入只調(diào)用一次 init 方法。在 init 方法中,按如下建立到 MQSeries 隊(duì)列管理器的連接:
- 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 的隊(duì)列管理器的連接,并且建立連接需要很長(zhǎng)時(shí)間,因此 init 方法是執(zhí)行這一過(guò)程的理想位置。然后對(duì)該 Servlet 的后繼調(diào)用會(huì)執(zhí)行得更快。WebSphere 也允許用戶通過(guò)使用管理 GUI 預(yù)先裝入 Servlet,因此隨著隊(duì)列管理器連接的建立,Servlet 做好了準(zhǔn)備,接下來(lái)就等著傳遞任何消息。
如果在 init 方法中捕獲到 MQException,則上述代碼會(huì)與隊(duì)列管理器斷開連接。結(jié)果是,為了建立與隊(duì)列管理器的連接,用戶將不得不重新裝入 Servlet。
為了使 Servlet 與 MQSeries 對(duì)話,必須使用 MQSeries Bindings for Java。MQSeries Bindings for Java 使您能夠用 Java 語(yǔ)言編寫 MQSeries 應(yīng)用程序。這些應(yīng)用程序直接與 MQSeries 隊(duì)列管理器通信以提供高生產(chǎn)率、高性能開發(fā)選項(xiàng)。它們使用 Java 本機(jī)方法直接調(diào)用到現(xiàn)有的隊(duì)列管理器 API 而不是通過(guò) MQSeries 服務(wù)器連接通道進(jìn)行通信;這為 Java MQSeries 應(yīng)用程序提供了更佳性能。在代碼中我們必須導(dǎo)入“com.ibm.mqbind.*”包。MQSeries 的 java 類也應(yīng)該位于 WebSphere 的類路徑中;這將允許 WebSphere 應(yīng)用程序服務(wù)器定位 MQSeries Bindings for Java 包。
【編輯推薦】