Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Java JSP/Servlet

getParameterとgetAttributeの違いやJSPからServletへの値の受け渡し

投稿日:2021年4月16日 更新日:

<目次>

(1) getParameterとgetAttributeの違いやJSPからServletへの値の受け渡し
 (1-1) 前半:request.getParameterについて
  ●概要
  ●(例1)JSP(form値をsubmit)⇒Servlet(getParameterで取得)
 (1-2) 後半:getAttributeやsetAttributeについて
  ●概要
  ●(例2)JSP(session.setArribute)⇒Servlet(session.getArribute)
  ●(例3)JSP(form値をsubmit)⇒Servlet(getParameter&setAttribute)⇒JSP(getAttribute)

(1) getParameterとgetAttributeの違いやJSPからServletへの値の受け渡し

JSP/Servlet間でデータを受け渡しする際に利用される「getParameter」や「getAttribute」などは似た感じで混同しやすい部分もあると思うので、それらの違いについて纏めます。

前半の(1-1)では「getParameter」についてご紹介し、後半の(1-2)では「getAttribute」についてご紹介します。加えて、理解を深めるためにそれぞれ(例1)~(例3)の3つの例をご紹介していきます。

(1-1) 前半:request.getParameterについて

●概要

getParameter()メソッドはHttpRequestリクエストのパラメータ(ユーザーがform等に入力した値)を取得するためのメソッドです。
 
「パラメータ」というのは、基本的には「クライアント(JSP画面)」⇒「サーバ(Servlet)」に渡されるデータで、具体的には以下のような値を指します。
 
(例)
①ユーザーが画面(HTMLの<form>)に入力した値をsubmitボタンでServletに連携
②URLのパラメータとして渡される値(例:http://sample.com/servlet?param1=12345)
 

●(例1)JSP(form値をsubmit)⇒Servlet(getParameterで取得)

■JSP側

formタグ内のtextボックスの値を「IT0994_PassValue」という名前の「Servlet」に連携(HTTPのGETリクエスト)します。

<form action="./IT0994_PassValue" method="get">
	#1<input type="text" name="value1" id="val1">
	<input type="submit" value="転送">
</form>
 
■Servlet側
JSPからリクエストで連携された値をgetParameterメソッドで取得します。
 
String search = request.getParameter("value1");
 
注意点として、getParameterは戻り値がString型となりますので、必要に応じてparseInt等の処理をします。

 

(図111)getParameterのイメージ

●(例1)のサンプルプログラム

getParameterでJSP→Servletに渡された値を取得するサンプルは別記事(下記URL)にてご紹介しています。
 
 
上記記事では、テキストボックス以外にも「プルダウン」や「ラジオボタン」の値も連携するサンプルを紹介しています。
 

(1-2) 後半:getAttributeやsetAttributeについて

●概要

一方でgetAttributeやsetAttributeはサーバサイドで使用する処理で、そのリクエスト内(request)やセッション内(session)で使いまわせる値をset(設定)したりget(取得)したりするためのメソッドです。

●(例2)JSP(session.setArribute)⇒Servlet(session.getArribute)

JSP内で何らかの値をセッション(session)に保持(session.setArribute)し、それをボタン押下等で起動するServletで取得(session.getArribute)する例です。

 

(図121)

 

(例2の構文)
■JSP:値をsessionにセット
<%
session.setAttribute("value2", "abcde");
%>
 
■Servlet:値をsessionから取得
String search = (String)request.getSession().getAttribute("value2");
 
(例2の具体的な利用シーン例)
具体的な例ですと、JSP画面からcsvダウンロードボダン(内部的にはServletを使用)でデータをcsvダウンロードする場合などは、ボタン(type=button)から直接Servletを呼び出す形になりますが、このような場合のJSP⇒Servlet間のデータ連携はユーザーからのイベント(submit)を伴わないため、getParameterではなく、session.setAttributeで値をセットしてsession.getAttributeで値を取得します。
 
(例2の疎通用サンプル)
■JSP
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>値の受け渡し(入力画面)</title>
</head>
<body>
	<div><b>(2) JSP→Servletへform以外の値を連携する</b></div><br />
	①JSP側の連携方法: sessionにsetAttributeし、ボタン押下でServlet呼び出し<br /><br />
	②Servlet側の取得方法: request.getSession.getAttribute<br /><br />
	<%-- sessionに値「abcde」をセット --%>
	<%
	session.setAttribute("value2", "abcde");
	%>
	<%-- ボタンでサーブレット「IT0994_PassValue2」を呼び出し --%>
	<input type="button" value="転送" onclick="location.href='IT0994_PassValue2'"><br /><br />
</body>
</html>
 
■Servlet
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/IT0994_PassValue2")
public class IT0994_PassValue2 extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//# sessionに格納された値(abcde)を取得
		String search = (String)request.getSession().getAttribute("value2");
		
		//# 画面描画
		response.setHeader("Content-Type", "text/html; charset=SHIFT-JIS");	
		response.getWriter().println("<!DOCTYPE html><html><head><meta charset='UTF-8'>");
		response.getWriter().println("(2)の結果: "+search+"<br />");
		response.getWriter().println("<br /><br /><a href=\"IT0994_PassValue.jsp\">戻る</a>");
		
	}
}
(図122)例2の疎通用サンプルの実行結果

 

●(例3)JSP(form値をsubmit)⇒Servlet(getParameter&setAttribute)⇒JSP(getAttribute)

ユーザーがJSP画面(form)に入力してsubmitした値を、Servletにて処理して更に結果画面のJSPに値を持ち回るようなケースです。

(図123)

 

(例3の構文)
■JSP①:formの値をsubmit
<form action="./IT0994_PassValue3" method="get">
	<%-- テキストボックス --%>
	#3<input type="text" name="value3" id="val3">
	<%-- submitボタン --%>
	<input type="submit" value="転送">
</form>
 
■Servlet:値をrequestから取得&requestにセット
String search = request.getParameter("value3");
request.setAttribute("val_3", “Hello ”+search);
 
■JSP②:requestから値を取得
String val = (String)request.getAttribute("val_3");

 

(例3の具体的な利用シーン例)

具体的な例を出すと、入力画面(JSP①)で会員IDを入力してボタンを押下⇒Servletにて会員情報を取得⇒結果画面(JSP②)にて表示、というような処理の場合は会員ID等の値をJSP①⇒Servlet⇒JSP②と持ち回っていく事になると思いますが、そうしたケースで使える方法になります。

(例3の疎通用サンプル)
■JSP①
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>値の受け渡し(入力画面)</title>
</head>
<body>
	<div><b>(3) JSP(入力form)→Servlet→JSP(結果form)で値を連携</b></div><br />
	①JSP(入力form)側の連携方法: formに含めてsubmit<br /><br />
	②Servlet側の取得方法: getParamter<br /><br />
	③Servlet側のセット方法: setAttribute<br /><br />
	④JSP(結果form)側の取得方法: getAttribute<br /><br />
	<%-- submit時にServlet「IT0994_PassValue3」を呼び出し --%>
	<form action="./IT0994_PassValue3" method="get">
		<%-- テキストボックス --%>
		#3<input type="text" name="value3" id="val3">
		<%-- submitボタン --%>
		<input type="submit" value="転送">
	</form>
	<br />
	<br />
</body>
</html>
 
■Servlet
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/IT0994_PassValue3")
public class IT0994_PassValue3 extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//# 入力画面から入力された値を取得
		String search = request.getParameter("value3");
		//# 値を次のJSPに連携するためにsessionにセット
		request.setAttribute("val_3", "Hello "+search);		
		//# 遷移先画面
		String forwardpage = "./IT0994_PassValue3.jsp";
		//# 画面遷移
		RequestDispatcher dispatch = request.getRequestDispatcher(forwardpage);
		dispatch.forward(request, response);
	}
}
 
■JSP②
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>値の受け渡し(結果画面)</title>
</head>
<body>
<%-- sessionに格納された値を取り出し --%>
<%
String val = (String)session.getAttribute("val_3");
%>
入力された値:<%=val%>
</body>
</html>

 

(図124)例3の疎通用サンプルの実行結果
 

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-Java, JSP/Servlet

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

JavaScriptでAttributeの値を削除(Remove)する方法

<目次> (1) JavaScriptでAttributeの値を削除(Remove)する方法  (1-1) 構文  (1-2) サンプルプログラム   (1-2-1) サンプルプログラムの概要   ( …

Javaでハッシュ値を計算する方法について

<目次> (1) Javaでハッシュ値を計算する方法について  (1-1) ハッシュを使った探索の概要  (1-2) ハッシュからアドレスを計算する方法  (1-3) サンプルプログラム (1) Ja …

Javaでcsvファイルに書き込みを行う方法(サンプルプログラム付き)

<目次> (1) Javaでcsvファイルに書き込みを行う方法  (1-1) 構文  (1-2) サンプルプログラム (1) Javaでcsvファイルに書き込みを行う方法 Javaでcsvファイルを生 …

TwitterAPIを使ってフォロワーの一覧を取得する方法(Twitter4jライブラリ)

<目次> (1) TwitterAPIを使ってフォロワーの一覧を取得する方法(Twitter4jライブラリ)  (1-1) 構文  (1-2) サンプルプログラム (1) TwitterAPIを使って …

Twitter APIのRate Limit Exceedエラー(code – 88)の意味について

  <目次> (1) Twitter APIのRate Limit Exceedエラー(code – 88)の意味について  (1-1) APIコールのリミット(Rate Limit)につい …

  • English (United States)
  • 日本語
Top