为每个传入请求重置 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。
我 运行 遇到这样一种情况,即在处理传入的 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。