仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 543|回复: 11
打印 上一主题 下一主题

[学习教程] JAVA编程:Servlet和JavaServerPages的集成使用

[复制链接]
若天明 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:10:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
微软什么都提供了。你可以试想一下,如果你是新手,你是希望你点一下按钮程序就能运行那,还是想自己一点一点的组织结构,然后打包发部,调错再打包......erp|server|servlet  本文形貌了经由过程利用servlet和JavaServerPages来集成瘦客户机与MQSeries。这类集成必要用户具体填写HTML表单,并从该表单中搜集用户数据然后经由过程一个动静行列将数据发送到后端使用程序。接上去后端使用程序将处置该表双数据并经由过程该动静行列发还一个应对。该应对必要在扫瞄器中显现。
  本文会商了瘦客户机、servlet及动静行列间的交互,并演示了怎样在该办理计划中利用IBM供应的分歧产物。读者应当懂得Java言语并熟习WebSphere和MQSeries。
  系统布局概述下图给出了所倡议的办理计划系统布局。它触及三层办法。

  处置流程
  用户填写HTML表单。将表单发送给servlet。servlet将该HTTP哀求转换成一个MQSeries动静,并将其放进一个行列。后端使用程序处置该动静,然后经由过程动静行列发还一个应对。servlet从行列中检索动静,并将其寄存在一个JavaBean中。然后servlet挪用编译过的JavaServerPage并静态天生了局HTML页面。JSP从JavaBean检索该页面的动静内容,将其兼并到HTML,然后将了局页面回显在扫瞄器上。
  该办理计划使用了以下手艺:
  HTML/HTTP、Java-servlet、JavaBeans和JavaServerPage、Web服务器、动静行列
  该办理计划集成了以下产物:
  Netscape4.0/InternetExplorer3.0或更高版本、IBMHTTPServer3.0、WebSphere2.02、JDK版本1.1.7、MQSeries版本5.0
  毗连至MQSeries
  我们选择servlet模子是由于该模子相对CGI有很多长处。servlet是扩大了Web服务器的功效的尺度服务器端Java使用程序。servlet完整运转在WebServer上,不会将任何工具下载到扫瞄器。在装进时代或初始哀求时代会将servlet装进服务器的地点空间。在初始哀求以后,servlet十分敏捷地作出呼应。servlet的init办法为servlet的运转做好了筹办。每一个servlet装进只挪用一次init办法。在init办法中,按以下创建到MQSeries行列办理器的毗连:
publicvoidinit(ServletConfigconfig)
throwsServletException{
super.init(config);
try{
//Createaconnectiontothequeuemanager
qMgr=newMQQueueManager("NC.QManager");
}
catch(MQExceptionex)
{
System.out.println
("AnMQerroroccurredininit():Completioncode"
+ex.completionCode+
"Reasoncode"+ex.reasonCode);
try
{
if(qMgr!=null)
//Disconnectfromthequeuemanager
qMgr.disconnect();
}
catch(MQExceptione)
{
System.out.println("AnMQerroroccurred"
+"ininit()whiledisconnecting:"+"Completioncode"+
e.completionCode+"Reasoncode"+e.reasonCode);
}
}
}
  因为只须创建一次到MQSeries的行列办理器的毗连,而且创建毗连必要很长工夫,因而init办法是实行这一历程的幻想地位。然后对该servlet的后继挪用会实行得更快。WebSphere也同意用户经由过程利用办理GUI事后装进servlet,因而跟着行列办理器毗连的创建,servlet做好了筹办,接上去就等着传送任何动静。
  假如在init办法中捕捉到MQException,则上述代码会与行列办理器断开毗连。了局是,为了创建与行列办理器的毗连,用户将不能不从头装进servlet。
  为了使servlet与MQSeries对话,必需利用MQSeriesBindingsforJava。MQSeriesBindingsforJava使您可以用Java言语编写MQSeries使用程序。这些使用程序间接与MQSeries行列办理器通讯以供应高临盆率、高功能开辟选项。它们利用Java本机办法间接挪用到现有的行列办理器API而不是经由过程MQSeries服务器毗连通道举行通讯;这为JavaMQSeries使用程序供应了更佳功能。在代码中我们必需导进“com.ibm.mqbind.*”包。MQSeries的java类也应当位于WebSphere的类路径中;这将同意WebSphere使用程序服务器定位MQSeriesBindingsforJava包。
  创立MQ动静
  因为BillingAddressServlet次要用于处置来自AddressInputForm的HTTP哀求,我们对HttpServlet天生子类。GenericServlet的这个笼统子类完成了用于处置哀求的缺省service()办法。掩盖的最多见办法包含doGet()和doPost()。上面的示例将掩盖doPost()办法。AddressInputForm经由过程上面的挪用来挪用这个doPost()办法:
<FORMMETHOD=POSTACTION="/servlet/BillingAddressServlet">
  POST哀求发送一个HTTP动静主体,该动静主体含有发给servlet的一切数据。然后doPost()办法从输出中创立以下动静字符串:
StringtempAddress="Inputinformationis";
res.setContentType("text/plain");
..............
if("application/x-www-form-urlencoded".equals(req.getContentType()))
{
System.out.println("IndoPost()");
Enumerationenum=req.getParameterNames();
while(enum.hasMoreElements())
{
Stringname=(String)enum.nextElement();
Stringvalues=req.getParameter(name);
if(values!=null){
tempAddress=tempAddress+";"+name+":"+values;
}
}
  发送动静
  然后经由过程利用以下代码挪用putOrder()办法,doPost()办法将动静字符串放进动静行列:
publicvoid
putOrder(StringtempAddress){
try{
intopenOptions=MQC.MQOO_INPUT_AS_Q_DEF|MQC.MQOO_OUTPUT;
//Specifythequeuethatwewishtoopen,andtheopenoptions.
MQQueuencOrderDataQ=qMgr.accessQueue("NC.OrderCreateQ",
openOptions,
qManager,
null,//nodynamicqname
null);//noalternateuserid
//DefineaMQmessage
MQMessagecustomerAddress=newMQMessage();
customerAddress.writeUTF(tempAddress);
//specifythemessageoptions
MQPutMessageOptionspmo=newMQPutMessageOptions();
//putthemessageonthequeue
ncOrderDataQ.put(customerAddress,pmo);
//Closethequeue
ncOrderDataQ.close();
}
catch.........
  检索动静
  要检索由后端使用程序前往的动静,doPost()办法挪用orderUpdateStatus()办法。orderUpdateStatus()办法利用以下代码检索行列中的动静:
publicStringorderUpdateStatus(){
StringmsgText=null;
try{
intopenOptions=MQC.MQOO_INPUT_AS_Q_DEF|MQC.MQOO_OUTPUT;
//Specifythequeuethatwewishtoopen,andtheopenoptions.
MQQueuencOrderUpdateQ=qMgr.accessQueue("NC.UpdateQ",
openOptions,
qManager,
null,//nodynamicqname
null);//noalternateuserid
//createanewgetthemessage
MQMessageretrievedMessage=newMQMessage();
retrievedMessage.messageId=MQC.MQMI_NONE;
//setthegetmessageoptions
MQGetMessageOptionsgmo=newMQGetMessageOptions();
//getthemessageoffthequeue
ncOrderUpdateQ.get(retrievedMessage,gmo);
//Displaythemessage
msgText=
retrievedMessage.readString(retrievedMessage.getMessageLength());//forNC.UpdateQ
//Closethequeue
ncOrderUpdateQ.close();
}
catch.........
  挪用JSP
  最初,putOrder()办法挪用performTask()办法,以将动静存储在BillingAddressBean中。然后servlet挪用AddressOutputPageJSP,并将BillingAddressBean的句柄传给它。JSP抽掏出静态内容(即,来自JavaBean的动静)并将它们兼并进显现在扫瞄器上的HTML页面中。
publicvoidperformTask(javax.servlet.http.HttpServletRequestrequest,
javax.servlet.http.HttpServletResponseresponse,
java.lang.StringreturnMessage){
try
{
//instantiatethebean
BillingAddressBeanmyBillingAddressBean=newBillingAddressBean();
//setthereturnmessageinthebean
myBillingAddressBean.setMQReturnMessage(returnMessage);
//storethebeanintherequestsoitcanbeaccessedby
pageswhichareaccessedwithcallPage()
((com.sun.server.http.HttpServiceRequest)request).setAttribute
("BillingAddressBean",myBillingAddressBean);
//Calltheoutputpage
((com.sun.server.http.HttpServiceResponse)response).callPage
("/AddressOutputPage.jsp",request);
}
catch.........
  停止语
  在这一办理计划里,servlet和JSP的分离同意将功效逻辑与显现分别。servlet充任把持器,而JSP充任了局视图。一样,利用JSP和JavaBean明晰分别了内容显现和内容自己。经由过程利用servletinit办法为servlet运转做好筹办,比方,创立到行列办理器的毗连,改善了功能。WebSphere同意用户事后装进servlet以便可以在用户利用servlet之前在初始化时代就完成如创建毗连等耗时的义务。经由过程利用动静和行列,MQSeries使分歧的使用程序可以互相集成。

进而能拉拢大多数程序员用windows产品。并且从ASP.NETAJAX可以跨平台这一点上,间接证明了我们的推断,至少证明了微软做过这方面的研究。所以如果哪一天突然听说了.net可以跨平台了,那么请不要吃惊,如果这一天真的到来,java就到了真正和.net决战的时刻。因为不到万不得以的时候微软是不会推出跨平台的.net的,如果跨平台的.net还不足以对抗java的话,那么微软还剩的手段就是开源了,呵呵。
谁可相欹 该用户已被删除
沙发
发表于 2015-1-20 15:45:02 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
蒙在股里 该用户已被删除
板凳
发表于 2015-1-29 12:29:48 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
莫相离 该用户已被删除
地板
发表于 2015-2-1 09:03:06 | 只看该作者
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
飘灵儿 该用户已被删除
5#
发表于 2015-2-3 12:32:10 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
简单生活 该用户已被删除
6#
发表于 2015-2-5 07:58:31 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
山那边是海 该用户已被删除
7#
发表于 2015-2-7 12:13:26 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
第二个灵魂 该用户已被删除
8#
发表于 2015-2-10 01:39:14 | 只看该作者
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
小魔女 该用户已被删除
9#
发表于 2015-2-28 11:52:59 | 只看该作者
是一种使用者不需花费很多时间学习的语言
兰色精灵 该用户已被删除
10#
发表于 2015-3-9 22:47:59 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
飘飘悠悠 该用户已被删除
11#
发表于 2015-3-17 02:58:14 | 只看该作者
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
分手快乐 该用户已被删除
12#
发表于 2015-3-23 17:02:06 | 只看该作者
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 20:38

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表