2009-08-27 6 views
14

HttpServletRequestオブジェクトから生のHTTPリクエストを取得することは可能ですか?可能であれば、生のリクエストをStringとして見たいと思います。HttpServletRequestからRawリクエスト文字列を取得する

リクエストの全文を取得する必要があります。この場合はPOSTリクエストであるため、URLは役に立ちません。これは複数の部分からなるフォームの一部なので、 "getParameterNames()"または "getParameterValues()"を呼び出すことはできません。

は、あなたがservlet filterを必要とするよう

+0

url以外のリクエストについて知りたいことは何ですか。 –

+0

カスタムJSFコンポーネントがあります。その中に "decode()"メソッドがあり、どの要素が選択されているかを調べる必要があります。マルチパーツ以外のフォームでは、「getParameterValues( 'myparam')」を呼び出して値を取得できますが(選択したアイテムのリスト)、何も返されないマルチパートフォーム。だから私は手動で選択した項目を取得するために生データを解析する必要があります。サーブレットフィルタは自分のカスタムコンポーネントにのみ影響するため、サーブレットフィルタは使用できません。 –

+1

私は必要なパラメータを得る別の方法を考え出しました。 FacesContext.getExternalContext.getParameterValuesMap()を使用すると、フォームの種類に関係なく必要なものが表示されます。おかげですべて –

答えて

0

が鳴り、ありがとうございます。 multipart/form-dataを処理する標準的な方法はありませんので、wrapping the HttpServletRequestの場合は、このデータを適切にキャッシュする必要があります。

+3

注:この回答はもはや正確ではありません。サーブレット3.0(JEE6)は、 'multipart/form-data'のサポートを導入しました。 http://download.oracle.com/javaee/6/api/javax/servlet/annotation/MultipartConfig.html – McDowell

1

または、パラメータ名と値を文字列形式のオブジェクトに変換して要求コンテキストで設定するためのインターセプタを書くことができます。フィルタを使用することもできます。

4

何かトラブルシューティングをしているようです。生のフォームデータを見ている間に、複数の部分からなるフォームコンポーネントをドロップするだけではいかがですか。以下のJSPスニペットを使用してフォームデータを作成することができます。

ServletInputStream in = request.getInputStream(); 

をして、InputStreamの定期readのメソッドを使用します。

<% 
Enumeration en = request.getParameterNames(); 
String str = ""; 
while(en.hasMoreElements()){ 
    String paramName = (String)en.nextElement(); 
    String paramValue = request.getParameter(paramName); 
    str = str + "&" + paramName + "=" + URLEncoder.encode(paramValue); 
} 
if (str.length()>0) 
    str = str.substring(1); 
%> 
8

次の操作を行うことにより、生のHTTPリクエストを読み取ることができます。

希望に役立ちます。

1

Stringへのリクエスト全体を取得したい場合は、ApacheのIOUtilsライブラリを使用して1行のコードで行うことができます。

String myString = org.apache.commons.io.IOUtils.toString(request.getInputStream()); 
関連する問題