目次
1) GenericServlet が提供する getServletContext() メソッドを介して
2) ServletConfig が提供する getServletContext() メソッドを介して
3) HttpSession が提供する getServletContext() メソッド
4) HttpServletRequest が提供する getServletContext() メソッドを介して
ServletContext のグローバル パラメータを取得する
ServletContext 属性とコンテキスト初期化パラメーターの比較
ServletContext オブジェクト
Web アプリケーション内のすべての Servlet は同じ ServletContext オブジェクトを共有し、異なる Servlet は ServletContext オブジェクトを介してデータ通信を実現できるため、ServletContext オブジェクトは Context ドメイン オブジェクトとも呼ばれます。
ドメイン オブジェクトは、サーバーによってメモリ内に作成されるストレージ スペースであり、異なる動的リソース (サーブレット、JSP など) 間でデータを転送および共有するために使用されます。
コンテキスト初期化パラメーターを取得するための関連メソッド
弦 | getInitParameter(文字列名) | 初期化パラメータ名 name に従って、対応する初期化パラメータ値を返します。 |
列挙 | getInitParameterNames() | Web アプリケーションのすべてのコンテキスト初期化パラメーター名の列挙コレクションを返します。コンテキスト初期化パラメーターがない場合は、空の列挙コレクションを返します。 |
ServletContext オブジェクトを作成する
1) GenericServlet が提供する getServletContext() メソッドを介して
//通过 GenericServlet的getServletContext方法获取ServletContext对象
ServletContext servletContext = this.getServletContext();
2) ServletConfig が提供する getServletContext() メソッドを介して
//通过 ServletConfig的 getServletContext方法获取ServletContext对象
ServletContext servletContext = this.getServletConfig().getServletContext();
//通过 Config的 getServletContext方法获取ServletContext对象
ServletContext context = config.getServletContext();
3) HttpSession が提供する getServletContext() メソッド
//通过 Session的 getServletContext方法获取ServletContext对象
ServletContext context = req.getSession().getServletContext();
4) HttpServletRequest が提供する getServletContext() メソッドを介して
//通过 HttpServletRequest的 getServletContext方法获取ServletContext对象
ServletContext servletContext = req.getServletContext();
コンテキスト初期化パラメーター
ローカル パラメータ
<servlet>
<init-param>
<param-name>name</param-name>
<param-value>Lungcen</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>110120130</param-value>
</init-param>
</servlet>
グローバル パラメータ
<context-param>
<param-name>姓名</param-name>
<param-value>Lungcen</param-value>
</context-param>
<context-param>
<param-name>年龄</param-name>
<param-value>19</param-value>
</context-param>
ServletContext のグローバル パラメータを取得する
Enumeration<String> names = this.context.getInitParameterNames();
while (names.hasMoreElements())
{
String s = names.nextElement();
writer.write(s + "->" + context.getInitParameter(s) + "<br/>");
}
ServletContext 属性とコンテキスト初期化パラメーターの比較
違い | ServletContext プロパティ | コンテキスト初期化パラメーター |
作成方法 | ServletContext 属性は、ServletContext インターフェースの setAttribute() メソッドを呼び出すことによって作成されます。 | コンテキストの初期化パラメーターは、web.xml の要素を使用して構成されます |
利用可能な操作 | ServletContext プロパティは、ServletContext インターフェイスのメソッドを介して、読み取り、追加、変更、削除などを行うことができます | コンテキスト初期化パラメーターは、コンテナーの開始後にのみ読み取ることができ、追加、変更、または削除することはできません |
ライフサイクル | ServletContext の属性のライフ サイクルは、作成から始まり、属性が削除 (削除) されるか、コンテナーが閉じられると終了します。 | コンテキスト初期化パラメーターのライフサイクルは、コンテナーの開始から始まり、Web アプリケーションがアンインストールされるか、コンテナーが閉じられると終了します。 |
効果 | ServletContext内の属性を利用することで、サーブレット間のデータ通信を実現できる | コンテキスト初期化パラメータを使用してデータ通信を実現できない |
データ通信を実現
サーブレットでは、ServletContext インターフェースの setAttribute() メソッドを呼び出すことによっていくつかの属性を作成でき、これらの属性は ServletContext オブジェクトに格納されます。アプリケーション内のすべてのサーブレットは、これらの属性にアクセスして操作できます。これにより、アプリケーション内の異なるサーブレット間のデータ通信を実現できます。
空所 | setAttribute(文字列名, Object オブジェクト) | Java オブジェクトを属性名でバインドし、属性として ServletContext に格納します。パラメータ名は属性名で、パラメータ オブジェクトは属性値です。 |
空所 | removeAttribute(文字列名) | name という名前の属性を ServletContext から削除します。 |
物体 | getAttribute(文字列名) | 指定された属性名に従って、対応する属性値を ServletContext に返します。 |
データ通信のプログラム例:
package com.zpark.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet(urlPatterns = "/LLL.do")
public class MyServlet04 extends HttpServlet {
@Override
public void init() throws ServletException {
getServletContext().setAttribute("count", 0);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
Integer count = (Integer) getServletContext().getAttribute("count");
count++;
getServletContext().setAttribute("count", count);
resp.setContentType("text/html;charset=utf-8");
PrintWriter writer = resp.getWriter();
writer.write("欢迎来到界面" + count);
writer.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
doGet(req, resp);
}
}
package com.zpark.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/Lun5.do")
public class MyServlet05 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
PrintWriter writer = resp.getWriter();
Integer count = (Integer) getServletContext().getAttribute("count");
writer.write("今天是一个好日子" + count);
writer.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setCharacterEncoding("utf-8");
doGet(req, resp);
}
}