SerlvetConfig:サーブレットプログラム構成情報クラス
効果:
-
サーブレットプログラムのエイリアスservlet-nameの値を取得します(servletConfig.getServletName())
-
初期化パラメータinit-param(servletConfig.getInitParameter( "parameter name"))を取得します
-
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が呼び出されるとサブクラスが呼び出され、親クラスの保存操作は失われます。