六、 跨多个WebService管理Session

当多个WebService的时候,我们要管理它的Session。这个时候我们得依靠ServiceGroupContext保存session信息;

然后在发布WebService的时候,services.xml文件的的service表情的scope就不再说request或是transportsession了,

而是application;最后同样要开启对session的管理,即options.setManageSession(true);

1、 首先多个WebService的session管理的代码如下:

package com.hoo.service;import org.apache.axis2.context.MessageContext;
import org.apache.axis2.context.ServiceGroupContext;/*** <b>function:</b>管理多个会话Session信息* @author hoojo* @createDate 2011-3-9 下午05:11:07* @file LoginSessionService.java* @package com.hoo.service* @project Axis2WebService* @blog http://blog.csdn.net/IBM_hoojo* @email hoojo_@126.com* @version 1.0*/
public class LoginSessionService {public boolean login(String userName, String password) {MessageContext context = MessageContext.getCurrentMessageContext();ServiceGroupContext ctx = context.getServiceGroupContext();if ("admin".equals(userName) && "123456".equals(password)) {ctx.setProperty("userName", userName);ctx.setProperty("password", password);ctx.setProperty("msg", "登陆成功");return true;}ctx.setProperty("msg", "登陆失败");return false;}public String getLoginMessage() {MessageContext context = MessageContext.getCurrentMessageContext();ServiceGroupContext ctx = context.getServiceGroupContext();return ctx.getProperty("userName") + "#" + ctx.getProperty("msg");}
}

和上面的Session一样的操作,只不过是用ServiceGroupContext上下文来存取session信息

另外还需要用一个Service来查询session的信息,SearchService的代码如下:

package com.hoo.service;import org.apache.axis2.context.MessageContext;
import org.apache.axis2.context.ServiceGroupContext;/*** <b>function:</b>查找多服务Session会话中的消息* @author hoojo* @createDate 2011-3-9 下午05:22:39* @file SearchSessionServcie.java* @package com.hoo.service* @project Axis2WebService* @blog http://blog.csdn.net/IBM_hoojo* @email hoojo_@126.com* @version 1.0*/
public class SearchSessionServcie {public String findSessionMessage(String key) {MessageContext mc = MessageContext.getCurrentMessageContext();ServiceGroupContext ctx =  mc.getServiceGroupContext();                if (ctx.getProperty(key) != null) {return "找到的数据<" + key + ", " + ctx.getProperty(key) + ">";} else {return "没有找到<" + key + ">的数据";}}
}

2、 编写services.xml来发布这2个服务,还以前不一样的。这一次是用一个services.xml文件配置2个service,同时发布2个服务。Xml代码如下:

<serviceGroup><service name="LoginSessionService" scope="application"><description>Web Service Session例子</description><parameter name="ServiceClass">com.hoo.service.LoginSessionService  </parameter><messageReceivers><messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /><messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /></messageReceivers></service><service name="SearchSessionService" scope="application"><description>Web Service Search Session例子</description><parameter name="ServiceClass">com.hoo.service.SearchSessionServcie  </parameter><messageReceivers><messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /><messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /></messageReceivers></service>
</serviceGroup>

3、 发布完成后,可以通过http://localhost:8080/axis2/services/listServices查看发布的WebService服务,

编写客户端的测试代码,code如下:

package com.hoo.service;import javax.xml.namespace.QName;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;/*** <b>function:</b>多会话Session管理,WebService客户端请求代码* @author hoojo* @createDate 2011-3-9 下午05:17:15* @file LoginSessionServiceClient.java* @package com.hoo.service* @project Axis2WebService* @blog http://blog.csdn.net/IBM_hoojo* @email hoojo_@126.com* @version 1.0*/
public class LoginSessionServiceClient {public static void main(String[] args) throws AxisFault {String target = "http://localhost:8080/axis2/services/LoginSessionService";RPCServiceClient client = new RPCServiceClient();Options options = client.getOptions();options.setManageSession(true);EndpointReference epr = new EndpointReference(target);options.setTo(epr);QName qname = new QName("http://service.hoo.com", "login");//指定调用的方法和传递参数数据,及设置返回值的类型Object[] result = client.invokeBlocking(qname, new Object[] { "admin", "123456" }, 
                new Class[] { boolean.class });System.out.println(result[0]);qname = new QName("http://service.hoo.com", "getLoginMessage");result = client.invokeBlocking(qname, new Object[] { null }, new Class[] { String.class });System.out.println(result[0]);target = "http://localhost:8080/axis2/services/SearchSessionService";epr = new EndpointReference(target);options.setTo(epr);qname = new QName("http://service.hoo.com", "findSessionMessage");result = client.invokeBlocking(qname, new Object[] { "userName" }, new Class[] { String.class });System.out.println(result[0]);qname = new QName("http://service.hoo.com", "findSessionMessage");result = client.invokeBlocking(qname, new Object[] { "msg" }, new Class[] { String.class });System.out.println(result[0]);qname = new QName("http://service.hoo.com", "findSessionMessage");result = client.invokeBlocking(qname, new Object[] { "password" }, new Class[] { String.class });System.out.println(result[0]);}
}

运行后结果如下:

true

admin#登陆成功

找到的数据<userName, admin>

找到的数据<msg, 登陆成功>

找到的数据<password, 123456>

4、 如果将services.xml文件<service name="SearchSessionService" scope="application">的内容改成scope=transportsession,看看什么情况。

是不是找不到session中的内容。

转载于:https://www.cnblogs.com/javaTest/archive/2011/03/16/2589369.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/298575.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

理科生浪漫起来,谁都顶不住!

全世界只有3.14 % 的人关注了爆炸吧知识和文科常呈现出的诗词歌赋风花雪月不同&#xff0c;理科常常给人一种理性、严肃甚至冰冷的感觉。其实不然&#xff0c;理科中所蕴含的美&#xff0c;非肉眼可窥。在豆瓣话题#理科中的美学#里&#xff0c;我们找到了许多透过数字、显微镜、…

docker 修改阿里镜像源_Jetson Nano 修改源镜像

由于Jeston nano自带的软件源无法更新&#xff0c;因此更换为国内的软件源&#xff0c;本文使用中科大提供的软件源镜像&#xff0c;具体步骤如下&#xff1a;进入Ubuntu系统之后&#xff0c;我们发现使用以下命令&#xff0c;查看ubuntu版本 $ cat /etc/issue 查看Ubuntu系统版…

欧文分校的计算机科学博士,UCI的CS「加州大学欧文分校计算机科学系」

加州大学欧文分校计算机科学系专业研究生阶段开设有以下三个学位项目&#xff0c;分别是&#xff1a;计算机科学硕士(Master of Computer Science)&#xff1a;为期4个学期(quarter)&#xff0c;共需修读11门课程&#xff0c;44个学分&#xff0c;合学费$43,000(2017学年)。要求…

python中数据用折线图表示_用python处理文本数据

用python处理文本数据Q&#xff1a;这篇文章主要讲什么&#xff1f;&#xff21;&#xff1a;这篇文章主要讨论如何用python来做一些简单的文本处理——文本相似度比较。谈起python的自然语言处理&#xff0c;肯定会让人想起NLTK。不过上面这两个任务并不需要NLTK这个库&#x…

智能电网时代的网络空间安全

在去年&#xff0c;虽然能源行业没有入选国家十大产业振兴计划&#xff0c;但是作为国家能源领域的重点——电力&#xff0c;确提出了自己的庞大发展计划。其中&#xff0c;国家电网提出了坚强智能电网的规划&#xff0c;并制定了路线图。什么是智能电网&#xff1f;这里有个比…

.Net Core下使用KeyDB高可用缓存集群

前言提到缓存&#xff0c;首先会想到Redis&#xff0c;它是目前最流行的开源内存键值存储服务。使用单个Redis实例进行缓存非常简单&#xff0c;如果创建高可用集群&#xff0c;则需要一个主节点、两个从节点和多个监视主节点的哨兵节点:哨兵节点监控主节点的状态&#xff0c;一…

超赞!世界10个著名悖论的最终解答来了!

全世界只有3.14 % 的人关注了爆炸吧知识今天小编看到一篇作者Das对十大悖论的个人理解&#xff0c;觉得挺有意思&#xff0c;现在便分享给模友们看看&#xff0c;你们的想法是怎样的呢&#xff1f;电车难题引用&#xff1a;“电车难题”是伦理学领域最为知名的思想实验之一&…

C# 数据类型及相互转换及常用基础

C#的数据类型可以分为3类&#xff1a;数值类型、引用类型、指针类型。指针类型仅在不安全代码中使用。值类型包括简单类型&#xff08;如字符型、浮点型和整数型等&#xff09;、集合类型和结构型。引用类型包括类类型、接口类型、代表类型和数组类型。值类型和引用类型的不同之…

用wxpython做ui_wxPython - 如何强制UI刷新?

我把我的问题归结为这篇文章中显示的示例代码。请注意&#xff0c;我没有调用app.MainLoop&#xff08;&#xff09;&#xff0c;因为这不是一个交互式窗口;我希望它在开始时弹出&#xff0c;在工作发生时显示一些进度条&#xff0c;并在完成时消失。wxPython - 如何强制UI刷新…

设置计算机网络密码怎么设置路由器,如何在计算机上设置路由器密码?

问: 如何在计算机上设置路由器密码&#xff1f;A: 在计算机浏览器中&#xff0c;输入路由器的管理地址&#xff0c;打开登录页面&#xff0c;输入登录密码&#xff0c;然后进入设置页面.然后打开无线设置或Wi-Fi设置选项&#xff0c;您可以设置无线密码(wifi密码). 打开此选项可…

hive sql 怎么实现循环_不出办公室就能无水造纸?让废纸“秒循环再生”怎么实现的...

废纸变为再生纸&#xff0c;不出办公室就能循环利用起来&#xff0c;既节省大量木材&#xff0c;还不消耗一滴水……第三届进博会上&#xff0c;首次参展的打印巨头爱普生带来其全球首创的“干纤维纸张循环系统”&#xff0c;环保效果令人赞叹&#xff0c;吸引大批观众前来围观…

用ISAPI方式实现Web页面的自动更新

对于某些网站管理员来说&#xff0c;最痛苦的事情莫过于每天必做的重复工作。譬如&#xff1a;从新闻页面中删除旧的新闻标题&#xff0c;换上新的新闻标题&#xff1b;如果想让读者能看到以前的新闻&#xff0c;还要更改随时间改变的FormField值。等等。用DELPHI编写一个WebSe…

windows下编译firefox

可以自己定制下。估计很简单。。。。。 官方文档扫一遍&#xff1a; https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Build_Instructions 以下是中文相关博客&#xff1a; http://www.cnblogs.com/jianghust/archive/2010/06/14/1758234.html http://blog.…

两头编程,测试中间

最近在做一些开发测试代码的工作&#xff0c;就是为了测试中间业务程序&#xff0c;前头调用程序&#xff0c;后头写挡板程序&#xff0c;说白了就是链路调用&#xff0c;因为复杂度在中间的业务程序&#xff0c;所以前后两端的程序应相对简单。这里就有一个问题&#xff1a;技…

Win32 窗口篇(3)

1.11 如何显示或隐藏窗口的标题栏 使用ModifyStyle方法改变参数来更改窗体样式 void CDemoDlg::OnTest1() {//删除标题栏风格ModifyStyle(WS_CAPTION, 0, SWP_FRAMECHANGED); }void CDemoDlg::OnTest2() {//添加标题栏风格ModifyStyle(0, WS_CAPTION, SWP_FRAMECHANGED); …

linux 消息队列_Linux进程间通信第六讲 标准IPC之消息队列

来源CSDN:CSDN-专业IT技术社区-登录​blog.csdn.net一、概念和原理消息队列是另一种标准IPC,当然也大概遵循大部分标准消息队列,它是存放消息(数据)的队列&#xff0c;而队列是先进先出的线性数据结构换句话说,我们就是利用这个数据结构 进行进程间的通信消息队列允许多个进程同…

15个只有数学老师懂的泪流满面瞬间

全世界只有3.14 % 的人关注了爆炸吧知识「1」大题算了半天&#xff0c;就是跟标准答案对不上「2」一次令人期待的公开课啊啊——啊...「3」这就是传说中美好的协同教研「4」在网上下了一堆 PPT 准备拼到一起「5」预测高考题「6」临下课了还有三道大题没评讲「7」当我以为我已经…

matlab绘制二元一次函数图像_【八上数学】 一次函数必考知识点(下)

【八上数学】《一次函数》必考知识点(中)【八上数学】《函数、一次函数》必考知识点(上)写在前面本讲&#xff0c;我们重点研究一次函数与一元一次方程&#xff0c;不等式&#xff0c;二元一次方程组的问题&#xff0c;帮助同学们解决一些典型问题&#xff0e;一、一次函数与二…

计算机能代替纸笔英语作文,电脑能代替纸笔吗英语作文

电脑能代替纸笔吗英语作文在现实生活或工作学习中&#xff0c;说到作文&#xff0c;大家肯定都不陌生吧&#xff0c;作文可分为小学作文、中学作文、大学作文(论文)。作文的注意事项有许多&#xff0c;你确定会写吗&#xff1f;以下是小编为大家整理的电脑能代替纸笔吗英语作文…

《WinForm开发系列之高级篇》Item2 TCP异步传输

1.AsySocket.cs 代码 publicclassAsySocket {#region私有字段privateSocket mSocket null;privatestringmID "";#endregion#region构造函数publicAsySocket(string_LocalIP, int_LocalPort) { try{ mSocket newSocket(AddressFamily.InterNetwork, SocketType.Stream…