Что происходит с простыми старыми объектами Java, когда они используются веб-приложением несколькими пользователями? - PullRequest
2 голосов
/ 05 декабря 2011

Я пытаюсь создать простое сервисное приложение.Я использую браузер в качестве точки входа, сервлет в качестве получателя запроса и пару вспомогательных Java-классов.Например, у меня есть пользователь A, который использует приложение одновременно с пользователем B.

Теперь мой вопрос: что происходит с вспомогательными классами, когда несколько пользователей получают доступ к сервису?Они создаются каждый раз, когда пользователь использует приложение?5 пользователей, они (вспомогательные классы) получают экземпляры 5 раз или для всех пользователей есть только одна копия всего?

Ответы [ 4 ]

2 голосов
/ 05 декабря 2011

Это зависит от того, когда и где вы создаете эти POJO. Если вы создаете их экземпляры в doGet или doPost, то вы создаете новые экземпляры этих объектов при каждом запросе (и удаляете их после того, как на запрос был получен ответ). Теперь, если вы «ленивые» создаете их экземпляры в более длинной области памяти (сеанс и т. Д.), То вы сохраняете их дольше (например, для области сеанса в течение всего срока действия сеанса).

1 голос
/ 06 декабря 2011

Ваши вспомогательные классы должны быть одиночными. Таким образом, и userA, и userB будут использовать один и тот же экземпляр, а не создавать его дважды.

1 голос
/ 05 декабря 2011

Я думаю, вам нужно сначала вернуться и прочитать об экземплярах классов и их жизненном цикле в Java.А чтобы быть более конкретным в вашей ситуации, предоставьте фрагменты кода.Это будет зависеть от того, как вы создадите свои вспомогательные классы, о 3 возможных вариантах:

1- Обычный вспомогательный класс

В этом случае вы просто вызываете Helper h = new Helper(); и простовызывайте действия для ваших вспомогательных классов h.doHelp(param) - каждый раз, когда ваш сервлет вызывает это, он создает новый экземпляр класса Helper.Если, конечно, ваш вспомогательный класс не использует какие-либо статические переменные.

2 - Singleton

Когда вы реализуете свой класс Helper как Singleton, а ваш сервлет называет его так, как создается Singleton, например, Helper h = Helper.getInstance()Если вы делаете это таким образом, то каждый запрос к сервлету разделяет один и тот же экземпляр класса Hepler

3 - Статический класс

Если ваш вспомогательный класс просто использует статические методы, например.Helper.doHelp(param); тогда также нет разделения между различными запросами, если, конечно, ваш вспомогательный класс не использует статические переменные.

1 голос
/ 05 декабря 2011

Простой ответ заключается в том, что всякий раз, когда вы используете new YourClasseName(), вы создаете новый объект.

Так как контейнер сервлета распределяет поток для каждого нового запроса для одного сервлета (если вы не сделали каких-то специальных изменений), то, проще говоря, 5 пользователей = 5 потоков = 5 вызовов для создания ваших pojos. Это означает, что ваши объекты создаются 5 раз.

...