- Home ›
- サーブレット/JSP入門 ›
- スケジュール管理 ›
- HERE
カレンダー画面でスケジュールの表示
前回でスケジュールの登録が行えるようになりましたので、今度はカレンダー画面を開いた時に登録されているスケジュールを表示するように変更してみます。
カレンダーの日付毎にアイコンを表示している箇所で、日付毎にデータベースへ問い合わせを行いその日付のスケジュールがあれば表示するようにしています。
for (int i = startDayNo ; i < startDayNo + 7 ; i++){ /* 途中略 */ /* スケジュールの表示 */ sb.append("<span class=¥"small¥">"); try { String sql = "SELECT * FROM schedule WHERE userid = ? and scheduledate = ? ORDER BY starttime"; PreparedStatement pstmt = conn.prepareStatement(sql); String startDateStr = year + "-" + (month + 1) + "-" + calendarDay[i]; pstmt.setInt(1, 1); pstmt.setString(2, startDateStr); ResultSet rs = pstmt.executeQuery(); while(rs.next()){ String starttime = rs.getString("starttime"); String endtime = rs.getString("endtime"); String schedule = rs.getString("schedule"); if (starttime == null || endtime == null){ sb.append("* " + schedule + "<br>"); }else{ String startTimeStr = starttime.substring(0, 5); String endTimeStr = endtime.substring(0, 5); sb.append(startTimeStr + "-" + endTimeStr + " " + schedule + "<br>"); } } rs.close(); pstmt.close(); }catch (SQLException e){ log("SQLException:" + e.getMessage()); } sb.append("</span>"); sb.append("</td>"); } sb.append("</td>"); }
データベースへの接続をinit()メソッド内で行う
今まではdoGetメソッド又はdoPostメソッド内でデータベースへの接続と切断を記述していましたが、ここからはinitメソッドにて接続を行い、destroyメソッドで切断を行うように変更します。
doGetメソッド内に記述していた場合にはサーブレットが呼び出されるたびにデータベースへの接続と切断が発生してしまうのに対して、initメソッド内に記述した場合にはサーブレットが最初にロードされた時にデータベースに接続が行われ、サーブレットが破棄される時に切断が行われるようになります。
protected Connection conn = null; public void init() throws ServletException{ 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); }catch (ClassNotFoundException e){ log("ClassNotFoundException:" + e.getMessage()); }catch (SQLException e){ log("SQLException:" + e.getMessage()); }catch (Exception e){ log("Exception:" + e.getMessage()); } } public void destory(){ try{ if (conn != null){ conn.close(); } }catch (SQLException e){ log("SQLException:" + e.getMessage()); } }
サンプルプログラム
修正したプログラムは次のようになります。
コンパイルして作成されたクラスファイルを「(root)¥WEB-INF¥classes¥」ディレクトリに配置します。
D:¥servlet-sample | +--schedule | +-- (top.html) | +-- WEB-INF | | | +-- classes | | | +-- (MonthView5.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>MonthView5</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」へアクセスします。次のように登録されているスケジュールが表示されます。
ここで画面左上の「前月」をクリックして下さい。
他の月に移動しても、その月に登録されているスケジュールが表示されます。
( Written by Tatsuo Ikura )