Я разработал веб-сайт, используя Struts2 в качестве контроллера, и интегрировал его с Spring и Hibernate для выполнения бизнес-логики и работы с БД. URI веб-сайта: http://my.domian.com/URI; который {URI} создается динамически с помощью административной cms. Сопоставление каждого uri с сервлетом выполняется с помощью Apache mod_rewrite следующим образом:
RewriteCond %{HTTP_HOST} ^www\.domain\.com
RewriteRule ^([a-zA-Z0-9_-]+)$ /dynamic\.action?f=$1 [QSA,L]
(Перед любой дополнительной информацией, является ли это хорошим и подходящим подходом?)
Конфигурация распорок является типично академической, так как:
<package name="Default" extends="struts-default" namespace="/">
...
<action name="dynamic" class="DynamicContentAction">
<result name="index">/content/web/dynamic/index.jsp</result>
</action>
</package>
DynamicContentAction расширяет ActionSupport и реализует ServletRequestAware, ServletContextAware. Я проверяю пару вещей (например, текущий язык посещения, который идентифицируется как поддомен), ищу в базе данных, является ли запрошенный uri допустимым или нет, генерирую содержимое этого uri и устанавливаю пару глобальных переменных времени выполнения ( например, текущий идентификатор страницы посещения, конфигурация макета из-за текущего языка посещения ...) и поместите его в объект запроса в этом сервлете.
Все выглядит хорошо и даже работает отлично, если только один пользователь не запрашивает слишком много динамических страниц одновременно. «Слишком много» в моем случае — это минимум 9-10 страниц. В этом случае он выбрасывает исключения, разные! Иногда запрос HttpServletRequest имеет значение null, иногда ServletContext servletContext имеет значение null, иногда это нормально, но переменные времени выполнения имеют значение null, которое используется в бизнес-логике или запросах к базе данных.
Я погуглил об этом и узнал, что это действие создается «на запрос». Разве это не так? Если есть действие для каждого запроса, что не так с этим конфликтом или «обнуляемостью». Должен ли я делать что-то похожее на нить в этом действии, кроме резьбы распорок?
Я был бы очень признателен, если бы вы могли мне помочь или указать мне направление.