プロジェクトで静的変数を使用して、すべてのサーブレット (1 つの .war ファイルにある) とさまざまな要求のデータを格納することはできますか? (個別のセッションに属するデータではありません)
4 に答える
すべてのサーブレットのデータ
これに使えますServletContext
。
ファイルの MIME タイプの取得、リクエストのディスパッチ、ログ ファイルへの書き込みなど、サーブレットがサーブレット コンテナと通信するために使用する一連のメソッドを定義します。
Java 仮想マシンごとに「Web アプリケーション」ごとに 1 つのコンテキストがあります。(「Web アプリケーション」とは、サーバーの URL 名前空間の特定のサブセット (/catalog など) にインストールされ、場合によっては .war ファイルを介してインストールされるサーブレットとコンテンツのコレクションです。)
例: web.xml
<context-param>
<param-name>param</param-name>
<param-value>Myname is web xml</param-value>
</context-param>
サーブレットで
public class ParameterServlet extends HttpServlet {
---
public void init(ServletConfig config) throws ServletException {
super.init(config);
ServletContext context = getServletContext();
name= context.getInitParameter("param");
}
オブジェクトの場合
設定
getServletContext().setAttribute("myObj", obj);
取得
MyObj attribute = (MyObj)getServletContext().getAttribute("myObj");
からこれらのオブジェクトにアクセスできますservlets
。
はい、できます。すべてのサーブレット スレッドで静的変数にアクセスできます。ただし、静的変数の使用については、保存するデータの寿命や保存するデータの量などの要因に応じて、適切な決定を下す必要があります。
また、サーブレットのコンテキストで使用されるため、スレッドセーフであることを確認してください。
はい、できます。
web.xml
ただし、を使用してこれらの定数を定義することをお勧めします<context-param> tag
。
<context-param> tag
サーブレットは、次の呼び出しを使用して定義された定数を取得できます。
context.getInitParameter()
の名前と値のペアの例web.xml
:
<context-param>
<param-name>name</param-name>
<param-value>Joe</param-value>
</context-param>
<context-param>
<param-name>password</param-name>
<param-value>password</param-value>
</context-param>
web.xml で定義できます
<context-param>
<description>My variable</description>
<param-name>variable.name</param-name>
<param-value>value</param-value>
</context-param>
そして、サーブレット コードからアクセスします。
String variable = getServletContext().getInitParameter("variable.name");