Chinaunix首页 | 论坛 | 博客
  • 博客访问: 14490204
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 21:39:34

下载本文示例代码
  在Web service中通常采用两种公认技术来管理session,一种是借助HTTP和HTTP cookies,另一种是用SOAP headers。Axis能帮你实现这两种技术。  在Web service中没有一种管理session的标准方法,只有两种公认的技术,一种是依靠HTTP和HTTP cookies,另一种,或许也是最重要的一种方法,就是用SOAP headers。Axis能帮助开发人员实现这两种技术。   在Axis中缺省使用的是HTTP managed sessions。在一个服务器中这么做是十分容易的,因为大多数对Axis Web service的管理是通过org.apache.axis.MessageContext的一个实例来完成的。在一个Axis Web service中你可以通过调用MessageContext类中的静态方法来得到MessageContext的一个实例: public class SessionService{public String echo(String in){MessageContext mc =MessageContext.getCurrentContext();  MessageContext中有一个名为setMaintainSession的方法,调用它便可激活session。但在编写(Axis 1.1 RC2)时,session对象只有在被访问时才能激活,如下列代码所示: public class SessionService{public String echo(String in){MessageContext mc = MessageContext.getCurrentContext();Session session = mc.getSession();String name = (String)session.get("name");return in;}}  这样会导致Axis架构生成一个set-cookie header:Set-Cookie: JSESSIONID=49EBBB19A1B2F8D10EE075F6F14CB8C9; Path=/axissessions  客户端需要在Cookie header中返回这个Cookie来保持该session。为了使axis运行状态下的客户端能够实现这一点,就必须调用org.apache.axis.client.Service接口的setMaintainSession方法。该接口是由WSDL2Java生成工具所生成的Locator类实现的。调用该方法之后,Axis架构会自动将该cookie返回到服务器中: public static void main(String[] args){UseSessionsServiceLocator locator = new UseSessionsServiceLocator();locator.setMaintainSession(true);   header看起来就像这样: Cookie: JSESSIONID=49EBBB19A1B2F8D10EE075F6F14CB8C9  通过HTTP传输cookie是没有问题的,但如果客户端或服务器不通过HTTP,或使用的是通过多个Web services传入调用的multihop service,那么这种方法就不那么有效了。一种更好的方法是用SOAP headers来加载session id。   Axis架构支持多个Handlers。通过在一个Web service请求过程中调用调栈(call stack),Handlers能够被放置到很多地方,它可以和传输过程结合起来,或者和一个Web service一起使用。Handlers可以被插入其中来处理Web service请求中的请求和/或响应语句。 共2页。 1 2 :   在Web service中通常采用两种公认技术来管理session,一种是借助HTTP和HTTP cookies,另一种是用SOAP headers。Axis能帮你实现这两种技术。  在Web service中没有一种管理session的标准方法,只有两种公认的技术,一种是依靠HTTP和HTTP cookies,另一种,或许也是最重要的一种方法,就是用SOAP headers。Axis能帮助开发人员实现这两种技术。   在Axis中缺省使用的是HTTP managed sessions。在一个服务器中这么做是十分容易的,因为大多数对Axis Web service的管理是通过org.apache.axis.MessageContext的一个实例来完成的。在一个Axis Web service中你可以通过调用MessageContext类中的静态方法来得到MessageContext的一个实例: public class SessionService{public String echo(String in){MessageContext mc =MessageContext.getCurrentContext();  MessageContext中有一个名为setMaintainSession的方法,调用它便可激活session。但在编写(Axis 1.1 RC2)时,session对象只有在被访问时才能激活,如下列代码所示: public class SessionService{public String echo(String in){MessageContext mc = MessageContext.getCurrentContext();Session session = mc.getSession();String name = (String)session.get("name");return in;}}  这样会导致Axis架构生成一个set-cookie header:Set-Cookie: JSESSIONID=49EBBB19A1B2F8D10EE075F6F14CB8C9; Path=/axissessions  客户端需要在Cookie header中返回这个Cookie来保持该session。为了使axis运行状态下的客户端能够实现这一点,就必须调用org.apache.axis.client.Service接口的setMaintainSession方法。该接口是由WSDL2Java生成工具所生成的Locator类实现的。调用该方法之后,Axis架构会自动将该cookie返回到服务器中: public static void main(String[] args){UseSessionsServiceLocator locator = new UseSessionsServiceLocator();locator.setMaintainSession(true);   header看起来就像这样: Cookie: JSESSIONID=49EBBB19A1B2F8D10EE075F6F14CB8C9  通过HTTP传输cookie是没有问题的,但如果客户端或服务器不通过HTTP,或使用的是通过多个Web services传入调用的multihop service,那么这种方法就不那么有效了。一种更好的方法是用SOAP headers来加载session id。   Axis架构支持多个Handlers。通过在一个Web service请求过程中调用调栈(call stack),Handlers能够被放置到很多地方,它可以和传输过程结合起来,或者和一个Web service一起使用。Handlers可以被插入其中来处理Web service请求中的请求和/或响应语句。 共2页。 1 2 : 下载本文示例代码


在Web Services中管理Sessions在Web Services中管理Sessions在Web Services中管理Sessions在Web Services中管理Sessions在Web Services中管理Sessions在Web Services中管理Sessions在Web Services中管理Sessions在Web Services中管理Sessions在Web Services中管理Sessions在Web Services中管理Sessions在Web Services中管理Sessions在Web Services中管理Sessions在Web Services中管理Sessions在Web Services中管理Sessions在Web Services中管理Sessions
阅读(193) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~