Webアプリケーション・演習問題

解答例の一部を公開していますが、 解答例へのアクセスには講習中にお知らせしたパスワードが必要です。


解答例


  1. 簡単なサーブレット:
    ファイル名: MyName.java

    "My name is 〜."(〜は自分の名前)と出力する Servlet を作成せよ。 無名(デフォルト)パッケージに作成し、javac でコンパイルし http://localhost:8080/MyFirst/MyName という URL で アクセスできるように、設定ファイルを書け。

  2. 簡単なサーブレット2:
    ファイル名: MyName2.java

    上と同様のプログラムを hoge というパッケージに作成し、 javac でコンパイルし http://localhost:8080/MyFirst/MyName2 という URL で アクセスできるように、設定ファイルを書け。

  3. 簡単なサーブレット:
    ファイル名: MyBirthday.java

    "My Birthday is 〜."(〜は自分の誕生日)と出力する Servlet を作成せよ。

  4. 繰り返し1
    ファイル名: ManyHello.java

    "Hello! "と 100 回出力するサーブレットを作成せよ。
    できれば、 "Hello! (1回目) Hello! (2回目) … Hello! (100回目)" のように表示してみよ。

  5. 繰り返し2
    ファイル名: Gradation.java

    から までのグラデーションを 64階調程度で出力するサーブレットを作成せよ。

    ****************************************************************

  6. イメージカウンタ
    ファイル名: ImageCounter.java

    アプリケーションルートの images ディレクトリに、 1.png, 2.png などの名前で数字画像ファイルを用意して おいて、このアクセスカウンタや時刻表示で 1, 2, と表示する代わり に <img src='images/1.png'/>, <img src='images/2.png'/> などにしておくと、数字を画像で表示するアク セスカウンタができる。

    数字を画像として表示するアクセスカウンタを作成せよ。

    0 1 2 3 4 5 6 7 8 9

  7. Parameter の利用
    ファイル名: NHello.java

    (正の)整数のパラメータ nを受取り、Hello!(1回目), Hello!(2回目), ..., Hello(n 回目)と n回 Hello! を出力するサーブレットを作成せよ。

    つまり、http://localhost:8080/…/NHello.jsp?12 というパラメータを渡されたときは、次のように出力する。

    Hello!(1回目), Hello!(2回目), Hello!(3回目), Hello!(4回目), Hello!(5回目), Hello!(6回目), Hello!(7回目), Hello!(8回目), Hello!(9回目), Hello!(10回目), Hello!(11回目), Hello!(12回目),

  8. キーワードのハイライト
    ファイル名: HighLightFile.java

    パラメータとしてファイル名を受取り、 そのファイルの内容を Java のキーワード(public, void, classなど)に色をつけて表示するサーブレットを作成せよ。

    補足: ある特定のフォルダ内のファイルだけ表示するようにして、 フォルダ外のファイルが表示されないように注意せよ。

    ヒント: Stringクラスのメソッドを利用する。

  9. カウントダウン
    ファイル名: CountDown.java

    特別なイベントの日(自分の??歳の誕生日、ワールドカップブラジル大会、 リオデジャネイロオリンピック開幕など) を適当に決めて、パラメータとして日付を YYYYMMDD の形式で与えると イベントの日まであと何日かを表示するサーブレットを作成せよ。 (パラメータを与えなければ今日の日付を用いるようにせよ。)

    ヒント: java.util.Calendarクラスを用いる。 Calendar クラスには差を求める直接のメソッドはないので、 getTimeInMillis メソッドを使ってその差を 1000*60*60*24で割る。

  10. カレンダー
    ファイル名: MyCalendar.java
    年・月を YYYYMM の形式で与えると、その月のカレンダーを table で作成する サーブレットを作成せよ。

  11. ハイライトその2
    ファイル名: HighLight2.java

    正規表現を用いて、HighLight.java でさらに、数値リテラルの部分、 文字列リテラルの部分、 コメントの部分などに色をつけて表示するサーブレットを作成せよ。

    ヒント: java.util.regex パッケージのクラスを用いる。 あるいは、String クラスに正規表現を扱うメソッド (内部でjava.util.regex パッケージのクラスを使っている) があるので、それを用いる。

    字句解析をするわけではないので、100% 正確でなくても良い。 (コメントの内部や文字列リテラルの内部で間違っても良い。)

  12. 日記

    日記(問 2.3.4)や家計簿 (問 2.3.5) サーブレットの入力欄にユーザー名を入力する欄を追加し、 ユーザーごとに記録ファイルを別にして保存するように改良せよ。

    ただし、認証機能(パスワードによる確認)は付けなくてよい

  13. HashMapTest の改良

    HashMapTest.java の色のデータを、次のようなファイルから読み取るように改良せよ。

    鴇, 0xf7acbc
    赤, 0xed1941  
    朱, 0xf26522
    桃, 0xf58f98
    緋, 0xaa2116
    肌, 0xfedcbd
    橙, 0xf47920
    褐, 0x843900
    黄, 0xffd400
    鶸, 0xcbc547
    鶯, 0x87943b
    緑, 0x45b97c
    鉄, 0x005344
    水, 0xafdfe4
    青, 0x009ad6
    藍, 0x145b7d
    紺, 0x003a6c
    菫, 0x6ff0aaa
    藤, 0xafb4db
    紫, 0x8552a1
    白, 0xfffffb
    灰, 0x77787b 
    黒, 0x130c0e
    紅, 0xd7003a
    小豆, 0x96514d
    浅葱, 0x00a3af
    瑠璃, 0x1e50a2
    …
    

    リンク: 和色大辞典

  14. タイマー
    ファイル名: MyTimer.java

    セッションにアクセス時刻(System.currentTimeMillis())を記録し、 前回のアクセスからの経過時間を表示せよ。 (セッションが存在しなかったときは「おひさしぶりです」と表示せよ。) ちょうどキリの良い秒数だったときに、特別なメッセージを表示するようにせよ。

  15. Quiz (選択肢の記録)
    ファイル名: QuizEx.java

    Quiz.java を、 正解数だけではなくて、 どの問に対してどの選択肢を選んだか (間違っていたなら正解はどれだったか) までわかるように記録し、 その結果を「これで QUIZ は終わりです。」のメッセージのあとに表示するようにせよ。

    ヒント: セッションに選択肢の記録を保存する。 どのようなデータ型が適切か?
    配列(int[])は長さが決まってしまうのでふさわしくない。 ArrayList など長さが可変なデータ型を使う必要がある。

  16. オプション品構成:
    ファイル名: Options.java

    次のようなオプションとその値段の情報のテキストファイルから

    次のようなオプション構成を選択できるページを各パーツ毎に作成し、
    <html>
    <body>
    CPUを選んで下さい
    <br>
    <form method='post'>
    <input type='radio' name='answer' value='4000'>
    Celeron430 4000円
    <input type='radio' name='answer' value='20000'>
    DuoE8400 20000円
    <input type='radio' name='answer' value='37000'>
    QuadQ9450 37000円
    <input type='radio' name='answer' value='62000'>
    QuadQ9550 62000円
    <br>
    <input type='submit' value='送る'>
    <input type='submit' value='キャンセル'>
    </form>
    </body>
    </html>
    
    すべてのパーツの選択肢を選んだ時点で、 選択した構成の合計値段を表示する Servlet を作成せよ。

  17. バーチャルショップ
    プロジェクト(Webアプリケーション)名: FishStore

    ColorStore1 (同.zip)を参考に、 仮想熱帯魚ショップアプリケーション (実行例) を作成せよ。

    ヒント: セッションに保存する「カート」はどのようなデータ型が適切か?
    仮想讃岐塗ショップの場合は、色の順番を記録する必要があったので、 ArrayList<String>だったが、仮想熱帯魚ショップの場合、 魚の名前と匹数を記録する必要がある。

  18. データベースの更新
    ファイル名: AddColor.java

    ColorStore3 (同.zip)の色情報データベースに 新しい色を追加するためのサーブレットを作成せよ。

  19. バーチャルショップ(DB版)
    プロジェクト(Web アプリケーション)名: FishStore2

    仮想熱帯魚ショップアプリケーションを ユーザーと熱帯魚の情報を DB から取得するように改造せよ。

  20. コマ塗(PNG 版)
    ファイル名: Koma.java

    ColorStore1 (同.zip) (またはColorStore3 (同.zip)) の最後の作品を PNG 形式で作成せよ。

  21. データベースの読出しと操作:
    ファイル名: ProductWithTax.java

    X 国では price が単価15以上のものに対して 10% の間接税がかかるという。 HSQLDB のテストデータの中の product テーブルの price は税抜の単価を示すものとする。product テーブルの内容を X 国での間接税を加えた値段を表に成形して出力する Servlet を作成せよ。

  22. データベースの検索:
    ファイル名: SearchCustomer.java

    HSQLDB のテストデータの中の customer テーブルを利用して、顧客のイニシャルを QueryString として受け取り、そのイニシャルにマッチする顧客の情報をテーブルとして表示する Servlet を作成せよ。

  23. クイズ DB版:
    ファイル名: QuizDB.java

    Quiz の情報をテキストファイルではなく、データベースから 獲得する Servlet を作成せよ。
    なお、データベースへのクエリの回数はできるだけ少ないこと(1 つのセッションで 1 回)が望ましい。

    参考にするプログラム: DBSelect.java,

  24. オプション品構成:
    ファイル名: Options.java

    次のようなオプションとその値段の情報をデータベース (SQL スクリプト)から獲得し、

    次のようなオプション構成を選択できるページを各パーツ毎に作成し、
    <html>
    <body>
    CPU を選んで下さい
    <br>
    <form method='post'>
    <input type='radio' name='answer' value='20000'>
    3GHz 20000円
    <input type='radio' name='answer' value='22000'>
    3.2GHz 22000円
    <input type='radio' name='answer' value='25000'>
    3.4GHz 25000円
    <br>
    <input type='submit' value='送る'>
    <input type='submit' value='キャンセル'>
    </form>
    </body>
    </html>
    
    すべてのパーツの選択肢を選んだ時点で、 選択した構成の合計値段を表示する Servlet を作成せよ。
    なお、データベースへのクエリの回数はできるだけ少ないこと(1つのセッションで1回)が望ましい。

    参考にするプログラム: Quiz.java, DBSelect.java,


Koji Kagawa