2

プロジェクトで静的変数を使用して、すべてのサーブレット (1 つの .war ファイルにある) とさまざまな要求のデータを格納することはできますか? (個別のセッションに属するデータではありません)

4

4 に答える 4

1

すべてのサーブレットのデータ

これに使えます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

于 2013-09-29T09:36:07.037 に答える
0

はい、できます。すべてのサーブレット スレッドで静的変数にアクセスできます。ただし、静的変数の使用については、保存するデータの寿命や保存するデータの量などの要因に応じて、適切な決定を下す必要があります。

また、サーブレットのコンテキストで使用されるため、スレッドセーフであることを確認してください。

于 2013-09-29T09:42:07.093 に答える
0

はい、できます。

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>
于 2013-09-29T09:37:38.160 に答える
0

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");
于 2013-09-29T09:37:45.270 に答える