2016-10-26 19 views
0

クエリパラメータとPOSTリクエストの基本を確認しながら混乱することがあります。 以下は、私が「uname2」などのテキストボックスのユーザー名に値を入力し、[送信]ボタンをクリックすると、このコードを実行する上でのindex.jsp同じリクエストURLの文字列文字列とPOSTリクエスト

<!DOCTYPE html> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Index Page</title> 
</head> 
<body> 
    <form name = "testForm" action="index.jsp?username=uname1" method = "POST"> 
     Username : <input type="text" name="username" value=""/> 
     <input type="submit" value="Submit"> 
    </form> 

<% 
    String username = request.getParameter("username"); 
    out.println("Username = " + username); 
%> 

</body> 
</html> 

のコード部分で、出力は「uname1」として示されています。

その後、 'testForm'フォームのメソッドを 'GET'として変更し、サーバー上でファイルを再実行します。 ユーザー名を「uname2」と入力して「送信」ボタンをクリックすると、「uname2」として出力されます。

この動作を理解できません。誰も私がなぜこれが起こっているのか理解するのを助けてくれますか?

答えて

0

GET、POST、または両方の組み合わせを使用して、同じ名前の複数のパラメータを送信できるためです。 適用順序は完全に任意ですです。

サーブレットAPIドキュメントを見て、あなたは次のように表示されます。

getParameterValues

java.lang.Stringで[] getParameterValues(のjava.lang.String名)

要求パラメータの値がすべてであるすべての値を含むStringオブジェクトの配列を返します。パラメータが存在しない場合はnullを返します。 パラメータの値を含むStringオブジェクトの配列: - 値要求された戻り値パラメータの名前を含むString名前: パラメータは、単一の値を持つ場合、配列は1

パラメータの長さを有し関連項目のgetParameter(java.lang.String)を

方法getParameterValue(文字列名)は便宜として提供される:

のgetParameter

java.lang.StringでのgetParameter(java.lang.Stringで名)パラメータが が存在しない場合

文字列としてリクエストパラメータの値 を返し、またはnull。要求パラメータは、要求とともに送信される追加情報です。 HTTPサーブレットの場合、パラメータはクエリ文字列またはフォームデータ に含まれています。 パラメータに値が1つしかない場合は、この方法を使用してください。パラメータの値がよりも より大きい場合は、getParameterValues(java.lang.String)を使用します。あなたは、多値パラメータでこの方法を使用する場合

は、返される値は getParameterValuesによって返される配列の最初の値に等しいです。

http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html

+0

詳細な回答アランいただきありがとうございます。私はこの動作をgetParameterValue()メソッドの側面から理解することができます。また、POSTの値のような要求のタイプの観点からルールがある場合、GET値をオーバーライドする場合もあれば、逆の場合もありますか? –

+0

私は認識していません。サーバーが一貫した方法でそれらを処理するかもしれませんが、観察された振る舞いに基づいてロジックを立てることは危険です。 –

-1

この場合、getParameter()はPOSTではなく、GETから取得しているためです。

あなたの行動は明示的にuname1であることをユーザ名で指定していますが、あなたのPOSTはuname2と言っています。私の頭の上からjavaがどのパラメータを受け入れるかを決めるのは本当にわかりませんが、あなたのポストフォームのクエリを試しているパラメータとそれは正常に動作するはずです。

-1

デフォルトでは、httpはGETメソッドを使用します。ここでは、アクション内の明示的なユーザー名を指定し、POSTを使用して送信しようとしています。私はhttpがPOSTではなくGETメソッドを通してそのデータを送信していると思う。

関連する問題