HttpServlet
クラスと GenericServlet
クラスには、情報にアクセスするメソッドおよびメッセージを記録するメソッドがあります。次の表で、これらのメソッドについて説明します。
ServletConfig オブジェクトを使用して各サーブレット定義から、またアプリケーション内のすべてのサーブレットのパラメータを提供する ServletContext から初期化パラメータを取得できます。
サーブレット特有の初期化パラメータを取得するには、次の例に示すように、ServletConfig オブジェクトの getInitParameterNames
メソッドと getInitParameter
メソッドを使用します。
...
ServletConfig config = getServletConfig(); Enumeration eParmNames = config.getInitParameterNames(); while (eParmNames.hasMoreElements()) { String parm = (String) eParmNames.nextElement(); out.println(" " + parm + ":" + config.getInitParameter(parm) + "<br>"); } ...
サーブレット特有の初期化パラメータは、次の例に示すように、Web アプリケーションのデプロイメントディスクリプタの servlet 定義で設定します。
<web-app>
... <servlet> <servlet-name>ConfigParams</servlet-name> <servlet-class>ConfigParams</servlet-class> <init-param> <param-name>datasourcename</param-name> <param-value>lightgoldenrodyellow</param-value> </init-param> </servlet> ... </web-app>
詳細については、 「ServletConfig オブジェクトの使用」 を参照してください。
アプリケーション内のすべてのサーブレットが共有する初期化パラメータを取得するには、次の例に示すように、ServletContext オブジェクトの getInitParameter
メソッドと getInitParameterNames
メソッドを使用します。
ServletContext context = this.getServletContext(); Enumeration parmEnum = context.getInitParameterNames(); if (parmEnum.hasMoreElements()) { out.println("<h2>ServletContext Init Parameters</h2>"); } while (parmEnum.hasMoreElements()) { String name = (String)parmEnum.nextElement(); out.println("<b>"+name+": </b>"); out.println(context.getInitParameter(name) + "<br>"); } ...
次の例に示すように、アプリケーション全体の初期化パラメータは、Web アプリケーションのデプロイメントディスクリプタで、servlet 定義の外側で設定します。
<web-app>
... <context-param> <param-name>datasourcename</param-name> <param-value>fred</param-value> </context-param> ... </web-app>
ServletContext オブジェクトを使用すると、アプリケーション情報を保管したり、アプリケーションのさまざまなコンポーネント間で情報を共有したりすることができます。
たとえば、アプリケーションが複数のサーブレット (Java で書かれたものや JSP として書かれたもの)、HTML タグ、およびデータベースで構成されているとします。これらのアプリケーションコンポーネント間で情報をやり取りするには、アプリケーションコンテキストを使用して、その情報を保管したり、取り出したりすることができます。コンテキストオブジェクトを通じて使用できる情報には、次のものがあります。
また、アプリケーションコンテキストには、Web サーバへのアプリケーションの実装に伴って、アプリケーション情報が保管されます。この情報には、アプリケーションコンポーネントのファイルの位置、サーブレットの初期化パラメータ、バージョン情報などの、アプリケーション特有の情報が含まれます。
次の方法で、サーブレットや JSP のアプリケーション情報にアクセスできます。
javax.servlet.ServletContext
オブジェクトを使用します。
ServletContext オブジェクトを使用して、アプリケーションに関する情報を保存したり、次の環境情報にアクセスできます。
サーブレットは getServletContext
メソッドを使用して ServletContext オブジェクトのリファレンスを取得します。
次の例では、いくつかのサーブレットコンテキスト情報を表示します。
...
ServletContext scntxt = this.getServletContext(); out.println("サーバ情報:"+ scntxt.getServerInfo() + "<br>"); int majorVersion = scntxt.getMajorVersion(); int minorVersion = scntxt.getMinorVersion(); out.println("メジャーバージョン:" + majorVersion + "<br>"); out.println("マイナーバージョン:" + minorVersion + "<br>"); java.util.Enumeration parmEnum = scntxt.getInitParameterNames(); if (parmEnum.hasMoreElements()) { out.println("<h2>ServletContext Parameters</h2>"); } while (parmEnum.hasMoreElements()) { String name = (String)parmEnum.nextElement(); out.println("<b>"+name+": </b>"); out.println(scntxt.getInitParameter(name) + "<br>"); } // ServletContext 属性 java.util.Enumeration attrEnum = scntxt.getAttributeNames(); if (attrEnum.hasMoreElements()) { out.println("<h2>ServletContext Attributes</h2>"); } while (attrEnum.hasMoreElements()) { // 常に属性を適切なクラスにキャストします。 String attrName = (String)attrEnum.nextElement(); out.println("<b>" + attrName + ": </b>"); out.println(scntxt.getAttribute(attrName) + "<br>"); } // サーブレットの実際のパスを取得します。 String path = req.getServletPath(); out.println("<b>サーブレットのフルパス:</b>"); out.println(scntxt.getRealPath(path) + "<br>"); // ServletContext のログを記録します。 Date now = new Date(); scntxt.log("Testing ServletContext:" + now); ...
サンプルサーブレットを表示するには、samples JRun サーバを起動し、ブラウザで http://localhost:8200/techniques を開きます。
JRun は、初期化時にサーブレットに設定情報を渡します。設定情報には、初期化パラメータを示す名前/値のペア、およびサーブレットが実行されるコンテキストを示す ServletContext オブジェクトが含まれます。
サーブレットは getServletConfig
メソッドを使用して ServletConfig オブジェクトへのリファレンスを取得します。次に、ServletConfig オブジェクトを使用して初期化パラメータにアクセスできます。
次の方法で、サーブレットや JSP の設定情報にアクセスできます。
javax.servlet.ServletConfig
オブジェクトを使用します。
次の例では、getServletConfig
メソッドを使用して、サーブレットの init
メソッド内の ServletConfig オブジェクトを取得します。
...
public void init(ServletConfig config) throws ServletException { super.init(config); try { bgcolor = config.getInitParameter("bgcolor"); System.out.println("bgcolor:" + bgcolor); } catch (Exception e) { System.out.println("error:" + e.toString()); } } ...
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
resp.setContentType("text/html"); PrintWriter out = resp.getWriter(); out.println("<html><head><title>Servlet Config</title>"); out.println("</head><body bgcolor=¥"" + bgcolor + "¥">"); out.println("<h1>Servlet Config</h1>"); out.println("</body></html>"); } ...
メモ: init
メソッドが再び呼び出されるように JRun を再起動する必要があります。このメソッドはサーバの起動時に 1 回だけ呼び出されます。
次の web.xml ファイルの抜粋では、初期化パラメータを設定します。
<servlet>
<servlet-name>GetServletConfigInfo</servlet-name> <servlet-class>GetServletConfigInfo</servlet-class> <init-param> <param-name>bgcolor</param-name> <param-value>lightgoldenrodyellow</param-value> </init-param> </servlet>
サンプルサーブレットを表示するには、samples JRun サーバを起動し、ブラウザで http://localhost:8200/techniques を開きます。
log
メソッドを使用して、プログラマが指定したメッセージを、サーブレットのホストになっている JRun サーバのログファイルに書き込むことができます。
メモ: JRun では、記録されるログ情報の量は自動的に変わります。ログファイル設定の詳細については、『JRun 管理者ガイド』または JMC を参照してください。
HttpSession thisSession = req.getSession();
String userName = (String)thisSession.getAttribute("name"); if(userName != null) { out.println("<h2> ようこそ、" + userName + " さん</h2>"); // ロギング用の情報を準備 // この例では、ユーザー名と IP アドレスをログに記録します。 String logMsg = userName + ", " + req.getRemoteAddr(); log(logMsg); }
他の Java アプリケーションと同様に、System オブジェクトを呼び出してプロパティを取得できます。これにより、ユーザーの言語、タイムゾーン、地域、ファイルセパレータなど Web アプリケーションをプラットフォーム独立にするために役立つ多くのプロパティにアクセスできます。これらのプロパティによって、JRun が使用するいくつかのサービスにもアクセスでき、JVM が使用するネーミングファクトリ、ディレクトリ構造、クラスパスを識別できます。
次の例では、すべての System プロパティを表にリストし、それから user.region
プロパティにアクセスして JRun サーバのロケーションに関する情報をクライアントに提供します。
...
Properties sysprops = System.getProperties(); ... out.println("<TABLE>"); Enumeration enum = sysprops.propertyNames() ; while (enum.hasMoreElements()) { out.println("<TR><TD>"); String key = (String) enum.nextElement(); out.println(key + "</TD><TD>" + sysprops.getProperty(key) + "</TD></TR>"); } out.println("</TABLE>"); ... String region = sysprops.getProperty("user.region"); out.println("<HR>このサーバがホストされている地域:<B>" + region + "</B>"); ...
サンプルサーブレットを表示するには、samples JRun サーバを起動し、ブラウザで http://localhost:8200/techniques を開きます。