контроллер действий Struts - многопоточный? - PullRequest
1 голос
/ 20 сентября 2008

когда говорят, что контроллер действий в структуре Struts является многопоточным, означает ли это, что существует несколько экземпляров сервлета, принимающих запрос и направляющих его в модель. ИЛИ это означает, что есть один экземпляр, принимающий все запросы? Любые визуальные эффекты будут оценены

Ответы [ 3 ]

1 голос
/ 29 апреля 2009

см. http://struts.apache.org/1.x/userGuide/building_controller.html

Сервлет контроллера Struts создает только один экземпляр вашего класса Action и использует этот один экземпляр для обслуживания всех запросов. Таким образом, вам нужно написать потокобезопасные классы действий. Следуйте тем же рекомендациям, которые вы использовали бы для написания многопоточных сервлетов. Вот два основных правила, которые помогут вам написать масштабируемые, поточно-ориентированные классы Action:

  • Использовать только локальные переменные - Самый важный принцип, который помогает в поточно-ориентированном кодировании, - это использовать только локальные переменные, не переменные экземпляра , в вашем классе Action. Локальные переменные создаются в стеке, который назначается (вашей JVM) каждому потоку запросов, поэтому вам не нужно беспокоиться об их совместном использовании. Действие может быть разделено на несколько локальных методов, если все необходимые переменные передаются как параметры метода. Это обеспечивает безопасность потока, поскольку JVM обрабатывает такие переменные внутренне, используя стек вызовов, связанный с одним потоком.

  • Сохранение ресурсов - Как правило, распределение дефицитных ресурсов и хранение их между запросами одного и того же пользователя (в сеансе пользователя) может вызвать проблемы с масштабируемостью. Например, если ваше приложение использует JDBC и вы выделяете отдельное соединение JDBC для каждого пользователя, вы, вероятно, столкнетесь с некоторыми проблемами масштабируемости, когда ваш сайт неожиданно появится в Slashdot. Вы должны стремиться использовать пулы и высвобождать ресурсы (например, соединения с базой данных) перед передачей управления соответствующему компоненту View - даже если вызванный вами метод bean-компонента выдает исключение.

1 голос
/ 12 сентября 2010

распорки 1 не безопасны для потоков; но что касается strus 2, это один экземпляр на запрос.

1 голос
/ 20 сентября 2008

Как и для большинства других сервлетов, для обработки каждого запроса создается отдельный поток. Вы должны реализовать интерфейс SingleThreadedModel, чтобы получить новый экземпляр сервлета для каждого запроса.

...