フロントコントローラーパターンで使用される、さまざまなアクションに使用されるサーブレットがあります。投稿されたデータがenctype="multipart / form-data"であるかどうかを判断できるかどうか誰かが知っていますか?これを決定するまでリクエストパラメータを読み取ることができないため、適切なコントローラにリクエストをディスパッチできません。
何か案は?
フロントコントローラーパターンで使用される、さまざまなアクションに使用されるサーブレットがあります。投稿されたデータがenctype="multipart / form-data"であるかどうかを判断できるかどうか誰かが知っていますか?これを決定するまでリクエストパラメータを読み取ることができないため、適切なコントローラにリクエストをディスパッチできません。
何か案は?
上記の request.getContentType() メソッドを使用する場合は、次のことに注意してください。
これを念頭に置いて、実行する必要があるチェックは次のとおりです。
if (request.getContentType() != null && request.getContentType().toLowerCase().indexOf("multipart/form-data") > -1 ) {
// Multipart logic here
}
はい、ユーザー エージェントのリクエストのヘッダーには、(少なくとも) HTML4 仕様で説明されているようにContent-type
含める必要があります。multipart/form-data
http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2
メソッドを呼び出して、コンテンツ タイプを取得できます。
http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/ServletRequest.html#getContentType()
http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2によると、コンテンツ タイプは「multipart/form-data」になります。
次のことを忘れないでください。
request.getContentType() は null を返す場合があります。
request.getContentType() は「multipart/form-data」と等しくない場合がありますが、それで始まる場合があります。
したがって、これらすべてを念頭に置いて:
if (request.getContentType() != null &&
request.getContentType().toLowerCase().indexOf("multipart/form-data") > -1 )
{
<< code block >>
}
ServletFileUpload は isMultipartContent() を実装しています。おそらく、必要に応じてこの実装を持ち上げることができます (オーバーヘッドを介して ServletFileUpload を作成するのではなく)。
http://www.docjar.com/html/api/org/apache/commons/fileupload/servlet/ServletFileUpload.java.html
これを判断するには、少なくともある程度はリクエスト パラメータを読み取る必要があります。ServletRequest クラスには、注目すべき getContentType メソッドがあります。