Struts2 をコントローラーとして使用して Web サイトを開発し、それを Spring および Hibernate と統合して、ビジネス ロジックと DB の処理を行いました。Web サイトの 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]
(さらに情報を得る前に、これは適切で適切なアプローチですか?)
Struts 構成は、次のような一般的なアカデミックなものです。
<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 のコンテンツを生成し、いくつかのランタイム グローバル変数を設定しています (現在訪問しているページ ID、現在訪問している言語によるレイアウト構成など...) をこのサーブレットの Request オブジェクトに配置します。
1 人のユーザーが同時に要求する動的ページが多すぎる場合を除き、すべてが適切に表示され、完全に機能することさえあります。私の場合、「Too Many」は少なくとも 9 ~ 10 ページです。この場合、別の例外がスローされます。HttpServletRequest リクエストが null の場合もあれば、ServletContext servletContext が null の場合もあれば、問題ない場合もありますが、ランタイム変数は null であり、ビジネス ロジックまたはデータベース クエリで使用されます。
私はそれについてグーグルで調べたところ、このアクションが「リクエストごと」にインスタンス化されていることがわかりました。そうじゃない?リクエストごとにアクションがある場合、この競合または「nullability の問題」の何が問題になっていますか。ストラットのスレッド化を超えて、そのアクションでスレッドのようなことを行う必要がありますか?
あなたが私を助けてくれたり、方向性を教えてくれたりしたら、とてもありがたいです。