サーブレットテクノロジ9_ServletConfigクラス

SerlvetConfig:サーブレットプログラム構成情報クラス

効果:

  1. サーブレットプログラムのエイリアスservlet-nameの値を取得します(servletConfig.getServletName())

  2. 初期化パラメータinit-param(servletConfig.getInitParameter( "parameter name"))を取得します

  3. ServletContextオブジェクトを取得します(servletConfig.getServletContext())

init初期化メソッドの場合:

@Override
    public void init(ServletConfig servletConfig) throws ServletException {
    
    
        System.out.println("2.初始化方法");

//        1. 获取Servlet程序的别名 servlet-name 的值
        System.out.println("HelloServlet程序的别名是:"+servletConfig.getServletName());
//        2. 获取初始化参数 init-param
        System.out.println("HelloServlet程序的初始化参数username的值是:"+servletConfig.getInitParameter("username"));
        System.out.println("HelloServlet程序的初始化参数url的值是:"+servletConfig.getInitParameter("url"));
//        3. 获取 ServletContext 对象
        System.out.println("servletConfig.getServletContext: "+servletConfig.getServletContext());
    }

その中で、初期化パラメーターinit-paramは、web.xml構成ファイルを構成する必要があります。

対応するサーブレットタグを変更します(複数のinit-paramを設定できます)。

<servlet>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>com.servlet1.HelloServlet</servlet-class>

    <!-- init-param是初始化参数 -->
    <init-param>
        <!-- param-name是参数名 -->
        <param-name>username</param-name>
        <!-- param-value是参数值 -->
        <param-value>root</param-value>
    </init-param>

    <init-param>
        <param-name>url</param-name>
        <param-value>jdbc:mysql://localhost:3306/test</param-value>
    </init-param>

</servlet>

補足:

サーブレットプログラムとServletConfigオブジェクトはどちらもTomcatによって作成され、私たちがそれらを使用する責任があります。

サーブレットプログラムは、最初にアクセスされたときにデフォルトで作成され、各サーブレットプログラムが作成されたときにServletConfigが作成され、対応するServletConfigオブジェクトが作成されます。

初期構成情報はServletConfigにカプセル化されています

初期化でServletConfigを使用することに加えて、他の場所でも使用できます

たとえば、HelloServlet2のdoGetまたはgetPostメソッドで

    /**
     * doGet()在get请求的时候调用
     */
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
        System.out.println("HelloServlet2的doGet方法");
        // 也可以使用ServletConfig对象
        ServletConfig servletConfig = getServletConfig();
        System.out.println(servletConfig);
//        1. 获取Servlet程序的别名 servlet-name 的值
        System.out.println("HelloServlet程序的别名是:"+servletConfig.getServletName());
//        2. 获取初始化参数 init-param
        System.out.println("HelloServlet程序的初始化参数username的值是:"+servletConfig.getInitParameter("username"));
        System.out.println("HelloServlet程序的初始化参数url的值是:"+servletConfig.getInitParameter("url"));
//        3. 获取 ServletContext 对象
        System.out.println("servletConfig.getServletContext: "+servletConfig.getServletContext());

    }

ただし、各ServletConfigは独自のサーブレットプログラムに対応しており、他の人のサーブレットプログラムで他の人のサーブレット情報を取得することはできません(HelloServlet2はHelloServlet1の情報を取得できません)

ここに画像の説明を挿入

HelloServlet2のinitメソッドをオーバーライドする場合:

@Override
public void init(ServletConfig config) throws ServletException {
    System.out.println("从写了init初始化方法,做了一些初始化工作");
}

実行結果:nullポインター例外が見つかりました

ここに画像の説明を挿入

エラーの理由:書き直されたinitメソッドで必ずsuper.init(config)を呼び出してください

@Override
public void init(ServletConfig config) throws ServletException {
    
    
    super.init(config);
    System.out.println("从写了init初始化方法,做了一些初始化工作");
}

運用結果:また良いですか?

ここに画像の説明を挿入

理由:

doGetメソッドを振り返って:

 @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
        System.out.println("HelloServlet2的doGet方法");
        // 也可以使用ServletConfig对象
        ServletConfig servletConfig = getServletConfig();
        System.out.println(servletConfig);
//        1. 获取Servlet程序的别名 servlet-name 的值
        System.out.println("HelloServlet程序的别名是:"+servletConfig.getServletName());
//        2. 获取初始化参数 init-param
        System.out.println("HelloServlet程序的初始化参数username的值是:"+servletConfig.getInitParameter("username"));
        System.out.println("HelloServlet程序的初始化参数url的值是:"+servletConfig.getInitParameter("url"));
//        3. 获取 ServletContext 对象
        System.out.println("servletConfig.getServletContext: "+servletConfig.getServletContext());

    }

ここで、getServletConfigはGenericServletクラスのメソッドです。

GenericServletには、ServletConfigへの参照が1つだけあります

GenericServlet:

ここに画像の説明を挿入

この構成は次のとおりです。
ここに画像の説明を挿入

GenericServletには設定を保存するinitメソッドもあります。
ここに画像の説明を挿入
書き換え時に、サブクラスと親クラスの両方にinitがある場合、initが呼び出されるとサブクラスが呼び出され、親クラスの保存操作は失われます。

おすすめ

転載: blog.csdn.net/weixin_45024585/article/details/108855469