JAVA:IT TRICK

インクルード(include)

サーブレットのディスパッチにはフォワードとインクルードがありますが、ここではインクルードについて説明します。
  • このエントリーをはてなブックマークに追加
  • Clip to Evernote
  • IT TRICK RSS

サーブレットのディスパッチにはフォワードとインクルードがありますが、ここではインクルードについて説明します。

ディスパッチのインクルードはフォワードと違って、転送先のサーブレットやJSPの処理結果をインクルード(取り込む)します。以下の図でも示しているように、サーブレットAでリクエストを受け付け、一部の処理をサーブレットBに委託し、その処理結果をインクルードし、最終的にはサーブレットAがレスポンスを返しています。

以下はディスパッチのインクルードを使った実際のサンプルです。

ディスパッチインクルードのサンプル

このサンプルではリクエストをSample48145Aで受け取り、HTMLタグとBODYタグを出力します。その後、HttpServletRequestのオブジェクトにmessageパラメータを追加し、処理をSample48145Bに委託します。Sample48145Bの処理完了後にレスポンスにBODYの終了タグとHTMLの終了タグを追加しています。

Sample48145A.java

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class Sample48145A extends HttpServlet {

	public void doGet(HttpServletRequest request,
			HttpServletResponse response)
	throws IOException, ServletException {

		request.setAttribute("message", "Hello include");

		PrintWriter out = response.getWriter();
		out.println("<HTML>");
		out.println("<BODY>");

		ServletContext sc = getServletContext();
		RequestDispatcher rd = sc.getRequestDispatcher("/48145B");
		rd.include(request, response);

		out.println("</BODY>");
		out.println("</HTML>");

	}
}

Sample48145BではHttpServletRequestのオブジェクトからmessageを受け取り出力しています。

Sample48145B.java

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class Sample48145B extends HttpServlet {

	public void doGet(HttpServletRequest request,
			HttpServletResponse response)
	throws IOException, ServletException {

		PrintWriter out = response.getWriter();
		out.println("message: ");
		out.println(request.getAttribute("message"));

	}
}

このサンプルのためのweb.xml定義です。

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app>

	<servlet>
		<servlet-name>48145A</servlet-name>
		<servlet-class>Sample48145A</servlet-class>
	</servlet>

	<servlet>
		<servlet-name>48145B</servlet-name>
		<servlet-class>Sample48145B</servlet-class>
	</servlet>

	<servlet-mapping>
		<servlet-name>48145A</servlet-name>
		<url-pattern>/48145A</url-pattern>
	</servlet-mapping>

	<servlet-mapping>
		<servlet-name>48145B</servlet-name>
		<url-pattern>/48145B</url-pattern>
	</servlet-mapping>

</web-app>

このサンプルを実行するとブラウザで「message: Hello include」が表示されるはずです。