(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について
●概要
●(例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側
String search = request.getParameter("value1");
●(例1)のサンプルプログラム
(1-2) 後半:getAttributeやsetAttributeについて
●概要
一方でgetAttributeやsetAttributeはサーバサイドで使用する処理で、そのリクエスト内(request)やセッション内(session)で使いまわせる値をset(設定)したりget(取得)したりするためのメソッドです。
●(例2)JSP(session.setArribute)⇒Servlet(session.getArribute)
(例2の構文)
■JSP:値をsessionにセット
<% session.setAttribute("value2", "abcde"); %>
■Servlet:値をsessionから取得
String search = (String)request.getSession().getAttribute("value2");
(例2の具体的な利用シーン例)
(例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>"); } }
●(例3)JSP(form値をsubmit)⇒Servlet(getParameter&setAttribute)⇒JSP(getAttribute)
(図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>