Pau*_*aul 3 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;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我从中生成一个Web服务(比如说使用WS-Gen),那么构建一个客户端并从单个客户端进行以下调用:setVal(5),getVal()将返回给客户端的值是什么?为什么?
如果客户端A呼叫setVal(5),而客户端B呼叫getVal(),将返回给客户端的值是什么?为什么?
当然,我可以自己构建一个Web服务并对其进行测试,但我希望能够通过探索来解决问题.Jax-Ws是否为每个请求创建了带注释类的新实例?它是否以某种方式将相同的源映射到相同的带注释的类实例?它只是将所有请求映射到带注释的类的单例实例吗?是否存在以某种方式选择的有限注释类实例池?
由于底层HTTP协议,Web服务默认是无状态的.服务器将每个Web服务请求处理为新的交互,即使它来自同一客户端
通常,JAX-WS Web服务是无状态的:也就是说,您在Web服务对象中设置的局部变量和对象值都不会从一次调用保存到下一次调用.甚至来自单个客户端的顺序请求也被视为独立的无状态方法调用.
存在Web服务用例,其中客户端可能希望在一次调用期间在服务上保存数据,然后在后续调用期间使用该数据.例如,可以通过重复调用addToCart Web方法添加购物车对象,然后通过getCart Web方法获取.在无状态Web服务中,无论调用多少个addToCart方法,购物车对象都将始终为空.但是通过使用HTTP会话来维护Web服务调用的状态,可以逐步构建购物车,然后将其返回给客户端.
在JAX-WS Web服务中启用有状态支持需要在客户端和服务器上进行最少量的编码.
http://docs.oracle.com/cd/E17904_01/web.1111/e13734/stateful.htm