WebService会话Session的管理

简介: 1、新建Session的WebService测试代码,代码很简单。就是记录用户登录的状态信息,放在MessageContext的ServiceContext中。代码如下: 代码package com.

1、新建Session的WebService测试代码,代码很简单。就是记录用户登录的状态信息,放在MessageContext的ServiceContext中。代码如下:

img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.gif 代码 package com.hoo.service; import org.apache.axis2.context.MessageContext; import org.apache.axis2.context.ServiceContext; /** * function:WebService Session会话消息 * @author hoojo * @createDate 2011-3-8 下午04:11:27 * @file LoginService.java * @package com.hoo.service * @project Axis2WebService * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */ public class LoginService { public boolean login(String userName, String password) { MessageContext context = MessageContext.getCurrentMessageContext(); ServiceContext ctx = context.getServiceContext(); 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(); ServiceContext ctx = context.getServiceContext(); return ctx.getProperty("userName") "#" ctx.getProperty("msg"); } }

这里保存Session信息的主要是通过MessageContext这个上下文来获取ServiceContext的上下文,然后通过setProperty来保存session的信息,通过getProperty来获取session信息。

Session的作用可以在使用WebService登录的时候,保存用户的登录状态或是会话消息。但是使用session需要设置发布Service的时候,设置WebService的作用域。作用域默认是request,它还有另外三个值,分别是:application、soapsession、transportsession;我们可以选择使用transportsession和application分别实现同一个WebService类和跨WebService类的会话管理。

2、使用axis2的工具生成aar文件,并发布LoginService服务。

clip_image002

关于这里发布LoginService的步骤就不一一介绍,上面已经有说过了。当你用这个步骤发布WebService的时候,你可以打开压缩文件的方式aar文件(其实不一定要用aar文件,只是官方推荐的aar,jar文件也是可以的),在META-INF目录下有一个services.xml文件,看到它的这个标签,没有设置scope属性。

clip_image004

scope默认的是request,我们得修改services.xml的内容。

修改后services.xml内容如下:

img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.gif 代码 service name="LoginService" scope="transportsession"> description> Please Type your service description here description> messageReceivers> messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /> messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> messageReceivers> parameter name="ServiceClass">com.hoo.service.LoginServiceparameter> service>

这个地方的scope是关键,如果这里不设置的话session是无法存放信息。

3、用控制台Dos命令发布WebService

这个是手工打包,也就是我们经常用的jar命令

首先我们得需要一个services.xml文件,文件内容如上面的。

"LoginService" scope="transportsession">

name是当前发布WebService的名称,scope是会话作用域。保存在Session中就要用这个transportsession这个作用域。

"ServiceClass">com.hoo.service.LoginService

这个是当前Service的类路径,包名 类名

"http://www.w3.org/2004/08/wsdl/in-only"

class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>

"http://www.w3.org/2004/08/wsdl/in-out"

class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>

这个应该是参数和返回值信息的解析类,in-only是输入也就是参数,in-out是输出也就是返回值。

A、 首先,我们在C盘下新建一个sessionService的目录,然后将上面的services.xml文件中的ServiceClass的类的class文件copy到这个目录下,注意要带上package目录,然后在sessionService目录下新建一个META-INF将上面的services.xml文件放到这个目录下

B、 然后运行cmd进入控制台,进入sessionService这个目录,键入命令如下:

jar cvf service.aar .

clip_image006

service.aar是打包后的文件名称,.是指代当前目录

如果你不懂jar命令,你可以输入jar会有命令语法的提示

clip_image008

进入sessionService这个目录中,你可以看到service.aar文件就有了。然后将这个文件copy到axis2的WEB-INF目录下的services目录中,也就是

[tomcat-home]\webapps\axis2\WEB-INF\services

然后可以通过:http://localhost:8080/axis2/services/listServices

就可以查看刚才发布的服务了。

这样就完成手工发布打包发布WebService了

C、 编写WebService客户端的请求代码

img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.gif 代码 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; /** * function:LoginService Session客户端代码 * @author hoojo * @createDate 2011-3-9 上午11:21:59 * @file LoginServiceClient.java * @package com.hoo.service * @project Axis2WebService * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */ public class LoginServiceClient { public static void main(String[] args) throws AxisFault { String target = "http://localhost:8080/axis2/services/LoginService"; //target = "http://localhost:8080/axis2/services/MyLoginService"; 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]); } }

执行后,结果如下:

true

admin#登陆成功

上面要说明的是options.setManageSession(true);是开启对Session管理的支持

目录
相关文章
|
网络架构
WebService大讲堂之Axis2(5):会话(Session)管理
本文为原创,如需转载,请注明作者和出处,谢谢!上一篇:WebService大讲堂之Axis2(4):二进制文件传输 WebService给人最直观的感觉就是由一个个方法组成,并在客户端通过SOAP协议调用这些方法。
838 0
|
Java 应用服务中间件 C#
WebService大讲堂之Axis2(6):跨服务会话(Session)管理
本文为原创,如需转载,请注明作者和出处,谢谢! 上一篇:WebService大讲堂之Axis2(5):会话(Session)管理     用Axis2实现Web Service,虽然可以将POJO类放在axis2/WEB-INF/pojo目录中直接发布成Web Service,这样做不需要进行任何配置,但这些POJO类不能在任何包中。
960 0
|
4月前
|
XML Java 应用服务中间件
WebService - Axis2基于JAX-WS开发WebService并发布多个WebService
WebService - Axis2基于JAX-WS开发WebService并发布多个WebService
36 0
|
4月前
|
Java 应用服务中间件 Spring
WebService - Axis2使用services.xml进行开发server与client(未与Spring整合)
WebService - Axis2使用services.xml进行开发server与client(未与Spring整合)
44 0
|
4月前
|
Java 应用服务中间件 Spring
WebService - CXF开发Server和Client(main方法测试)
WebService - CXF开发Server和Client(main方法测试)
40 0
|
Java Android开发
哇!eclipse+webservice开发实例居然这样写(有源码可用)
哇!eclipse+webservice开发实例居然这样写(有源码可用)
107 0
哇!eclipse+webservice开发实例居然这样写(有源码可用)
|
Java 应用服务中间件 Apache
webservice开发不得不知的细节,Error creating bean with name ‘org.apache.cxf.jaxws.EndpointImpl---1987203924‘
webservice开发不得不知的细节,Error creating bean with name ‘org.apache.cxf.jaxws.EndpointImpl---1987203924‘
125 0
|
缓存 应用服务中间件 数据库
python web service开发
记录第一个web python服务
9819 0
python web service开发