せっかくこの長老マシンに苦労してMySQLとTomcatをインストールしてJDBCとservletが動くようになったのに、これまで簡単なテストプログラムしか動かしておらず、有効活用できていなかったし、あまり勉強にもなっていなかったので、Javaの復習とSwingの勉強を兼ねて、JDBC servletと連携するJavaアプレットを作ってみた。
3択首都当てクイズのページへ
アプリケーションのネタが思いつかなかったので、とりあえず3択クイズにした。
Servletとappletの役割分担は、MVCモデルに従って、クイズの作成、正誤判定、終了判断といったモデルは全てservlet側で行い、applet側は表示だけを行うようにした。すなわち、Mをサーバー側、VとCをクライアント側に分けた。そのため、appletは1問ずつ問題をservletから取得し、解答者の選択をservletに送っている。クイズの終了判定もservletが行うため、servletから問題でなく成績表が送られてくると終了という設計にした。
セッション管理にはjavax.servlet.HttpSessionを使っており、複数のクライアントが同時にクイズを始めても、servletで全てのクライアントの途中経過が管理される。Cookieが無効にされているとサーバー側からセッションIDが送られ、クライアント側でURLのquery部にセッションIDを付けるようにしているので、CookieがOFFでも動くはず。
クイズの問題はMySQLのデータベース上にあり、servletは1問ずつJDBC経由で問題を取得する。1つのセッションの中で問題が重複しないように、出題する問題の番号だけはセッションの新規作成時に全て決めておくようにした。
クライアント側の描画にはSwingを使用した。CardLayoutでペインを切り替えるようにしている。クイズ画面の動く背景は、SwingタイマーとAWTを使って描画している。最初はこの背景描画が非常に重く、試行錯誤して改良している内に、事前に画像ファイルを用意してタイル貼りする方が負荷が軽いことが判明したが、画像ファイルを作成するのが面倒なので、そこまではしなかった。
基本的な所は数日でできたのですぐ完成するかと思ったが、細かい所で何かにつけ時間がかかり、結局1ヶ月以上かかってしまった。7割くらいは日本語の文字列処理とSwingとの格闘に費やしたような気がする。特にレイアウトについてはなかなか思い通りに表示されず、3日かかって諦めた。
それから、Javaのバージョンが1.3(これしか動かない)なので@Overrideやjava.io.formatや正規表現など使えない修飾子やAPIが多くて不便だった。一々APIの対応バージョンを確認しないといけないのは面倒だ。
ななし
よければjavaのソースを教えてください。
ynomura
ここに置いてます。