8

私はJSPが初めてです。パラメータがhttpポストでこのjspページに渡されるjspページがあります。写真でわかるように、firebug のパラメーターを確認できます。 ここに画像の説明を入力

しかし、私のページでは、トークン変数を印刷しようとすると、変数は常に null です。次のように変数を出力します。

     <%
        String token = request.getParameter("token");
     %>

私は何を間違っていますか?トークン パラメータを取得するにはどうすればよいですか?

4

7 に答える 7

7

属性は私にはのtokenように見えますがnonce、一部のセキュリティ フィルターが要求オブジェクトから値を削除している可能性があります。

値を印刷するために行ったことは絶対に正しいです。私はベストプラクティスを実行するつもりはありませんが、うまくいくはずです。

セキュリティ フィルターのコードを確認し、値が削除/オーバーライドされた場所を確認できるかどうかを確認します。

web.xml を見た後

値は、POST を使用してドメインに渡されます。リクエストはウェルカム ページに内部的にリダイレクトされ、値は失われます。GET を使用して値を渡すと、値が保持されます。

次の 2 つのオプションがあります。

  1. 直接の URL を作成し、投稿を使用してその値を渡します。例: URL - yourdomain.com/welcome.jsp。
  2. URL でパラメーターを渡すように他のプロジェクトに依頼します (GET 要求)。

私は両方をテストしましたが、問題なく動作します。

于 2013-03-25T09:51:55.027 に答える
3

ここにいくつかのチェックがあります。

1) JSP ページで method="post" を使用してフォームを作成します。

<form name="form1" action="nextpage" method="post">

2) JSP 上のコントロールの名前はトークンです。お気に入り。

 <input type="text" name="token" value="chintan"/>

3) ボタン手段の代わりに送信ボタンを取得します。

<input type="submit" name="submit" value="submit"/>

これらすべての点を確認した後。正確なエラーが表示されます。そして、あなたはそれを簡単に修正することができます。

于 2013-03-26T05:31:09.657 に答える
2

スクリーンショットによると、POST リクエストはHTTP 302 レスポンスになりました。これは、リダイレクトされたことを意味します。リダイレクトは基本的に、指定された URL で新しい HTTP リクエストを発行するようにクライアントに指示します。これは、以前のリクエストからすべてのリクエスト パラメータを魔法のように引き継ぐわけではありません。

リダイレクトされたリクエストで保持したいリクエストパラメータを、リダイレクト URL とともに渡す必要があります。

String token = request.getParameter("token");
response.sendRedirect("/CR?token=" + URLEncoder.encode(token, "UTF-8"));

別の方法は、リダイレクトをまったく実行せず、転送のみを実行することです。それが正しいアプローチであるかどうかは、質問で詳しく説明されていない具体的な機能要件に依存します。違いについて学ぶには、RequestDispatcher.forward() と HttpServletResponse.sendRedirect()を注意深く読み、もちろん、サーブレットの wiki ページも読んで、この種の要件に対してサーブレットを適切に使用する方法を学んでください。JSP ページは、この仕事に適したツールではありません。

于 2013-03-25T13:19:09.230 に答える
2

画像で見たように、http 応答コードは 302です

ブラウザーが jsp ページにアクセスするとき、それはリダイレクトからのものであり、転送要求ではないため、token パラメーターを取得できなかったのはそのためです。

つまり、ブラウズは、パラメータなしで jsp ページをリクエストします...

投稿されたアクションがサーブレットであるかどうかを確認してから、jsp ページにリダイレクトできます????

アクションコードを確認してコードを変更してください

response.sendRedirect....

request.getRequestDispacher("your jsp page path").forword(request, response)

または、フォーム送信をjspページに直接変更するだけです

<form action="your jsp page link">
...
</form>
于 2013-03-28T08:39:02.877 に答える
1

このための好ましいイディオムは、JSPではなくフォームからのサーブレットを使用することです。その後、サーブレットはJSPをビューとして使用できます。その理由の1つは、自分がしているように見えることを行わないようにすることです。つまり、ページにJavaコードを配置し、プレゼンテーションとロジックを混在させる可能性があります。

ただし、選択の余地がない場合は、JSTLの使用をお勧めします。

<c:forEach var="par" items="${paramValues}">
    <c:if test="${fn:startsWith(par.key, 'token')}"> 
        ${par.key} = ${par.value[0]};
    </c:if>
</c:forEach>

またはJavaの場合:

<%@ page import = "java.util.Map" %>
<%
Map<String, String[]> parameters = request.getParameterMap();
for(String parameter : parameters.keySet()) {
    if(parameter.toLowerCase().startsWith("token")) {
        String[] values = parameters.get(parameter);
    }
}
%>
于 2013-03-22T13:11:44.117 に答える
1

${param.token} を使用して、リクエスト パラメータを jsp ページに出力できます。

于 2013-03-22T15:37:24.090 に答える
0

のように印刷できます

${param.token}

これにより、値が出力されます

于 2013-03-22T13:08:46.187 に答える