Jax-WS Web服务如何工作?每个请求一个端点?

时间:2013-12-19 08:57:09

标签: java web-services jax-ws

我正在尝试了解Jax-WS Web服务如何工作,但无法找到有关它们细节的任何资源。举例来说:

我使用Jax-WS注释创建了一个非常简单的Java Web服务,如此

@WebService(name = "MyService", serviceName = "MyService", portName = "MyServicePort")
public class MyService {

    private int val;

    public MyService() {
        val = 0;
    }

    @WebMethod(action = "setVal")
    public void setVal(@WebParam(name = "arg") int arg) {
        val = arg;
    }

    @WebMethod(action = "getVal")
    public int getVal() {
        return val;
    }
}

如果我从中生成一个Web服务(比如使用WS-Gen),请构建一个客户端并从单个客户端进行以下调用:setVal(5)getVal(),将返回什么值对客户?为什么呢?

如果客户端A呼叫setVal(5),而客户端B呼叫getVal(),那么将向客户端返回什么值?为什么?

当然,我可以自己构建一个Web服务并对其进行测试,但我希望能够通过探索来解决问题。 Jax-Ws是否为每个请求创建了带注释类的新实例?它是否以某种方式将相同的源映射到相同的带注释的类实例?它只是将所有请求映射到带注释的类的单例实例吗?是否存在以某种方式选择的有限注释类实例池?

1 个答案:

答案 0 :(得分:6)

由于底层HTTP协议,Web服务默认是无状态的。服务器将每个Web服务请求处理为新的交互,即使它来自同一客户端

  

通常,JAX-WS Web服务是无状态的:也就是说,没有   您在Web服务中设置的局部变量和对象值   对象从一次调用保存到下一次。甚至顺序   来自单个客户的请求被视为独立的,   无状态方法调用。

     

有一些Web服务用例,客户端可能希望保存数据   在一次调用期间在服务上,然后在一次调用期间使用该数据   后续调用。例如,购物车对象可以是   通过重复调用addToCart web方法然后添加   由getCart Web方法获取。在无状态Web服务中,   购物车对象总是空的,无论多少   调用了addToCart方法。但是通过使用HTTP Sessions进行维护   通过Web服务调用状态,可以构建购物车   递增,然后返回客户端。

     

在JAX-WS Web服务中启用有状态支持需要极少的支持   客户端和服务器上的编码量。

http://docs.oracle.com/cd/E17904_01/web.1111/e13734/stateful.htm