3

サーブレットで doGet または doPost 呼び出しgetparameterxxx()を取得すると、1 つの簡単な場所でクエリ文字列または投稿データを取得するために使用できます。
呼び出しが GET の場合、URL/クエリ文字列からデータを取得します。
呼び出しが POST の場合は、すべて解析された投稿データが取得されます。

結局のところ、フォーム呼び出しに「アクション」属性を入れない場合を除きます。action パラメーターに完全修飾または部分修飾の URL を指定すると、すべてがうまく機能します。指定しない場合、ブラウザーは前のページの送信で行ったのと同じ URL を呼び出し、そこにクエリ文字列データが存在する場合、POSTデータと同様にそれを取得しますが、それらを区別する方法はありません.

それともありますか?リクエスト オブジェクトを調べています。ポスト データがどこから来ているかがわかります。GET データがどこから来ているかを把握しようとしているので、ポスト コールで GET データを消去し、ポスト データを消去できます。可能であれば、解析する前に GET 呼び出しを行います。

これを行う安全な方法は何ですか?

そして、推測してみましょう: アクション フィールドをフォーム タグに入れないようにしようとしたことはありません。:-)

4

4 に答える 4

3

そうです、フォームタグにアクションフィールドを入れないようにしたことは一度もありません;-)そして、まさにあなたが話していることのために、私はそうしませんでした. (また、有効な HTML ではないと思います)

GET パラメーターと POST パラメーターを区別する「クリーンな」方法はわかりませんが、 のメソッドを使用して生のクエリ文字列にアクセスでき、 のgetQueryString()メソッドをHttpServletRequest使用して生の POST データにアクセスできます。(Tomcat API のドキュメントを特にここで見ていますが、どちらも標準のサーブレット API の一部だと思います)必要に応じて、POST データと GET データを別々に解析できます。それらは両方とも同じようにフォーマットされます(または通常はそうあるべきです)。getInputStream()ServletRequest

name1=value1&name2=value2&...

アンパサンドがセミコロンに置き換えられている可能性があります (これは HTTP/1.1 で技術的に行うことができますが、最近まで知りませんでした)。

于 2009-01-19T22:41:25.237 に答える
2

HTML ではアクションはREQUIREDなので、クライアントによって動作が異なると思います。

于 2009-01-19T22:49:39.900 に答える
1

HttpServletRequest.getParameterxxx() メソッドは、GET パラメーターと POST パラメーターを区別しません。それらを本当に区別する必要がある場合は、GET パラメータには getQueryString() を使用し、POST データには getInputStream()/getReader() を使用して手動で解析する必要があります。

于 2009-01-19T22:40:20.230 に答える
0

私は ServletFilter を作成し、リクエスト オブジェクトをデコレートして少しクリーンアップします (ヒルトンが上で提案したものを使用)。これは、インターセプト フィルターの古典的なデコレーター パターンです。

于 2009-01-19T22:45:18.270 に答える