Session.java代码如下:
import java.util.Enumeration;
public interface Session{
public Object get(String key);
public void set(String key, Object value);
public void remove(String key);
public Enumeration getKeys();
public void setTimeout(int timeout);
public int getTimeout();
public void touch();
public void invalidate();
public Object getLockObject();
}
SimpleSession.java代码如下:
import java.util.Enumeration;
import java.util.Hashtable;
public class SimpleSession implements Session {
private Hashtable rep = null;
private int timeout = -1;
private long lastTouched;
public SimpleSession(){
lastTouched = System.currentTimeMillis();
}
public Object get(String key){
if (rep == null){
return null;
}
lastTouched = System.currentTimeMillis();
return rep.get(key);
}
public void set(String key, Object value){
synchronized (this) {
if (rep == null){
rep = new Hashtable();
}
}
lastTouched = System.currentTimeMillis();
rep.put(key, value);
}
public void remove(String key){
if (rep != null){
rep.remove(key);
}
lastTouched = System.currentTimeMillis();
}
public Enumeration getKeys() {
if (rep != null){
return rep.keys();
}
return null;
}
public void setTimeout(int timeout){
this.timeout = timeout;
}
public int getTimeout(){
return timeout;
}
public void touch() {
lastTouched = System.currentTimeMillis();
}
public void invalidate() {
rep = null;
lastTouched = System.currentTimeMillis();
timeout = -1;
}
public long getLastAccessTime(){
return lastTouched;
}
public synchronized Object getLockObject() {
if (rep == null) {
rep = new Hashtable();
}
return rep;
}
}
【注】:上述代码就是在WebService的应用中的Session管理代码。
--------------------------------------------------------------------------------------------------
随机生成一个SessionID的值:
SessionUtils.java代码如下:
import org.apache.axis.components.logger.LogFactory;
import org.apache.commons.logging.Log;
import java.util.Random;
public class SessionUtils {
protected static Log log = LogFactory.getLog(SessionUtils.class.getName());
protected static final int SESSION_ID_BYTES = 16;
protected static Random random = null;
protected static String randomClass = "java.security.SecureRandom";
private static String thisHost = null;
public static synchronized String generateSessionId() {
byte bytes[] = new byte[SESSION_ID_BYTES];
getRandom().nextBytes(bytes);
StringBuffer result = new StringBuffer();
for (int i = 0; i < bytes.length; i++) {
byte b1 = (byte) ((bytes[i] & 0xf0) >> 4);
byte b2 = (byte) (bytes[i] & 0x0f);
if (b1 < 10) {
result.append((char) ('0' + b1));
} else {
result.append((char) ('A' + (b1 - 10)));
}
if (b2 < 10) {
result.append((char) ('0' + b2));
} else {
result.append((char) ('A' + (b2 - 10)));
}
}
return (result.toString());
}
public static synchronized Long generateSession() {
return new Long(getRandom().nextLong());
}
private static synchronized Random getRandom() {
if (random == null) {
try {
Class clazz = Class.forName(randomClass);
random = (Random) clazz.newInstance();
} catch (Exception e) {
random = new java.util.Random();
}
}
return (random);
}
}
转载自:http://blog.sina.com.cn/s/blog_59754a020100ws7x.html
相关推荐
在Web服务开发中,Session管理是一项关键任务,特别是在涉及多个相关服务的复杂系统中。跨服务Session管理允许不同Web服务之间共享用户的状态信息,确保在整个应用流程中用户的一致性体验。本文将深入探讨在Axis2...
在使用ASP.NET WebService时,有时会遇到与ASP.NET_SessionId相关的问题,尤其是在涉及会话状态管理的情况下。 ASP.NET_SessionId是一个由ASP.NET生成的唯一标识符,用于跟踪用户的会话状态。在用户首次访问网站或...
这可能需要服务之间共享某种形式的状态存储,例如,将session ID作为业务流程的一部分进行传递,或者利用全局的session管理服务。 **总结** 在JAX-WS中实现会话保持涉及到服务器端的session获取与管理,以及客户端...
这个实例为开发者提供了一个实践机会,学习如何在Web服务中实现Session管理,这对于那些需要在多个调用之间保持用户状态的应用来说是至关重要的。通过这个项目,你可以了解到如何将传统Web开发中的Session概念应用于...
标题中的“在自己的项目中利用axis2+spring发布webservice与客户端调用包括session”指出的是一个关于在实际项目开发中如何使用Axis2和Spring框架来发布Web服务,并且涉及了Web服务客户端调用以及会话(session)...
泛微OA e-cology 8 最新webservice接口文档提供了一系列的webservice接口,用于对系统中的文档进行操作,包括创建文档、删除文档、更新文档、查看文档等。这些接口可以通过webservice调用,实现对文档的管理和操作。...
为了解决这个问题,可以使用`SQL Server`或`State Server`等集中式Session管理模式。 #### 为何`Application_OnAcquireRequestState`事件不起作用? `Application_OnAcquireRequestState`事件只在`HttpApplication...
Session Bean是Enterprise JavaBeans (EJB)的子类型,主要负责管理单个用户的会话状态。它们可以是无状态的(Stateless Session Beans),意味着每个方法调用都是独立的,不保存任何会话信息,或者有状态的...
Axis WebService会话Session的管理 Axis用控制台Dos命令发布WebService Axis跨多个WebService管理Session Axis用Spring的JavaBean发布WebService Axis异步调用WebService Axis 的Module模块 Axis使用SoapMonitar监视...
4. **WebService会话管理**:会话管理在保持用户状态和服务交互连续性方面至关重要,课程会介绍如何在Axis2中实现和维护会话。 5. **Axis2模块**:模块是Axis2中的一个重要概念,它们允许你扩展Axis2的功能,比如...
此外,“以及session的管理”暗示了这个例子还会涉及如何在Web服务上下文中处理会话,这对于那些需要维持用户状态或进行跨请求跟踪的应用来说至关重要。 在集成Axis2和Spring时,通常会使用Spring的...
5. "会话(Session)管理":在Web服务中,跨请求保持状态是一个挑战。这一集讨论了如何管理和维护跨服务会话,这对于实现有状态的服务至关重要。 6. "跨服务会话(Session)管理":进一步深入会话管理,包括如何在不同...
7. **跨服务会话管理:** 通过Axis2,可以实现跨服务的会话(Session)管理,确保在分布式环境中维持用户状态,这对于需要用户上下文的服务尤其重要。 8. **二进制文件传输:** Axis2支持二进制数据的传输,如图片...
**WebService会话Session管理** - Axis2支持在不同Web服务间管理会话,这对于需要跨服务共享状态的应用程序非常重要。 **控制台命令发布WebService** - 通过命令行工具,如`wsdl2java`和`java2wsdl`,可以在没有...
3. **Session管理**:在分布式环境中,Axis2支持会话管理,确保跨多个WebService调用时的数据一致性。 4. **使用Spring的JavaBean发布WebService**:结合Spring框架,可以方便地将JavaBean转换为可发布的WebService...
例如,通过在WebService中暴露NHibernate Session,客户端可以通过调用相应的方法执行CRUD操作。 7. BJCreation.Windows.DataUpLoad:根据压缩包内的文件名,我们可以推测这是一个Windows平台上的数据上传服务。在...
最后,关于"webservice"标签,虽然本篇主要讨论的是Web应用的Session共享,但Web服务(如RESTful API)也可以采用类似的Session管理策略。如果Web服务需要处理与用户状态相关的请求,可以考虑将Session信息作为请求...