Я столкнулся с ситуацией, когда значение счетчика продолжает увеличиваться при обработке входящего HTTP-запроса, а не на 0. Оно действует как переменная класса вместо переменной экземпляра. Интересно, что это b/c, как только экземпляр класса Foo создается впервые, а затем для следующего раунда запроса создается поток для одного и того же экземпляра. Кажется бессмысленным иметь переменную «counter» в качестве переменной экземпляра. Я должен сделать это как локальную переменную в методе doPost, если я хочу сбросить ее до нуля, как только процесс входящих данных будет завершен для следующего раунда входящего запроса. Есть ли лучший способ справиться с этой ситуацией как часть переменной класса?сбрасывать переменную экземпляра для класса сервлета для каждого входящего запроса
public class Foo extends HttpServlet {
private int counter = 0;
protected void doPost(.....) throws Exception {
// process incoming request data
// increment counter by one
counter++;
......
}
}
Спецификация сервлета явно рекомендует, чтобы сервлеты были без гражданства, чтобы избежать этой проблемы. Почему вы поддерживаете счетчик в первую очередь? Это звучит как [вопрос XY] (http://meta.stackexchange.com/a/66378). –
@Tom G: Я не понимал, что значение stateless для класса сервлета. Теперь я это делаю. Спасибо за ваше объяснение! – DaeYoung