登録画面の作成

これまでの作業を踏まえて、登録画面を作成してみましょう。
先の実装に対して、以下のファイルを加えていきます。

ファイル 修正・追加内容
/WEB-INF/classes/test/TodoServlet.class actionパラメータが以下の場合の処理とデータベース処理を追加。
  • add
  • add_action
  • list
/WEB-INF/jsp/add.jsp 登録画面を表現するJSPファイルを作成。


Servletクラスの追加

Servletクラスに処理を追加します。
postメソッド要求時の処理として、actionパラメータがadd,add_action,listだった場合の処理を記述します。

ダウンロード TodoServlet.java

92~112行目:
 92: } else if ("list".equals(action)) {
 93:     // 一覧画面の処理
 94:     try {
 95:         Item[] items = getItems();
 96:         req.setAttribute("items", items);
 97:         forward = JSP_BASE + "list.jsp";
 98:     } catch (SQLException e) {
 99:         forward = doError(req, resp, e.getMessage());
100:     }
101: } else if ("add".equals(action)) {
102:     // 登録画面の処理
103:     try {
104:         User[] users = getUsers();
105:         req.setAttribute("users", users);
106:         forward = JSP_BASE + "add.jsp";
107:     } catch (SQLException e) {
108:         forward = doError(req, resp, e.getMessage());
109:     }
110: } else if ("add_action".equals(action)) {
111:     // 登録画面からの入力受付
112:     forward = doAddAction(req, resp);

アクションの処理を追加。
add, add_action, listパラメータが要求された場合の処理を追記します。
一覧処理と同じ要領でJSPに渡すデータを設定していきます。
172~211行目:
172:     private String doAddAction(HttpServletRequest req, HttpServletResponse resp)
173:             throws ServletException, IOException {
174:         try {
175:             String name = req.getParameter("name");
176:             String userID = req.getParameter("user_id");
177:             String expireYear = req.getParameter("year");
178:             String expireMonth = req.getParameter("month");
179:             String expireDay = req.getParameter("day");
180:             if (name == null || userID == null || expireYear == null
181:                     || expireMonth == null || expireDay == null) {
182:                 return doError(req, resp, "不正なパラメータです。");
183:             }
184:             name = new String(name.getBytes("iso-8859-1"), "utf-8");
185:             Item targetItem = new Item();
186:             User user = getUser(userID);
187:             if (user == null) {
188:                 return doError(req, resp, "不正なパラメータです。");
189:             }
190:             targetItem.setUser(user);
191:             Date expireDate = getDate(expireYear, expireMonth, expireDay);
192:             if (expireDate == null) {
193:                 return doError(req, resp, "不正なパラメータです。");
194:             }
195:             targetItem.setExpireDate(expireDate);
196:             targetItem.setName(name);
197: 
198:             executeUpdate(createInsertSQL(targetItem));
199: 
200:             // アイテムを取得する
201:             Item[] items = getItems();
202: 
203:             // アイテムを要求オブジェクトに格納する
204:             req.setAttribute("items", items);
205: 
206:             // 一覧を表示する
207:             return JSP_BASE + "list.jsp";
208:         } catch (SQLException e) {
209:             return doError(req, resp, e.getMessage());
210:         }
211:     }

add_actionの処理を記述。

日本語を含むパラメータをServletで正しく受け取るためには、new String(name.getBytes("iso-8859-1"), "utf-8")のようにして、 一度、文字コード「iso-8859-1」でバイト列に変換した後、改めて文字コード「UTF-8」で文字列オブジェクトに変換する必要があります。


JSPファイルの記述

次に、JSPファイルを記述します。
先に作成したadd.htmlの拡張子をjspにリネームし、WEB-INF/jspディレクトリにコピーした後、 Javaコードを追加します。

一覧画面と同じ要領で変数埋め込みと繰り返し・条件分岐を埋め込みます。

ダウンロード add.jsp


ここまでのファイル

ここまででプロジェクトディレクトリの内容は以下のようになります。
正しく作成できているか、確認してください。

ダウンロード todotest_3.zip


デバッグ・動作確認

ブラウザで以下のURLを開き、動作確認をおこないます。
http://localhost:8080/todotest/todo?action=login

TODO_USERテーブルに登録したユーザIDとパスワードでログインし、 「作業登録」ボタンを押した後、 以下のような画面が表示されれば成功です。


作業登録画面

実際に入力欄に文字を入力し、作業を登録してみましょう。
エラーが表示される場合は、デバッガでどこに問題があるのか調べてみてください。