服务请求计数器在JAX-RS(Jersey)Web服务中没有增加

时间:2014-01-16 00:18:50

标签: java rest servlets

免责声明:这只是我正在运行的测试,而不是试图获得可靠的请求服务。

由于Jersey建立在servlet之上,我假设servlet在所有请求之间共享。所以我写了一个非常基础的课程:

@Path("/id")
public class TestIdGeneration {

    private AtomicInteger counter = new AtomicInteger();

    @GET
    @Produces("text/plain")
    public Response serveRequest() {
        Response.ResponseBuilder response = Response.ok(String.valueOf(counter.incrementAndGet()));
        return response.build();
    }
}

我假设每次GET请求都会将计数器更新一次。但是evertime我发出get请求我得到了值1.我检查了响应标头以确保请求没有被缓存。以下是完整的响应标题:

Status Code: 200 OK
Connection: close
Content-Type: text/plain
Date: Thu, 16 Jan 2014 00:12:43 GMT
Server: Apache
Transfer-Encoding: chunked

为什么计数器不会随每个GET请求更新?

1 个答案:

答案 0 :(得分:2)

来自jax-rs documentation

  

默认情况下,根资源类的生命周期是每个请求,   即每个都创建一个新的根资源类实例   请求URI路径与根资源匹配的时间。

因此,由于为每个请求创建了一个新实例,因此预计会报告该行为。请尝试将您的计数器声明为static