为每个传入请求重置 servlet class 的实例变量

reset instance variable for a servlet class for each incoming request

我 运行 遇到这样一种情况,即在处理传入的 http 请求时计数器的值不断增加,而不是设置为 0。它的行为类似于 class 变量而不是实例变量。我想知道它是 b/c 一旦第一次创建 Foo class 的实例,然后为下一轮请求创建一个线程为其相同的实例。将 "counter" 变量作为实例变量似乎毫无意义。如果我想在下一轮传入请求的传入数据处理完成后将其重置为零,我应该将其作为 doPost 方法中的局部变量。作为 class 变量的一部分,有没有更好的方法来处理这种情况?

public class Foo extends HttpServlet {
    private int counter = 0; 

    protected void doPost(.....) throws Exception {
        // process incoming request data
        // increment counter by one
        counter++;
        ......
    }
 }

我不明白你到底要实现什么,但通常你应该避免在 servlet 对象中保留任何状态。使用 request.getAttribute()、request.setAttribute()、request.getSession().getAttribute() 或 request.getSession().setAttribute()。或者,您可以在 jsf 或 spring 中使用请求范围或会话范围的 bean。