Revised: 27th/Oct./2002
前節ではRequestDispatcherクラスのforward()メソッドを使いました。ここではinclude()メソッドを紹介しましょう。forward()メソッドでは、要求と応答のオブジェクトをgetRequestDispatcher()メソッドで取得したリソースへ放り投げてしまいます(フォワードするんですね)ので、クライアントに応答するのは呼び出し元ではなく、フォワード先のリソースになります。。一方、include()メソッドでは、getRequestDispatcher()メソッドで取得したリソースの応答を、呼び出し元に組み込むことになりますので、クライアントに応答するのは、呼び出し元のリソースになります。
前節と同じリソースを使います。ドキュメント・ルートは "C:\java\dispatchers" であり、サーバのコンテキスト・ルート "/dispatching" になるように設定しています。未設定の場合は、前節に戻って設定してください。
Tomcat の server.xml に次の行が挿入されているはずです(server.xml の絶対パスは、デフォルトでは "C:\Program Files\Apache Tomcat 4.0\conf\server.xml" になっているはずです)。
<!-- Dispatching Examples Context -->
<Context path="/dispatching" docBase="C:/java/dispatchers" debug="0"
reloadable="true" crossContext="true"/>
また、ドキュメントルート配下のディレクトリ構造は次のようになっているはずです。
![]() |
図: C:\java\dispatchers 以下のディレクトリ構造 |
"C:\java\dispatchers\WEB-INF\classes" に次のファイルを作成してください。
IncludingServlet.java:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class IncludingServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPerform(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPerform(request, response);
}
public void doPerform(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// JSP のディスパッチャを取得
RequestDispatcher reqJSP
= getServletContext().getRequestDispatcher("/includedJSP.jsp");
// HTTP ヘッダのセット
response.setContentType("text/html; charset=Shift_JIS");
// PrintWriter ストリームの取得と書き込み
PrintWriter out = response.getWriter();
out.println("<html lang=\"ja\"><head>includeメソッドサンプル</head><body>");
out.println("<h1>includeメソッドのサンプル</h1>");
out.println("<p>この文書はincludeメソッドのサンプルです。</p>");
// ディスパッチャの include メソッドを利用
reqJSP.include(request, response);
out.println("</body></html>");
}
}
これを受け取る JSP は C:\java\dispatchers\includedJSP.jsp" です。
includedJSP.jsp:
<address>ここはインクルードされた JSP による出力部分です。<br /> 現在時刻:<%= new java.util.Data() %><br /> Copyright © 2002 SUGAI, Manabu. All Rights Reserved.</address>
例によって、サーブレットをコンパイルするためには、環境変数 CLASSPATH に servlet.jar の絶対パスがセットされている必要があります。"C:\autoexec.bat" (Windows 9x系の場合)やコントロール パネルの「システム」-> 「詳細」-> 「環境変数」(Windows NT系の場合)環境変数に CLASSPATH をセットするか、コマンドラインから一時的にセットしてください。次の二つ目のコマンドは、コマンドラインから一時的に CLASSPATH をセットする場合の例です。本節まで順番に設定してきている方は、既にOSに環境変数を設定しているはずなので、setコマンドによる CLASSPATH の設定は不要です。
C:\>cd C:\java\dispatchers\WBE-INF\classes C:\java\dispatchers\WBE-INF\classes>set CLASSPATH=C:\Program Files\Apache Group\ Tomcat 4.1\common\lib\servlet.jar;.;%PATH% C:\java\dispatchers\WBE-INF\classes>javac IncludingServlet.java
ブラウザのアドレス欄に次のように入力してください。
http://localhost/dispachers/IncludingServlet