QuestionnairToolの開発 中村太一
QuestionnairTool アンケート製作者はWeb上からアンケートを生成(HTML)する。 アンケートの設問、回答は全てDataBaseに登録される。 DB+Servlet+JSPで開発。 「JSPによるWeb開発」翔泳社、の第10章FaqToolを参考 URL: http://www.shoeisha.com/book/hp/pc/book/JSP/index.htm 原書のサポートページ(英語) http://www.manning.com/Fields/index.html
目的のアンケート 生成するアンケート。 Title ・・・・・ JSPで作られるHTML ・ ・ このアンケートの説明とか ・・ Q1: 設問1 A1:回答(チェックボックス、リスト、TextAreaなど) Q2:設問2 A2:回答(チェックボックス、リスト、TextAreaなど) ・ 生成するアンケート。 JSPで作られるHTML Title ( title ) 作成日時 ( date) 説明 ( comment ) 対象とする回答者 ( target ) 設問と解答の選択肢 (複数) 例 Infoseek ・
回答用Webページ 「プログラム」 <Menu1>アンケート製作者のリストをDataBaseから受け取って選択できるようにする。 どのアンケートに 答えるか選択 Qstnn アンケート に回答 Save 保存、 終了 「回答者」 <Menu1>アンケート製作者の一覧(リンクしてある)から選ぶ。 <Menu2> Menu1で選んだ製作者が作ったアンケートの一覧がリンクつきで表示されるので一つ選ぶ <Qstnn> アンケートに答えて「送信ボタン」を押す。 不備があれば、戻される(不備がある部分がマーキングされる)。 <Save> 無事送信されたことを報告する。 「プログラム」 <Menu1>アンケート製作者のリストをDataBaseから受け取って選択できるようにする。 <Menu2>Menu1で選んだ製作者が作ったアンケートの一覧を表示し、選択させる。 <Qestnn>アンケートの本体。Menu2で選んだアンケートの内容をDetaBaseから受けとってHTMLにする。 送信されたアンケートに不備があった場合、その部分をマーキングしてもう一度表示、このとき以前回答者が入力したデータも入れておく。 <Save>登録されたことの報告とか
管理用Webページ <Authentication> 認証用ページ。IDとPasswordで個人を特定する。Table”Users” <NewAcount> 新規UserだったらIDとPassを決めてもらい Table”Users”に追加する。 <List> Userの製作したアンケートが一覧として表示される。(チェックボックスで選択) 「編集」「新規製作」「結果表示」から選ぶ。 <Edit> 既存のアンケートを修正する。製作用ページには修正されるアンケートのデータが反映されていなければならない。 <NewQstnn> 新しくアンケートを作る。 <Result> 集計結果を表示する。グラフなどを出せるといいかも。 Appletで表示 OR Servletでグラフを生成。 <Save> 変更内容を表示して保存してよいかの確認を求める。 < Authentication > 認証 userの特定 既存User 新規 <NewAcount> 新規User の登録 < List > そのUserの作った アンケートの一覧表示 [結果表示] 「編集」 「新規」 から選ぶ <Edit> 選択した アンケート の編集 <NewQstnn> 新規に製作 <Result> 選択した アンケート の結果を見る <Save> 確認と保存
Servlet JSPの制御 JSP A JSP B DB Menu.jsp <Commandパターン> ・JSP上のボタンには、それぞれに対応するCommandオブジェクトがServlet内にあり。 CommandオブジェクトはJSPのフォームデータから受け取った情報を元に、DBやSessionを更新したり、次に行くJSPを決定するなどの機能を提供する。 ・これにより、JSPに次のJSPへのリンクを書かないので独立性がたかまり、管理がしやすくなる。 JSP A JSP B buttonA buttonB Servlet buttonAが押されると 起動するCommandA buttonBが押されると 起動するCommandB DB
必要なテーブル 1 必要なテーブルは5つ 認証用にアンケート製作者のIDとPassの入っている“Users” 必要なテーブル 1 必要なテーブルは5つ 認証用にアンケート製作者のIDとPassの入っている“Users” アンケートの名前、製作者、製作日時、対象、説明などの入った “Questionnairs” アンケート内の個々の質問を収める “Questions”。 アンケート(個々の質問ではない)回を回答した人の情報、答えたアンケート、日時などを収める“Responces”テーブル 個々の質問の回答を収める“Answers”テーブル。
テーブルの構成 Users Questionnairs Responses Questions Answers 名前 型 説明 ID AutoNo user String 新規製作のときユーザが決める Pass 新規製作のときユーザーが決める Date 登録日時 Questionnairs 名前 型 説明 ID AutoNo MakerID Int ==Users.ID 製作者のID Title String アンケートのタイトル Target このアンケートに答えるべき人 Commnet コメント、説明 Date 製作日時 Responses 名前 型 説明 ID AutoNo MakerID Int ==Users.ID Reqstnnr ==Questionnair.ID 答えたアンケート Responder_name String 答えた人の名前 Responder_id 答えた人のID Date 回答日時 Questions 名前 型 説明 ID AutoNo Parent Int 親 ==Questionnairs.ID Number QuestionNumber 何番目の質問か Question String 質問 opthintype 回答の種類( text, radio, check, menu, list, multiple ) Count 選択肢の数 selections 選択肢の内容 複数はカンマで区切る Answers 名前 型 説明 ID AutoNo Parent Int 親==Responses.ID Number 何番目か selections String 答え
Repository データベースを操作する全てのメソッドを提供 p.264 Tableに対するBeanが5つあるので、Beanごとにクラスを分ける。 必要なmethod:get(単数), get(全て), update, put, remove の5つ UserRepository のコード Repository UserBean getUser(int id) UserBean[] getAllUsers() ・ QstnnrBean getQstnnr(int id) QstnnrBean[] getAllQstnnr() ・ ・ 25メソッド QstnnrRepository のコード
新規 Authentication (認証) Authentication.jsp Newacount.jsp アンケートの 一覧表示 name pass Ok Pass(確認 MSG:新規登録します name 新規 pass 新規 Ok すでに使われている パスワード違い アンケートの 一覧表示
Questionを生成する 下の図はInfoseekのアンケートを見本にしてアンケートの個々の質問(Question)を生成している。 QuestionMaker.jspではJSPのSessionBeanを使ってサーバ上に状態を記憶している。 現在生成中のQuestion その他のQuestion
HTMLの生成 JSP(QuestionnairHTML.jsp) Servlet HTML生成例 QnnrViewer.jspの諸要素 SessionBean ・UserBean ・QuestionnairBean -int ID -int makerID -String title -String target -String comment -String date ・Vector ( QuestionBean ) -int number -int parent -String question -String optiontype -String[] selections ・その他。 QnnrViewer.jspの諸要素 Title ( title ) 作成日時 ( date) 説明 ( comment ) 対象とする回答者 ( target ) 非表示( id, makerid ) 設問と解答の選択肢 (複数) SessionBeanから HTMLを生成 SessionBeanをロードする Title date, comment, target, JSP側でSessionを読むので特に何もしない でよい。 Q1: 設問1 A1:回答(チェックボックス、TextAreaなど) Q2:設問2 HTML生成例
今後の課題 判り易いインターフェース。 セキュリティーを考慮する。 JSP内でfor文やIf文の多用しているので、ラグライブラリなどを使ってロジックと表示を分離させる。 結果を集計して図などを表示するときにどうするか? Servletで図を描画してイメージファイルとしてクライアントに送る。 Appletにデータを渡してクライアント側で図を描画する。 エクセル形式で出力する ・・・など。