Как долго можно ожидать сохранения экземпляра сервлета Java?Один и тот же экземпляр обслуживает всех клиентов?Может ли быть несколько экземпляров? - PullRequest
0 голосов
/ 08 сентября 2011

Я пытаюсь понять жизненный цикл Java-сервлета.

Как долго можно ожидать сохранения экземпляра сервлета Java? Насколько это надежно? Один и тот же экземпляр обслуживает всех клиентов? Или несколько клиентов могут порождать несколько экземпляров одного и того же класса сервлетов? Есть ли способ принудительной гарантии того, что один и тот же экземпляр сервлета сохраняется вечно (до тех пор, пока сервер включен) и что тот же самый экземпляр сервлета обслуживает всех клиентов? Или это уже гарантировано?

Ответы [ 2 ]

3 голосов
/ 08 сентября 2011

Существует только один экземпляр класса сервлета, и это гарантировано спецификацией.

Но вы не должны ничего хранить в полях экземпляра сервлета. Это не потокобезопасный, по крайней мере:

  • если вам нужно что-то для каждого запроса, сохраните его как атрибут запроса
  • если вам нужно что-то глобальное, сохраните его как атрибут ServletContext
0 голосов
/ 08 сентября 2011

У вас есть один экземпляр, обслуживающий все запросы к этому сервлету.Следовательно, он должен быть запрограммирован reentrant способом (это не потокобезопасно).

Теперь вы должны понимать, как работают потоки в сервлетах, чтобы понять всю картину.

Изначально существовал SingleThreadModelInterface , но устарел, когда разработчики обнаружили, что сериализация запросов не очень хорошая производительность;)

Наконец, веб-серверы обычно имеют пул потоков, и они перерабатываютсяв модели «Поток на соединение».В последнее время это заменяется на «Поток на запрос» и асинхронную обработку.

...