、すべてのクエリ文字列パラメータとポストデータパラメータのマップを返しますgetParameterMap
。 のHttpServletRequest - 、クエリ文字列パラメータを取得します<a href="http://download.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequest.html">HttpServletRequest</a>でno形式のデータ
答えて
反しては、パラメータマップの両方が存在することができると述べました。
私が見る最良の方法は、queryStringに "&?<parameterName> ="が含まれているかどうか、parameterMapをプロキシして各パラメータの検索チェックを行うことです。 parameterNameがQerubが指摘したように、このチェックは、行うことができる前にエンコードされたURLにする必要があることを
注意。
あなたに解析を節約し、まだあなたにだけURLパラメータを与えます。私は怖い
素晴らしい提案!私は間違いなく構文解析を避けようとしています – JasonStoltz
このチェックを行う前に 'parameterName'をURLエンコードする必要があることに注意してください。 – qerub
@Qerub:Good catch、thx。 – DoubleMalt
はポストパラメータとは別に解析されたクエリ文字列パラメータを取得する方法はありません。そのようなAPIがないと、おそらくあなたのデザインをチェックすべきであるということを意味するかもしれません。なぜPOSTを送信するときにクエリ文字列を使用していますか?実際にURLにさらにデータを送信する場合は、REST風の規約を使用してください。代わりに
http://mycompany.com/myapp/myservlet?first=11&second=22
を送信すると言う:
私はPOSTで元のフォームに渡されたすべてのクエリ文字列を維持したいので、POSTでクエリ文字列パラメータを使用しています。これは主に目的を追跡するためのものです...追跡ライブラリがクエリ文字列内の特定のパラメータを探すのは間違いないので、RESTのようなコンベンションがこの場合に機能するかどうかはわかりません。 – JasonStoltz
特に、クエリ文字列パラメータにRESTのような規則を使用することをお勧めする理由は何ですか?利点が何であるか分かりませんか? – JasonStoltz
"そのようなAPIがないと、おそらくあなたのデザインをチェックする必要があるかもしれないという事実を知ってください。"この場合、Oracleは設計をチェックする必要があります。 –
を、それが多くのクエリ文字列とメッセージ本体がちょうど2つであると信じていました時に作成されたため、サーブレットAPIは、この機能が欠けていますパラメータの目的が基本的に異なっていることに気付かずに、パラメータを送信する方法が異なります。
クエリ文字列パラメータのfoo =バー彼らは(多くのリソースの集合かもしれない)リソースを識別するのに関与しているので、「42歳のすべての人」のように、URLの一部です:?
GET/people?age = 42
POSTまたはPUTのメッセージ本文パラメータは、ターゲットリソースへの変更を表すためのものです。 ?属性「髪」に値を設定する為替:
PUT /人の年齢= 42
毛=グレー
だから、同時に、クエリパラメータと体の両方のパラメータを使用して間違いのRESTfulです別々の目的のために使い分けることができます。この機能はJavaサーブレットAPIには欠けています。クエリ文字列が
username=james&password=pwd
のようなものである場合には他の回答がサーブレットを使用してクエリ文字列パラメータを取得する方法はありません状態として
はあなたはこの
request.getParameter("username");
これは、Javaサーバーのページを使用するためのものです。 – Jorgesys
2番目のリクエストストリームを台無しにするだろう、私は質問がユーザ名を取得し、後で処理のための入力ストリームを保持する方法であると仮定します –
を行うことができます名前を取得するには、request.getQueryString()
使用することができますAPI。
私は、クエリパラメータを取得する最善の方法は、クエリ文字列を自分で解析することだと思います。 (クエリ文字列にパラメータが含まれているかどうかはパラメータの繰り返しとチェックの複雑さが増しています)
クエリ文字列パラメータを取得するコードは以下のとおりです。 apacheのStringUtilsとArrayUtilsの使用。
public static Map<String, String[]> getQueryParameters(HttpServletRequest request) {
Map<String, String[]> queryParameters = new HashMap<>();
String queryString = request.getQueryString();
if (StringUtils.isEmpty(queryString)) {
return queryParameters;
}
String[] parameters = queryString.split("&");
for (String parameter : parameters) {
String[] keyValuePair = parameter.split("=");
String[] values = queryParameters.get(keyValuePair[0]);
values = ArrayUtils.add(values, keyValuePair.length == 1 ? "" : keyValuePair[1]); //length is one if no value is available.
queryParameters.put(keyValuePair[0], values);
}
return queryParameters;
}
私はこれをはるかによく受け入れる答えを考慮して、溶液 –
- 1. WebAPIからJSON形式のXmlと文字列データを取得
- 2. Owinがクエリ文字列パラメータを取得
- 3. 取得クエリ文字列パラメータ3
- 4. Laravelクエリ文字列とパラメータを取得しますか?
- 5. rubyファイルのソースコードを文字列/テキスト形式で取得する
- 6. Djangoのurlパターンでクエリ文字列パラメータを取得する
- 7. 空のURIクエリ文字列パラメータ: "a =&b ="と "a&b"
- 8. mysqlクエリはstatus.phpのデータと配列形式を取得します
- 9. angular2クリックでjson形式の文字列を取得
- 10. 文字列のURLを検出し、 "<a href ..."タグで囲みます
- 11. NMEA形式GPSデータの文字列
- 12. MVC形式で特定の形式で表示し、クエリ文字列
- 13. URLパラメータのクエリ文字列をAngularJSで取得
- 14. WebApiDataSourceRequestModelBinder複数列の並べ替えクエリ文字列パラメータの形式
- 15. 文字列形式のカールレスポンスを取得する
- 16. OWL形式のオントロジーから文字列を取得する
- 17. Javaプレイフレームワークでクエリ文字列パラメータを取得する方法は?
- 18. データをフォームから配列形式で取得します。
- 19. Android:Double形式の文字列形式
- 20. VertexインスタンスからJson形式の文字列を取得
- 21. MQメッセージIDを文字列形式で取得
- 22. scapy:シンボリック/文字列形式のDNSQR/DNSRRフィールド値を取得します。
- 23. Javaの表形式のデータ形式とはどのように表形式のデータ形式を文字列配列の一覧に保存できますか?
- 24. HttpServletRequestからRawリクエスト文字列を取得する
- 25. href式<a href="javascript:;"></a>の機能は何ですか?
- 26. 角uiルータ - クエリ文字列パラメータのみを取得
- 27. AngularJS $ httpカンマ区切りのクエリ文字列パラメータを取得
- 28. 現在までの文字列形式
- 29. 2つのクエリ文字列パラメータの取得
- 30. ローカル日付形式を文字列として取得します。
どういう意味ですか?そこには 'GET'または' POST'のいずれかのパラメータしか存在できません。 – Jacob
POST要求に対してクエリ文字列パラメータを持つことができます。その場合、それらはすべて "getParameterMap"によって返されます。 – JasonStoltz
ああ、ありがとうございます。なぜ両者が必要なのですか?好奇心が強いのはなぜですか? – Jacob