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