第5章 デザインパターン適用の勘所
Authors:Agata Toshitaka
- M子:
-
「先輩、商品情報登録の部分できましたよ(リスト1)。
サーブレットは何度もやっているので、簡単でした。」
リスト1 FileUploadServlet1.java
public class FileUploadServlet1 extends HttpServlet {
protected void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
try {
@ |
FileUpload fileUpload = new FileUpload();
fileUpload.setSizeMax(1000000);
List fileItems = fileUpload.parseRequest(req);
|
String itemCode = null;
A |
for (Iterator iter = fileItems.iterator(); iter.hasNext();) {
FileItem item = (FileItem) iter.next();
if(""code".equals(item.getFieldName())) {
itemCode = item.getString();
}
}
|
B |
for (Iterator iter = fileItems.iterator(); iter.hasNext();) {
FileItem item = (FileItem) iter.next();
if ("file".equals(item.getName())) {
String filename = item.getName();
byte[] data = item.get();
if ("item.jpg".equals(filename)) {
ImageDao dao = new ImageDao();
dao.update(itemCode, filename, data);
} else if (""info.txt".equals(filename)) {
InfoDao dao = new InfoDao();
String info = new String(data, "Windows-31J");
dao.update(itemCode, info);
}
}
}
|
} catch (FileUploadException e) {
throw new ServletException(e.getMessage(), e);
}
}
}
- O先輩:
-
「どれどれ、なるほどわかりやすくシンプルにまとまっているね。」
- M子:
-
「でしょ。前に先輩に言われたとおり、データベースアクセスはDAOクラスにまとめたんですよ。
それから、ファイルアップロードはWebで調べてJakarta Commons FileUploadを使いました。」
- O先輩:
-
「良く調べたね、えらい! ところで、作ってて気になったり、もっとうまく書けそうな部分ってなかった かい?」
- M子:
-
「そうですねぇ、実はリスト1-@Aが気になっているんですよ。
フィールド名に一致するFileItemを見つけるためにループを回しているんですけど、商品コードを先に取得しないといけないんで、似たようなwhileのループが2箇所もでてきちゃっていて・・・」
- O先輩:
-
「確かにそうだね。フィールド名からFileItemが取得できるユーティリティクラスがあったら便利だね。
これから別のサーブレットでもCommons FileUploadを使うことが決まっているし、ユーティリティクラスにまとめてくれないかな。
リスト1-@の最大ファイルサイズの設定やマルチパートデータの取得処理も、Commons FileUploadを使うときには定型的な処理になるから、これもユーティリティに入れちゃおうか。」
- M子:
-
「ユーティリティクラスですね、わかりました。やってみます」