サーブレットのrequestメソッドのgetAttributeとgetParameterの違い
サーブレットについて勉強しているときに
getParameterと間違ってgetAttributeを使っていて、
よくわからなかったのでメモ。
まずはフォームに入力した値を標準出力するjspを作ります。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form method="get" action="TestServlet1">
text<input type="text" name="str">
<button type="submit" value="send">send</button>
</form>
</body>
入力して実行します。
この例ではhelloと入力をします。
formの値を受け取ったTestServlet1のdoGetメソッドが
下記コードであるとすると
String str = (String)request.getParameter("str");
System.out.println(str);
コンソールには
hello
と出力されます。
ところがgetParameterをgetAttributeとしてしまうと
String型にキャストしたとしても
String str = (String)request.getAttribute("str");
System.out.println(str);
値はうけとれずnullになってしまいます
null
じゃあgetAttributeはいつ使えるのか・・・?
という疑問がありました。
さきほどのTestServletのdoGetメソッドを下記のように書き換えてみます。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String str = request.getParameter("str");
System.out.println(str);
request.setAttribute("str2", str);
request.setAttribute("str3", str);
RequestDispatcher rd = request.getRequestDispatcher("TestServlet2");
rd.forward(request, response);
rd = request.getRequestDispatcher("TestServlet3");
rd.forward(request, response);
}
これはフォームから受け取った値を
リクエストスコープにstr2,str3をセットするようにして
TestServlet2,TestServlet3にフォワード処理します。
このときリクエストスコープを通して
をサーブレットTestServlet2でstr2を,
サーブレットTestServlet3はstr3を受け取るようにします。
ただし、違うのは
TestServlet2ではgetAttributeで
TestServlet3ではgetParameterで
受け取るようにしているのがポイントです。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String str = (String)request.getAttribute("str2");
System.out.println(str+"2");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String str = (String)request.getParameter("str3");
System.out.println(str+"3");
}
TestServlet2のgetAttributeではスコープの値を受け取れましたが、
getParameterでは下記のような500エラーがでました。
メモまとめ
まとめると、
jsp → servlet:getParameter
servlet → servlet:getAttribute
という動作ですね。
とはいえ、私はtrl+spaceでコードしているとgetParameterのつもりが
いつのまにかgetAttributeしていることがあったりします・・・(--;
Author And Source
この問題について(サーブレットのrequestメソッドのgetAttributeとgetParameterの違い), 我々は、より多くの情報をここで見つけました https://qiita.com/200269km/items/82dc1e8b589772cb10ef著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .