Хобрук: Ваш путь к мастерству в программировании

сбросить переменную экземпляра для класса сервлета для каждого входящего запроса

Я столкнулся с ситуацией, когда значение счетчика продолжает увеличиваться при обработке входящего HTTP-запроса, а не устанавливается на 0. Он действует как переменная класса, а не как переменная экземпляра. Интересно, это b/c, когда экземпляр класса Foo создается в первый раз, а затем для следующего раунда запроса создается поток для того же экземпляра. Кажется бессмысленным иметь переменную «счетчик» в качестве переменной экземпляра. Я должен сделать это как локальную переменную в методе 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. 23.03.2015
  • @Tom G: я не понимал, что означает безгражданство для класса сервлетов. Теперь я знаю. Спасибо за ваше объяснение! 23.03.2015

Ответы:


1

Я не понимаю, чего именно вы собираетесь достичь, но в целом вам следует избегать сохранения какого-либо состояния в объектах сервлета. Используйте request.getAttribute(), request.setAttribute(), request.getSession().getAttribute() или request.getSession().setAttribute(). В качестве альтернативы вы можете использовать bean-компоненты с областью действия запроса или сеанса, например, jsf или spring.

23.03.2015
  • Я буду иметь в виду... избегайте сохранения какого-либо состояния в объектах сервлета... Спасибо! 23.03.2015
  • Новые материалы

    Краткое руководство для начинающих по простому сквозному тестированию с помощью Cypress
    Автоматизированное тестирование, требующее только базовых навыков JavaScript. Цель этой статьи - показать, как с минимальными усилиями вы можете добавить полезные сквозные (E2E) тесты в свой..

    Руководство по быстрой разработке рекомендательной системы промышленного уровня
    В этой статье я намерен предоставить краткий обзор методов, которые можно использовать для разработки хорошо работающей рекомендательной системы. Я начал работать над Recommender Systems около 6..

    Arshaw FullCalendar для AngularJS — проблемы, с которыми столкнулись, и найденные решения для их устранения
    Arshaw FullCalendar — это полноразмерный календарь событий с возможностью перетаскивания, использующий jQuery. Подробнее об этом можно узнать здесь . Директива ui-calendar — это полная..

    Простое руководство по Redux для разработчиков React
    Понимание строительных блоков Redux Redux — это инструмент управления состоянием, который чаще всего используется с React или React Native. Когда я впервые начал использовать его год назад,..

    присоединение к атрисмаркетингу
    присоединение к атрисмаркетингу И много дополнительных привилегий. маркетинг — реклама-хорошие отзывы клиентов-доверие-счастье-лояльность и опытные сотрудники устойчивые лесозаготовительные..

    КОВАРИАНТНОСТЬ И КОРРЕЛЯЦИЯ
    ВВЕДЕНИЕ В этом посте мы обсудим ковариацию и корреляцию. Это играет важную роль при выборе функций. Статистические корреляции говорят нам как о силе связи между двумя переменными, так..

    Использование матриц Вигнера в случаях машинного обучения, часть 8
    Равномерный локальный закон для матриц Вигнера (arXiv) Автор: Джорджо Чиполлони , Ласло Эрдеш , Доминик Шредер . Аннотация: Мы доказываем общий локальный закон для матриц Вигнера, который..