亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

WebService大講堂之Axis2(5):會(huì)話(Session)

系統(tǒng) 2444 0

本文為原創(chuàng),如需轉(zhuǎn)載,請(qǐng)注明作者和出處,謝謝!

WebService 給人最直觀的感覺(jué)就是由一個(gè)個(gè)方法組成,并在客戶端通過(guò) SOAP 協(xié)議調(diào)用這些方法。這些方法可能有返回值,也可能沒(méi)有返回值。雖然這樣可以完成一些工具,但這些被調(diào)用的方法是孤立的,當(dāng)一個(gè)方法被調(diào)用后,在其他的方法中無(wú)法獲得這個(gè)方法調(diào)用后的狀態(tài),也就是說(shuō)無(wú)法保留狀態(tài)。

讀者可以想象,這對(duì)于一個(gè)完整的應(yīng)用程序,無(wú)法保留狀態(tài),就意味著只依靠 WebService 很難完成全部的工作。例如,一個(gè)完整的應(yīng)用系統(tǒng)都需要進(jìn)行登錄,這在 Web 應(yīng)用中使用 Session 來(lái)保存用戶登錄狀態(tài),而如果用 WebService 的方法來(lái)進(jìn)行登錄處理,無(wú)法保存登錄狀態(tài)是非常令人尷尬的。當(dāng)然,這也可以通過(guò)其他的方法來(lái)解決,如在服務(wù)端使用 static 變量來(lái)保存用戶狀態(tài),并發(fā)送一個(gè) id 到客戶端,通過(guò)在服務(wù)端和客戶端傳遞這個(gè) id 來(lái)取得相應(yīng)的用戶狀態(tài)。這非常類似于 Web 應(yīng)用中通過(guò) Session Cookie 來(lái)管理用戶狀態(tài)。但這就需要由開發(fā)人員做很多工作,不過(guò)幸好 Axis2 為我們提供了 WebService 狀態(tài)管理的功能。

使用 Axis2 來(lái)管理 WebService 的狀態(tài)基本上對(duì)于開發(fā)人員是透明的。在 WebService 類需要使用 org.apache.axis2.context.MessageContext org.apache.axis2.context.ServiceContext 類來(lái)保存與獲得保存在服務(wù)端的狀態(tài)信息,這有些象使用 HttpSession 接口的 getAttribute setAttribute 方法獲得與設(shè)置 Session 域?qū)傩浴?

除此之外,還需要修改 services.xml 文件的內(nèi)容,為 <service> 元素加一個(gè) scope 屬性,該屬性有四個(gè)可取的值: Application, SOAPSession, TransportSession, Request ,不過(guò)要注意一下,雖然 Axis2 的官方文檔將這四個(gè)值的單詞首字母和縮寫字母都寫成了大寫,但經(jīng)筆者測(cè)試,必須全部小寫才有效,也就是這四個(gè)值應(yīng)為: application soapsession transportsession request ,其中 request scope 屬性的默認(rèn)值。讀者可以選擇使用 transportsession application 分別實(shí)現(xiàn)同一個(gè) WebService 類和跨 WebService 類的會(huì)話管理。

在客戶端需要使用 setManageSession(true) 打開 Session 管理功能。

綜上所述,實(shí)現(xiàn)同一個(gè) WebService Session 管理需要如下三步:

1. 使用 MessageContext ServiceContext 獲得與設(shè)置 key-value 對(duì)。

2. 為要進(jìn)行 Session 管理的 WebService 類所對(duì)應(yīng)的 <service> 元素添加一個(gè) scope 屬性,并將該屬性值設(shè)為 transportsession

3. 在客戶端使用 setManageSession(true) 打開 Session 管理功能。

下面是一個(gè)在同一個(gè) WebService 類中管理 Session 的例子。

先建立一個(gè)WebService類,代碼如下:


<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> package service;
import org.apache.axis2.context.ServiceContext;
import org.apache.axis2.context.MessageContext;
public class LoginService
{
public boolean login(Stringusername,Stringpassword)
{
if ( " bill " .equals(username) && " 1234 " .equals(password))
{
// 第1步:設(shè)置key-value對(duì)
MessageContextmc = MessageContext.getCurrentMessageContext();
ServiceContextsc
= mc.getServiceContext();
sc.setProperty(
" login " , " 成功登錄 " );
return true ;
}
else
{
return false ;
}
}
public StringgetLoginMsg()
{
// 第1步:獲得key-value對(duì)中的value
MessageContextmc = MessageContext.getCurrentMessageContext();
ServiceContextsc
= mc.getServiceContext();
return (String)sc.getProperty( " login " );
}
}
<!--[if gte mso 9]><xml> Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 </xml><![endif]--><!--[if gte mso 9]><![endif]--> <!--[if gte mso 10]> <mce:style><! /* Style Definitions */ table.MsoNormalTable { mso-style-parent:""; font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} --> <!--[endif]-->

LoginService 類中有兩個(gè)方法: login getLoginMsg ,如果 login 方法登錄成功,會(huì)將“成功登錄”字符串保存在 ServiceContext 對(duì)象中。如果在 login 方法返回 true 后調(diào)用 getLoginMsg 方法,就會(huì)返回“成功登錄”。

下面是 LoginService 類的配置代碼( services.xml ):

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> <!-- 第2步:添加scope屬性 -->
< service name ="loginService" scope ="transportsession" >
< description >
登錄服務(wù)
</ description >
< parameter name ="ServiceClass" >
service.LoginService
</ parameter >
< messageReceivers >
< messageReceiver mep ="http://www.w3.org/2004/08/wsdl/in-out"
class
="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</ messageReceivers >
</ service >

<!--[if gte mso 9]><xml> Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 </xml><![endif]--><!--[if gte mso 9]><![endif]--> <!--[if gte mso 10]> <mce:style><! /* Style Definitions */ table.MsoNormalTable { mso-style-parent:""; font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} --> <!--[endif]-->

使用如下的命令生成客戶端使用的 stub 類:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> %AXIS2_HOME%\bin\wsdl2java-urihttp://localhost: 8080 /axis2/services/loginService?wsdl-pclient-s-ostub

<!--[if gte mso 9]><xml> Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 </xml><![endif]--><!--[if gte mso 9]><![endif]--> <!--[if gte mso 10]> <mce:style><! /* Style Definitions */ table.MsoNormalTable { mso-style-parent:""; font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} --> <!--[endif]-->

stub\src\client 目錄中生成了一個(gè) LoginServiceStub.java 類,在該類中找到如下的構(gòu)造句方法:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> public LoginServiceStub(org.apache.axis2.context.ConfigurationContextconfigurationContext,
java.lang.StringtargetEndpoint,
boolean useSeparateListener)
throws org.apache.axis2.AxisFault
{

_serviceClient.getOptions().setSoapVersionURI(org.apache.axiom.soap.SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);
}

<!--[if gte mso 10]> <mce:style><! /* Style Definitions */ table.MsoNormalTable { mso-style-parent:""; font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} --> <!--[endif]--> 在該方法中最后添加如下的代碼:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> // 第3步:打開客戶端的Session管理功能
_serviceClient.getOptions().setManageSession( true );
<!--[if gte mso 9]><xml> Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 </xml><![endif]--><!--[if gte mso 9]><![endif]--> <!--[if gte mso 10]> <mce:style><! /* Style Definitions */ table.MsoNormalTable { mso-style-parent:""; font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} --> <!--[endif]-->

下面的客戶端代碼使用 LoginServiceStub 對(duì)象訪問(wèn)了剛才建立的 WebService

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> LoginServiceStubstub = new LoginServiceStub();
LoginServiceStub.Loginlogin
= new LoginServiceStub.Login();
login.setUsername(
" bill " );
login.setPassword(
" 1234 " );
if (stub.login(login).local_return)
{
System.out.println(stub.getLoginMsg().local_return);
}

<!--[if gte mso 9]><xml> Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 </xml><![endif]--><!--[if gte mso 9]><![endif]--> <!--[if gte mso 10]> <mce:style><! /* Style Definitions */ table.MsoNormalTable { mso-style-parent:""; font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} --> <!--[endif]-->


運(yùn)行上面的代碼后,會(huì)輸出“成功登錄”信息。

WebService大講堂之Axis2(5):會(huì)話(Session)管理


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 亚洲国产一区二区三区a毛片 | 老司机午夜精品视频 | 在线欧美一区 | 天天干天天天天 | 日本久久久久一级毛片 | 国产午夜精品福利视频 | 最新中文字幕在线播放 | 片在线观看 | 兽王高清完整在线观看 | 日韩一区二区天海翼 | 久久久久久麻豆 | 国产成人爱片免费观看视频 | 一区二区三区免费视频网站 | 天天做天天添天天谢 | 久久亚洲人成国产精品 | 国产精品久久免费 | 免费h片 | 91在线永久 | 精品国产一区二区三区19 | 亚洲第一成年人网站 | 亚洲成人免费在线 | 国产成人一区二区三区高清 | 亚洲一级毛片免费观看 | 亚洲成人精品在线 | 精品综合久久久久久97超人该 | 99精品高清不卡在线观看 | 亚洲一区二区三区高清 不卡 | 99九九热| 欧美一区中文字幕 | 一级毛片在线看在线播放 | 欧美线人一区二区三区 | 精品中文字幕久久久久久 | 手机看片日韩日韩 | 精品久久久久久久久久香蕉 | 亚洲精品成人网久久久久久 | 久久91精品国产一区二区 | 国产黄片毛片 | 五月天色婷婷在线 | 日韩 欧美 亚洲 国产 | 一区国严二区亚洲三区 | 伊人色综合久久天天爱 |