JAVA:IT TRICK

サーブレット間のデータ受渡し

リクエストスコープ内でサーブレット間でデータの受渡方法について説明します。
  • このエントリーをはてなブックマークに追加
  • Clip to Evernote
  • IT TRICK RSS

リクエストスコープ内でサーブレット間でデータの受渡方法について説明します。

サーブレット間でリクエストスコープを使ってデータの受渡を行う場合は、HttpServletRequestクラスのsetAttribute()メソッドを使ってリクエストスコープにデータのキーとデータの値を設定し、これを受け取るサーブレットでHttpServletRequestクラスのgetAttribute()メソッドを使ってデータのキーを指定して取得します。以下は実際のサンプルです。

サーブレット間のデータ受渡サンプル

このサンプルではSample48147Aではリクエストスコープに「キー:message」、「値:hello」を設定し、Sample48147Bにフォワードしています。

Sample48147A.java
import java.io.IOException;

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


public class Sample48147A extends HttpServlet {

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

		request.setAttribute("message", "hello");

		RequestDispatcher dispatcher = request.getRequestDispatcher("/48147B");
		dispatcher.forward(request, response);

	}
}

Sample48147BではHttpServletRequestクラスのgetAttribute()メソッドで「キー:message」を指定してデータを取り出し出力しています。

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

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


public class Sample48147B extends HttpServlet {

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

		PrintWriter out = response.getWriter();

		out.println(request.getAttribute("message"));

	}
}

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

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

	<servlet>
		<servlet-name>48147A</servlet-name>
		<servlet-class>Sample48147A</servlet-class>
	</servlet>

	<servlet>
		<servlet-name>48147B</servlet-name>
		<servlet-class>Sample48147B</servlet-class>
	</servlet>

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

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

</web-app>

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