Я разработал веб-сайт, используя Struts2 в качестве контроллера, и интегрировал его с Spring и Hibernate для выполнения бизнес-логики и работы с БД. URI веб-сайта: http://my.domian.com/URI;, который {URI} динамически генерируется администратором. Сопоставление каждого 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, что используется в бизнес-логике или запросах в БД.
Я погуглил об этом и обнаружил, что это действие создается "По запросу". Разве это не так? Если в запросе есть действие, что не так с этим конфликтом или «вещь обнуляемости». Должен ли я сделать что-то похожее на нить в этом действии, кроме резьбы распорок?
Я был бы очень признателен, если бы вы могли помочь мне или указать мне направление.