隠れパラメータを渡すにはどうすればよいですか?私はページ(test.jsp)を呼び出すだけでなく、投稿のような2つの隠しパラメータを渡したいと思います。response.sendRedirect()を使用して隠しパラメータを渡す
response.sendRedirect("/content/test.jsp");
隠れパラメータを渡すにはどうすればよいですか?私はページ(test.jsp)を呼び出すだけでなく、投稿のような2つの隠しパラメータを渡したいと思います。response.sendRedirect()を使用して隠しパラメータを渡す
response.sendRedirect("/content/test.jsp");
TheNewIdiot's answerは、リダイレクトによってリクエストで属性を送信できないという問題とその理由をうまく説明しています。考えられる解決策:
転送を使用する。これにより、要求属性をビューに渡すことができ、ServletRequest#getAttribute
の形式で、またはExpression LanguageとJSTLを使用して使用できます。簡単な例(The NewIdiotの答えを再利用する)コード。
コントローラー(サーブレット)
request.setAttribute("message", "Hello world");
RequestDispatcher dispatcher = servletContext().getRequestDispatcher(url);
dispatcher.forward(request, response);
ビュー(あなたのJSP)
スクリプトレットを使用して:
<%
out.println(request.getAttribute("message"));
%>
これは単なる情報提供を目的とのためです。スクリプトレットの使用は避ける必要があります:How to avoid Java code in JSP files?。以下にELとJSTLを使用した例があります。
<c:out value="${message}" />
(あなたがそれを好きではないか、あなたがそのように感じていないか、リダイレクトを使用する必要があるためので)、オプションとしてメッセージを保存するだろうあなたは転送を使用できない場合あなたのビューにリダイレクトし、あなたのビューでセッション属性を回復し、セッションからを削除してください。常に関連するデータだけでユーザーセッションを行うことを忘れないでください。コード例
コントローラ
//if request is not from HttpServletRequest, you should do a typecast before
HttpSession session = request.getSession(false);
//save message in session
session.setAttribute("helloWorld", "Hello world");
response.sendRedirect("/content/test.jsp");
ビュー
繰り返しますが、この使用してスクリプトレット、その後EL + JSTL示す:session
を使用して
<%
out.println(session.getAttribute("message"));
session.removeAttribute("message");
%>
<c:out value="${sessionScope.message}" />
<c:remove var="message" scope="session" />
通常、sendRedirect()メソッドを使用してPOSTリクエストを送信することはできません。同じWebアプリケーション、同じコンテキスト内のパラメータを持つRequestDispatcher〜forward()個のリクエストを使用できます。
RequestDispatcher dispatcher = servletContext().getRequestDispatcher("test.jsp");
dispatcher.forward(request, response);
HTTP仕様では、すべてのリダイレクトはGET(またはHEAD)の形式でなければならないと記載されています。 セキュリティが問題になる場合は、クエリ文字列パラメータを暗号化することを検討できます。 もう1つの方法は、メソッドPOSTを使用して非表示のフォームを作成し、ページがロードされたときにjavascriptを使用して送信することによって、ターゲットにPOSTできます。
代わりに他の機能を使用することはできますか? –
@AshishAnand私の編集した答えを見て、同じWebアプリケーション内で 'RequestDispatcher'を使うことができます。 – NINCOMPOOP
を、Iサーブレット#1のresponse.sendRedirect
を使用して、サーブレット#1からサーブレット#2にパラメータ(name
)を正常に渡しました。サーブレット#1コード:
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
String name = request.getParameter("name");
String password = request.getParameter("password");
...
request.getSession().setAttribute("name", name);
response.sendRedirect("/todo.do");
サーブレット#2では、あなたはname
バックを取得する必要はありません。すでにセッションに接続しています。 String name = (String) request.getSession().getAttribute("name");
を実行できますが、これは必要ありません。その鉱山は除去するビューの部分が追加されます以外
<h1>Welcome ${name}</h1>
は、あなたがあなたでカバー何を取り上げます。サーブレット#2は、JSPを呼び出す場合
、あなたは
name
にJSPのWebページ上でこの道を示すことができますJSTLを使用したセッション属性。 –@LuiggiMendoza申し訳ありませんが、私はあなたがOKであることを確認するために私のコメントを削除します。ところで、その回答は約5ヶ月前に投稿されました) – informatik01
@ informatik01はあなたの投稿を知らなかったが、私たちはこの問題をどのように処理するか(世界の他の人々の間でも)知っているようだ。 –