パッケージ com.yamicha.upload

このパッケージは、フォームのマルチパートデータを通常の HttpServletRequest を使用するのと全く同じように使用することを可能にします。

参照先:
          説明

クラスの概要
FileHolder このクラスは、送信されたファイルを表します。
FileServletRequest このクラスは、HttpServletRequest を multipart/form-data に対応するようラップします。
 

パッケージ com.yamicha.upload の説明

このパッケージは、フォームのマルチパートデータを通常の HttpServletRequest を使用するのと全く同じように使用することを可能にします。
このパッケージで定義されたメソッドを使用する前に、必ず ServletRequest 内の setCharacterEncoding を使用し、エンコードを指定するようにしてください。この操作を行わなかった場合、文字コードは UTF-8 であるものとみなされます。それ以外の文字コードを使用する場合には、事前にこの操作を行ってください。
これを行わなかった場合、マルチバイト文字が正しく変換されません。

// req : HttpServletRequest 型の変数
// このパッケージのメソッドを呼び出す前に、文字コードを指定しておく
req.setCharacterEncoding("Shift_JIS");
その後で FileServletRequest 型の変数を作成します。コンストラクタには HttpServletRequest 型を渡すようにします。
FileServletRequest request = new FileServletRequest(req);
データが multipart/form-data である場合でも、そうでない場合でも、これで全く同じように扱うことができます。送信データの種類に限らず、単に getParameter("param_name") メソッドを呼び出せば、パラメータを取得できます。
唯一操作が違うのは、送信されたファイルデータを受け取る場合です。ファイルを受け取る際には、まず getFile("param_name") メソッドを呼び出します。FileHolder 型の変数が返りますので、それに対して必要な操作を実行します。
FileHolder fh = fs.getFile("file");

String name = fh.getFileName(); // データのファイル名を取得
byte b[] = fh.getData();        // データの中身を取得
注意点としては、multipart/form-data ではない場合、input type="file" フォームによってファイル名が指定された場合には、ファイル名を getParameter("param_name") より取得可能ですが、multipart/form-data の場合、getParameter("param_name") ではファイル名が取得できません。
その代わり、FileHolder fh = getFile("param_name") で FileHolder を取得し、fh.getFileName() メソッドを使用すれば、ファイル名を取得することができます。
その他、FileServletRequest.getFileNames() メソッドなどを使用し、送信されたファイルの一覧を取得するなども可能です。