Servlet和JavaServerPages的集成应用

erp|server|servlet

  本文描述了通过使用 servlet 和 JavaServer Pages来集成瘦客户机与 MQSeries。这种集成需要用户详细填写 HTML 表单,并从该表单中收集用户数据然后通过一个消息队列将数据发送到后端应用程序。接下来后端应用程序将处理该表单数据并通过该消息队列发回一个应答。该应答需要在浏览器中显示。

  本文讨论了瘦客户机、servlet 及消息队列间的交互,并演示了如何在该解决方案中使用 IBM 提供的不同产品。读者应该了解Java语言并熟悉 WebSphere 和 MQSeries。

  体系结构概述 下图给出了所建议的解决方案体系结构。它涉及三层方法。

  处理流程

  用户填写 HTML 表单。 将表单发送给 servlet。 servlet 将该 HTTP 请求转换成一个 MQSeries 消息,并将其放入一个队列。 后端应用程序处理该消息,然后通过消息队列发回一个应答。 servlet 从队列中检索消息,并将其存放在一个 Java Bean 中。 然后 servlet 调用编译过的 JavaServer Page 并动态生成结果 HTML 页面。 JSP 从 Java Bean 检索该页面的消息内容,将其合并到 HTML,然后将结果页面回显在浏览器上。

  该解决方案利用了下列技术:

  HTML/HTTP、Java - servlet、Java Beans 和 JavaServer Page、Web 服务器、消息队列

  该解决方案集成了下列产品:

  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 有许多优点。servlet 是扩展了 Web 服务器的功能的标准服务器端 Java 应用程序。servlet 完全运行在 Web Server 上,不会将任何东西下载到浏览器。在装入期间或初始请求期间会将 servlet 装入服务器的地址空间。在初始请求之后,servlet 非常迅速地作出响应。servlet 的 init 方法为 servlet 的运行做好了准备。每个 servlet 装入只调用一次 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 方法是执行这一过程的理想位置。然后对该 servlet 的后继调用会执行得更快。WebSphere 也允许用户通过使用管理 GUI 预先装入 servlet,因此随着队列管理器连接的建立,servlet 做好了准备,接下来就等着传递任何消息。

  如果在 init 方法中捕获到 MQException,则上述代码会与队列管理器断开连接。结果是,为了建立与队列管理器的连接,用户将不得不重新装入 servlet。

  为了使 servlet 与 MQSeries 对话,必须使用 MQSeries Bindings for Java。MQSeries Bindings for Java 使您能够用 Java 语言编写 MQSeries 应用程序。这些应用程序直接与 MQSeries 队列管理器通信以提供高生产率、高性能开发选项。它们使用 Java 本机方法直接调用到现有的队列管理器 API 而不是通过 MQSeries 服务器连接通道进行通信;这为 Java MQSeries 应用程序提供了更佳性能。在代码中我们必须导入“com.ibm.mqbind.*”包。MQSeries 的 java 类也应该位于 WebSphere 的类路径中;这将允许 WebSphere 应用程序服务器定位 MQSeries Bindings for Java 包。

  创建 MQ 消息

  由于 BillingAddressServlet 主要用于处理来自 AddressInputForm 的 HTTP 请求,我们对 HttpServlet 生成子类。 GenericServlet 的这个抽象子类实现了用于处理请求的缺省 service() 方法。覆盖的最常见方法包括 doGet() 和 doPost()。下面的示例将覆盖 doPost() 方法。AddressInputForm 通过下面的调用来调用这个 doPost() 方法:

<FORM METHOD=POST ACTION="/servlet/BillingAddressServlet">

  POST 请求发送一个 HTTP 消息主体,该消息主体含有发给 servlet 的所有数据。然后 doPost() 方法从输入中创建下列消息字符串:

String tempAddress = "Input information is";
res.setContentType("text/plain");
..............
if ("application/x-www-form-urlencoded".equals(req.getContentType()))
{
System.out.println("In doPost()");
Enumeration enum = req.getParameterNames();
while (enum.hasMoreElements())
{
String name = (String) enum.nextElement();
String values = req.getParameter(name);
if(values != null) {
tempAddress = tempAddress + "; " + name + ": " + values;
}
}

  发送消息

  然后通过使用下列代码调用 putOrder() 方法,doPost() 方法将消息字符串放入消息队列:

public void
putOrder(String tempAddress) {
try {
int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT;
//Specify the queue that we wish to open, and the open options.
MQQueue ncOrderDataQ = qMgr.accessQueue("NC.OrderCreateQ",
openOptions, 
qManager,
null,         // no dynamic q name
null);        // no alternate user id

//Define a MQ message
MQMessage customerAddress = new MQMessage();

customerAddress.writeUTF(tempAddress);

//specify the message options
MQPutMessageOptions pmo = new MQPutMessageOptions();

//put the message on the queue
ncOrderDataQ.put(customerAddress, pmo);

//Close the queue
ncOrderDataQ.close();

}
catch .........

  检索消息

  要检索由后端应用程序返回的消息,doPost() 方法调用 orderUpdateStatus() 方法。orderUpdateStatus() 方法使用下列代码检索队列中的消息:

public String orderUpdateStatus() {
String msgText = null;
try {
int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT;

//Specify the queue that we wish to open, and the open options.
MQQueue ncOrderUpdateQ = qMgr.accessQueue("NC.UpdateQ",
openOptions,
qManager,
null,     // no dynamic q name
null);   // no alternate user id

//create a new get the message
MQMessage retrievedMessage = new MQMessage();

retrievedMessage.messageId = MQC.MQMI_NONE;

//set the get message options
MQGetMessageOptions gmo = new MQGetMessageOptions();

//get the message off the queue
ncOrderUpdateQ.get(retrievedMessage, gmo);

//Display the message
msgText = 
retrievedMessage.readString(retrievedMessage.getMessageLength());     //for NC.UpdateQ

//Close the queue
ncOrderUpdateQ.close();
}
catch .........

  调用 JSP

  最后,putOrder() 方法调用 performTask() 方法,以将消息存储在 BillingAddress Bean 中。然后 servlet 调用 AddressOutputPage JSP,并将 BillingAddressBean 的句柄传给它。JSP 抽取出动态内容(即,来自 Java Bean 的消息)并将它们合并进显示在浏览器上的 HTML 页面中。

public void performTask(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response,
java.lang.String returnMessage) {

try
{
// instantiate the bean
BillingAddressBean myBillingAddressBean = new BillingAddressBean();
// set the return message in the bean
myBillingAddressBean.setMQReturnMessage(returnMessage);
// store the bean in the request so it can be accessed by
pages which are accessed with callPage()
((com.sun.server.http.HttpServiceRequest)request).setAttribute
("BillingAddressBean", myBillingAddressBean);
// Call the output page
((com.sun.server.http.HttpServiceResponse)response).callPage
("/AddressOutputPage.jsp", request);
}
catch .........

  结束语

  在这一解决方案里,servlet 和 JSP 的结合允许将功能逻辑与显示分离。servlet 充当控制器,而 JSP 充当结果视图。同样,使用 JSP 和 Java Bean 清晰划分了内容显示和内容本身。通过使用 servlet init 方法为 servlet 运行做好准备,例如,创建到队列管理器的连接,改进了性能。WebSphere 允许用户预先装入 servlet 以便能够在用户使用 servlet 之前在初始化期间就完成如建立连接等耗时的任务。通过使用消息和队列,MQSeries 使不同的应用程序能够相互集成。

时间: 2024-09-30 18:09:33

Servlet和JavaServerPages的集成应用的相关文章

从入门到精通 JSP全系列教程

js|教程 JSP的英文全称是Java Server Page,中文全称是Java服务器端语言.自JSP推出后,众多大公司都支持 JSP技术的服务器,如IBM.Oracle.Bea公司等,所以JSP迅速成为商业应用的服务器端语言.它有5大优势:(1)JSP方便与HTML混合:(2)JSP运行速度更快:(3)JSP技术有众多大软件公司支持:(4)JSP技术有众多开放性代码组织支持:(5)可以跨平台运行. 本站在以前已经给大家整理了一些基础教程: jsp Servlet基础入门学习教程 动态网页学习

Websphere应用服务器

在商品和服务市场,由于用户需要将Internet作为产品营销,信息交流,定购和发货渠道,Web.Int ernet.Intranet等技术获得了高速发展,使得Web服务器从简单的HTTP服务器到Web应用服务器的进化成为必然.通过Web应用服务器,可以让任何客户访问存放在各种系统中的各种类型的信息.并通过已有的,内置的连接器(Connectors)和Java运行环境,可以实现这一方便连接. IBMWebSphere应用服务器是一个完善的,开放的Web应用服务器.它是IBMe-business 应

第一章_servlet

[Servlet与Jsp学习指南] *学习此servlet前,需要下载servlet-api.jar,MyEclipse中需要自带javaEE3.0版本的才可以使用注解访问servlet 1.1.Servlet API概述 Javax.servlet 包含定义Servlet与Servlet容器之间契约的类和接口 Javax.servlet.http 包含定义http servlet与servlet容器之间契约的类和接口 Javax.servlet.annotation 包含对servlet.fi

JAVA新技术在协同OA中的应用

问题描述 协同软件是最受用户追捧的管理软件之一,被誉为继OFFICE.ERP之后,应用软件领域最大的应用热潮.在复旦协达.点击等协同软件专业厂商的大力推动,以及用户需求的拉动下,我国协同软件发展非常迅速,协同软件的产品升级换代也非常快.许多协同软件产品对于新技术的吸收与采纳,持非常积极的态度,为我国协同软件在产品上赶超国际水平奠定了基础. 因为协同软件大部分都是组织单位的所有管理者都需要用的管理软件,因此目前主流的协同软件都是采用B/S应用模式和采用JAVA开发,避免了传统C/S下受局域网的限制

Eclipse+Tomcat集成开发servlet

servlet Eclipse+Tomcat集成开发servlet 关键字 Eclipse Tomcat Servlet Eclipse是open source的集成开发环境,它得到了IBM的大力支持,而Tomcat我们就更熟悉了,它是apache组织的JSP/Servlet容器,下面将讲述如何集成: 准备: 1. Tomcat4.0 2. Jdk1.4 3. Eclipse2.0 4. Eclipse的Tomcat插件在http://www.sysdeo.com/eclipse/tomcatP

shiro和spring集成时session管理器超时时间问题

问题描述 shiro和spring集成时session管理器超时时间问题 这是我的配置文件,我配置了并发人数控制和动态权限过滤,然后session超时时间这里也是配置了的,然后并没有什么鸟用,在登录以后获取超时时间也是正常的,但还是1分钟就过期了. <?xml version="1.0" encoding="UTF-8"?> xmlns:util="http://www.springframework.org/schema/util"

方便 Ajax 与 Java EE 的集成

随着 Ajax 的兴起,对于消解这个热门技术的谜团并有针对性地处理在它的使用中出现的问题的需求出现了.高级 IT 专家 Patrick Gan 利用这个机会,研究了在 Java EE Web 应用程序中引入 Ajax 对整个开发生命周期可能产生的影响.对采纳 Ajax 基于异步通信的模式会存在的问题保持清醒,有助于踏上有效集成 Ajax 的正确道路. Asynchronous JavaScript + XML (Ajax)是个相当新的术语(有些人说它是旧酒装新瓶),在不同的 Web 开发社区中,

Java Servlet 编程及应用之二

编写Servlet所需要的开发环境 进行Servlet开发所需要的基本环境是JSDK以及一个支持Servlet的Web服务器. 1.JSDK(Java Servlet Development Kit) JSDK包含了编译Servlet应用程序所需要的Java类库以及相关的文档.对于利用Java 1.1进行开发的用户,必须安装JSDK.JSDK已经被集成进Java 1.2 Beta版中,如果利用Java 1.2或以上版本进行开发,则不必安装JSDK. JSDK可以在Javasoft公司的站点免费下

JavaServerPages白皮书

erp|server JavaServer PagesTM (JSP)技术为创建显示动态生成内容的Web页面提供了一个简捷而快速的方法.JSP技术的设计目的是使得构造基于Web的应用程序更加容易和快捷,而这些应用程序能够与各种Web服务器,应用服务器,浏览器和开发工具共同工作. 本白皮书提供了JSP技术的全面概述,描述了其开发背景以及这项技术的总体目标.同时,在一个简单示例中,还描述了一个基于JavaTM技术的页面的关键组成部分. 开发基于Web的应用程序:背景 在万维网短暂的历史中,它已经从一