- Home ›
- サーブレット/JSP入門 ›
- スケジュール管理
スケジュールの登録
では作成したスケジュールをデータベースに登録してみます。
スケジュールの登録には「ScheduleInsert」サーブレットを別途用意し、「NewSchedule」内のフォームから呼び出されるようにしてみます。
「NewSchedule」サーブレットからは日付や時刻、スケジュールの内容などをパラメータとして渡されてきます。まずパラメータを取得して表示するところまでを作成してみます。「NewSchedule」サーブレットのフォームの送信先を次のように変更します。
sb.append("<form method=\"post\" action=\"/schedule/ScheduleInsert\">");
※この部分だけを変更したものを「NewSchedule3.java」として保存しました。
今回は「POST」で送信しますので、受け取る側の「ScheduleInsert」サーブレットでも「doPost()」メソッドで処理します。
次に「ScheduleInsert」サーブレットを作成します。「NewSchedule」サーブレットから送られ来るパラメータを取得し、データベースへINSERTを行います。プリペアドステートメントをを利用します。
※プリペアドステートメントについては『prepareStatementの使用』を参照して下さい。
String dateStr = year + "-" + month + "-" + day;
String startTimeStr = shour + ":" + sminute + ":00";
String endTimeStr = ehour + ":" + eminute + ":00";
Connection conn = null;
String url = "jdbc:mysql://localhost/servletschedule";
String user = "scheduleuser";
String password = "schedulepass";
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection(url, user, password);
String sql = "insert into schedule (userid, scheduledate, starttime, endtime, schedule, schedulememo) values (?, ?, ?, ?, ?, ?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, 1);
pstmt.setString(2, dateStr);
pstmt.setString(3, startTimeStr);
pstmt.setString(4, endTimeStr);
pstmt.setString(5, plan);
pstmt.setString(6, memo);
int num = pstmt.executeUpdate();
pstmt.close();
}catch (ClassNotFoundException e){
out.println("ClassNotFoundException:" + e.getMessage());
}catch (SQLException e){
out.println("SQLException:" + e.getMessage());
}catch (Exception e){
out.println("Exception:" + e.getMessage());
}finally{
try{
if (conn != null){
conn.close();
}
}catch (SQLException e){
out.println("SQLException:" + e.getMessage());
}
}
またデータベースへの登録が完了したら「MonthView」サーブレットへリダイレクトします。リダイレクトする場合にもパラメータとして年と月に関する情報を渡すのを忘れないようにします。
StringBuffer sb = new StringBuffer();
sb.append("/schedule/MonthView");
sb.append("?YEAR=");
sb.append(year);
sb.append("&MONTH=");
sb.append(month - 1);
res.sendRedirect(new String(sb));
これでスケジュールの登録が完了したら、カレンダー画面に戻るようになります。
作成したプログラムは次のようになります。
ScheduleInsert1.java [HTMLで表示]
コンパイルして作成されたクラスファイルを「(root)\WEB-INF\classes\」ディレクトリに配置します。
D:\servlet-sample
|
+--schedule
|
+-- (top.html)
|
+-- WEB-INF
| |
| +-- classes
| |
| +-- (MonthView4.class)
| |
| +-- (NewSchedule3.class)
| |
| +-- (ScheduleInsert1.class)
|
+-- img
また作成したサーブレットを呼び出せるように「web.xml」を次のように書き換えます。
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<servlet>
<servlet-name>MonthView</servlet-name>
<servlet-class>MonthView4</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MonthView</servlet-name>
<url-pattern>/MonthView</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>NewSchedule</servlet-name>
<servlet-class>NewSchedule3</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>NewSchedule</servlet-name>
<url-pattern>/NewSchedule</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ScheduleInsert</servlet-name>
<servlet-class>ScheduleInsert1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ScheduleInsert</servlet-name>
<url-pattern>/ScheduleInsert</url-pattern>
</servlet-mapping>
</web-app>
それではブラウザで「http://localhost:8080/schedule/MonthView」へアクセスします。次のように表示されます。
ここで「15日」の箇所にあるアイコンをクリックして下さい。
スケジュールの内容を適当に入力してから「登録する」ボタンをクリックします。すると「ScheduleInsert」サーブレットが呼び出されデータベースへの登録が行われます。その後「MonthView」サーブレットが呼び出されてカレンダーが表示されます。
見た目上はデータベースへスケジュールが登録されたか分からないのですが、MySQLで確認してみると次のように登録されていることが確認できます。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。