Java Web の ServletContext オブジェクト

目次

 ServletContext オブジェクト

 コンテキスト初期化パラメーターを取得するための関連メソッド

 ServletContext オブジェクトを作成する

 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);
    }
}

 ブラウザでの操作

Guess you like

Origin blog.csdn.net/qq_64552181/article/details/129786221