好評発売中! Javaバイブルシリーズ Java入門 Java7版 本体,800 円 税 B5変 371頁 定価 本体,000円 税 好評発売中! Javaバイブルシリーズ オブジェクト指向プログラミング Java7版 B5変 41頁 定価 本体,000円 税 好評発売中! HTML演習 HTML5対応版 著者 中島省吾 B5変 305頁 定価 本体,000円 税 Webア リ構築カ ー.indd 1 13..18 6:31:41 PM
Oracle と Java は Oracle Corporation 及びその子会社 関連会社の米国及びその他の国における登録商標です Eclipse は米国およびその他の国における Eclipse Foundation, Inc. の商標もしくは登録商標です MySQL の名称及びロゴは Oracle Corporation の登録商標または商標です Apache Tomcat Tomcat Apache は Apache Software Foundation の登録商標または商標です Windows は米国 Microsoft Corporation の米国およびその他の国における登録商標です その他記載された会社名およびロゴ 製品名などは該当する各社の商標または登録商標です 本書では および の記載は省略しました
はじめに インターネットが人々の生活基盤と位置付けられて久しくなった今日 特にWebアプリを利用した情報の入力や活用はより重要性を増しています 本書は Webアプリケーションの構築方法として入門的なApache Tomcatサーバに焦点を当て その動作のしくみの学習とWebアプリケーションを作る手順について小さなサンプル作成を通して学んでいくものです また インターネットを身近に利用するとき今日ではサーバのしくみに脆弱性対策は欠かせない条件となっており 本書はこうした観点にも触れることとしました Javaを学習した方が実用的なプログラムとしてWebアプリケーションを作る一助となれば幸いです 対象とする読者本書は 次のような技術に関する基礎的な知識を有している人を対象に サーバサイドJavaを使って Webアプリケーションを構築できるようになることを目標としています Javaプログラミングの基礎知識オブジェクト指向技術 ( 継承 インスタンス 実装 ポリモルフィズムなど ) の簡単なプログラムをJava で作成することができる データベースに関する基礎知識リレーショナルデータベースに関して基礎知識とテーブルの作成 検索 更新 削除などをSQL 命令で操作できる HTMLの基礎知識 <table> や <form> など基本的タグを理解している また HTMLを使ってWebページを作成することができる インターネットプロトコルの基礎知識 TCP/IPの概略とOSI 階層を理解している クライアント / サーバ間のパケットの要求 応答を理解している i
サポート情報 / サンプルプログラム 本書に記載された項目に関する最新情報や サンプルプログラムなどを 必要に応じて公開しています <URL> http://www.scc-kk.co.jp/scc-books/support/b-364/support.html 本書の概要 / 標準学習時間 章 概要 学習時間 (1 時限 =90 分 ) 第 1 章 Webサーバの構成要素 TCP/IPにおけるリクエストとレスポンス 動的 Webコンテンツ 1.0 時限 第 章簡単なWebアプリケーション EclipseとTomcatによる初歩的サーブレット作成方法 6.0 時限 第 3 章 JSP JSPの基本文法 4.0 時限 第 4 章プログラム間のつながり第 5 章 JavaBeans 第 6 章 JDBCドライバによるDB 操作第 7 章ユーザ認証第 8 章システムの統合化第 9 章セキュリティ確保の実現第 10 章フールプルーフ第 11 章総合演習付録 1 セッションの概念を中心に複数ページで構成されるWebアプリの考慮事項 JavaBeansの基本事項 MySQL を操作する JDBC 例題 Web アプリでのログイン方法 1~7 章の技術を総復習した実習 安全な Web アプリ構築方法 利用者の誤操作への対策 第 8 章の構築実習に基づいた応用実習 ( 模範解答は本書には記載していません 上記のサポート情報ページからダウンロードすることができます ) Eclipse Tomcat MySQLなどのインストール作業 合計 4.0 時限 4.0 時限 3.0 時限.0 時限 3.0 時限 1.0 時限 1.0 時限 15.0 時限 1.0 時限 45.0 時限 学習時間はあくまでも目安です 理解度に合わせて さらに時間をかけて学習しても構いません ii
プログラムのソースコード 本書ではソースコードがどこにあるかが一目でわかるように ソースコードに背景色を付けています また ソースコードで使用する文字で紛らわしいものに関しては以下のように区別しやすい形にしてあります 表記 意味 1 数字の1( イチ ) l 英小文字の (l エル ) I 英大文字の (I アイ ) 0 数字の0( ゼロ ) o 英小文字のo( オー ) O 英大文字のO( オー ) ナビゲーションマップ 本書の学習の順序は以下を想定しています 付録 1 第 1 章 必修内容 第 章 選択省略可 第 3 章 第 4 章 第 5 章 第 6 章 先行する章は必須の前提知識 途中の章知識 第 7 章 を習得済みであれば省略可能 第 8 章 第 9 章 第 11 章 第 10 章 iii
目次 第 1 章 Webサーバの構成要素 1 1-1 Webサーバの構成 1- HTTPリクエストとHTTPレスポンス 3 1-3 静的 Webコンテンツと動的 Webコンテンツ 8 1-4 本書での開発と実行環境 10 第 章簡単なWebアプリケーション 11-1 Eclipseによるサーブレットの開発手順 1 - サーブレットの基本事項 34-3 サーブレットでの文字コードとエンコード 41-4 リクエストによる入力値の受け取り 47 練習問題 63 第 3 章 JSP 71 3-1 JSPとは 7 3- はじめてのJSP 73 3-3 JSPコンパイル 79 3-4 JSPの基本的なタグ 8 3-5 ディレクティブ (Directive) 88 3-6 コメント 91 練習問題 93 第 4 章プログラム間のつながり 97 4-1 クッキー 98 4- セッション 110 4-3 フォワード 18 4-4 リダイレクト 135 4-5 スコープとJSP 暗黙オブジェクト 140 練習問題 150 iv
第 5 章 JavaBeans 151 5-1 JavaBeansとは 15 5- JSPのアクションタグ 154 5-3 JSP,Beansを応用したMVCモデル 160 5-4 学生登録アプリケーション の作成 17 練習問題 183 第 6 章 JDBCドライバによるDB 操作 187 6-1 JDBCドライバとは 188 6- DB 準備 189 6-3 DB 操作するサーブレット概要 194 6-4 表の参照 195 6-5 行の挿入 00 6-6 行の更新 04 6-7 行の削除 08 練習問題 1 第 7 章ユーザ認証 15 7-1 Tomcatのユーザ認証機能 16 7- ユーザ認証のサンプルプログラム 4 7-3 ユーザ認証機能のポイント 38 第 8 章システムの統合化 39 8-1 システムの統合化 40 第 9 章セキュリティ確保の実現 61 9-1 SQLインジェクション 6 9- クロスサイトスクリプティング (XSS) 70 9-3 ディレクトリトラバーサル 76 9-4 その他の脆弱性について 8 v
第 10 章フールプルーフ 85 10-1 なぜフールプルーフが必要なのか 86 10- 注意が必要なユーザの操作 88 10-3 想定外ナビゲーションの対策方法 89 10-4 サンプルプログラム フールプルーフの実装例 94 第 11 章総合演習 つぶやきアプリ 305 11-1 概要 306 11- 機能概要 307 11-3 データベース仕様 308 11-4 画面遷移 309 11-5 画面レイアウト例 310 11-6 第 1 段階つぶやき機能作成 313 11-7 第 段階削除とユーザ認証機能の作成 316 11-8 第 3 段階ユーザ管理機能の作成 319 付録 1 開発環境の準備 33 付録 1-1 JDKの入手とインストール 34 付録 1- Apache Tomcatの入手とインストール 39 付録 1-3 MySQLの入手とインストール 335 付録 1-4 Eclipseの入手とインストール 348 付録 Tomcat ディレクトリ構造 357 索引 360 別冊練習問題解答第 章練習問題の模範解答第 3 章練習問題の模範解答第 4 章練習問題の模範解答第 5 章練習問題の模範解答第 6 章練習問題の模範解答第 11 章総合演習サンプルプログラム vi
第 1 章 Web サーバの構成要素
1-1 Web サーバの構成 1 今日インターネットの利用でWebを閲覧するとき 閲覧するユーザの手元にはWebブラウザと呼ばれるクライアント用ソフトウェアを準備します また閲覧される情報であるWebページを保管しているWeb サーバも必要となります WebブラウザからWebサーバにホームページ情報を要求し Webサーバはこれに返信することでWebブラウザはホームページを閲覧することができます ホームページまたはWeb ページで表現される情報を 情報の内容物 という意味でWebコンテンツともいいます クライアント PC Web サーバ HTTP リクエスト HTTP レスポンス Web ブラウザ Web コンテンツ 図 1.1 Web サーバの構成要素 クライアントPCとWebサーバ間では インターネットの通信手順であるTCP/IPプロトコルでデータが送受信されます ホームページデータを要求 受信する手順はこのTCP/IPの上位レイヤープロトコルである HTTP 1 というプロトコルに従います WebブラウザがWebサーバに要求する情報をHTTPリクエストといいます またWebサーバがこれに応答し返信する情報をHTTPレスポンスといいます Webコンテンツは文字 画像 音楽 映像などのひとまとまりの情報で 表現方法のルールはHTML に従って タグ を利用して記述します 記述したホームページデータは主に.html または.htm という拡張子をファイル名に付けて保存します <HTML> <HEAD> <TITLE>My Web Page</TITLE> </HEAD> <BODY> <H>Welcome to Hogehoge</H> </BODY> </HTML> 1 HTTP HyperText Transfer Protocol の略 HTML HyperText Markup Language の略 図 1. HTML の例 第 1 章 Web サーバの構成要素
1- HTTP リクエストと HTTP レスポンス 前述の HTTP のプロトコルで実際に送受信される例を紹介します クライアント PC 1 HTTP リクエスト Web サーバ ページのアドレス <HTML> <HEAD> <TITLE>My Web Page</TITLE> </HEAD> <BODY> <H>Welcome to Hogehoge</H> Myself Picture<br> <img src="henomoheji.jpg"> </BODY> </HTML> sample.htm HTTP レスポンス 図 1.3 HTTP リクエストと HTTP レスポンスの見本環境上図のデータ送受信をパケット追跡のツール WireShark 1 でとらえた例が次のページの図です 一般にブラウザでページ閲覧した際は通信プロトコルの裏舞台に隠れて画面などには見えない送受信データの交換の様子が見えてきます まずクライアントPCのブラウザは入力したアドレスから 1HTTPリクエストにおいてWebサーバへホームページデータが存在するディレクトリ ( パスといいます ) およびファイル名 ( この場合は sample.htm でこれをリソースともいいます ) を送信します 送信の最初にはリクエストメソッドをGETという種類にして送信しています 1 WireShark 入手先 :http://www.wireshark.org/download.html 1- HTTP リクエストと HTTP レスポンス 3
1 に応答して HTTP レスポンスが HTML ファイルの中身をブラウザへ返答します HTTPレスポンスを受信したブラウザは内容を解析し このページに画像ファイルが含まれることを判定して 3HTTPリクエストでそのファイル henomoheji.jpg を要求します 1 最後に 4HTTP レスポンスではその画像ファイルをエンコードして返信しています 1HTTP リクエスト HTTP レスポンス この部分は sample.htm の中身そのものを返信している 3HTTP リクエスト 4HTTP レスポンス 図 1.4 HTTP リクエストと HTTP レスポンスの実際の例そのホームページにほかにも画像などの内容 ( コンテンツ ) が含まれれば その都度 3のようにリクエストし 受信します HTTPリクエストとHTTPレスポンスの内容をもう少し見ましょう 4 第 1 章 Web サーバの構成要素
1--1 HTTP リクエスト HTTPリクエストは メッセージヘッダー と メッセージボディ から構成され さらにヘッダーは リクエストライン と複数の ヘッダーフィールド から構成されます リクエストラインは メソッド リクエストURI 1 HTTPバージョン によって成り立ちます HTTP リクエスト 1 メッセージヘッダー リクエストライン メソッドリクエスト URI HTTP バージョン ヘッダーフィールド ヘッダーフィールド メッセージボディ リクエストライン メソッドリクエスト URI HTTP バージョン ヘッダーフィールド 図 1.5 HTTP リクエストの構成 メソッドはWebサーバへの命令の種類を表します 主なものを以下に示します 表 1.1 HTTP リクエストメソッドの主な種類 メソッド 意味 GET リソースの取得要求 HEAD リソースの取得要求 ( ヘッダーのみ ) POST データの送信と処理の要求 PUT ファイルの転送 DELETE ファイルの消去 TRACE 経由サーバのトレース 1 URI Uniform Resource Identifier の略 URL(Uniform Resource Locator) を拡張し URL と URN(Uniform Resource Name) をまとめた概念として考えられました 1- HTTP リクエストと HTTP レスポンス 5
1-- HTTP レスポンス 1 HTTPレスポンスは ステータスライン と メッセージボディ から構成されます ステータスラインは HTTPバージョン ステータスコード それに関連した テキストフレーズ から成り立ちます HTTP レスポンスステータスライン HTTP バージョン ステータスコード テキストフレーズ メッセージボディ HTTP バージョンステータスコードテキストフレーズ ステータスライン メッセージボディ 図 1.6 HTTP レスポンスの構成 ステータスコードの概要と主なものを以下に示します 表 1. ステータスコードの概要 コード 意味 説明 1xx 肯定先行 正しいコマンドを受け付けて処理中である xx 肯定完了 正しいコマンドを受け付けて処理を完了した 3xx 肯定中間 正しいコマンドを受け付けて 次に別のコマンドを要求する 4xx 一時否定完了 誤ったコマンドを受け付けた 再送を望む 5xx 否定完了 サーバの状態によりコマンドを受け付けることができない 6 第 1 章 Web サーバの構成要素
表 1.3 主なステータスコード ステータス 応答フレーズ 説明 00 OK 正常にリクエストを受け付けた 0 Created 正常にリソースを作成した 05 Not Content 正常にリクエストを受け付けたが 応答するリソースなし 301 Movement Permanently リソースは稼働している 304 OK リソースは更新されていない 400 Bad Request 開始行 メッセージヘッダーの構文にミスがあり受け取れない 401 Unauthorized リソースには認証が必要であり 認証されていない 403 Forbidden コマンドは正常だが サーバがその実行を拒否した 404 Not Found リソースは存在しない 405 Method Not Allowed そのメソッドの実行は許可されない 500 Internal Server Error サーバ内部のエラー 501 Not Implemented コマンドを実行する機能が存在しない 1 たとえばホームページを閲覧するとき アドレスを間違えている場合に表示されるコード 404 はこの表にある リソースは存在しない という意味です 1- HTTP リクエストと HTTP レスポンス 7
1-3 静的 Web コンテンツと動的 Web コンテンツ 1 1-3-1 Web アプリケーション ここまでインターネットの主流のひとつとして普及したホームページの送受信の流れを紹介しましたが Webサーバは通信プロトコルHTTPの手順に沿って送受信を行うアプリケーションです そして送受信のデータはHTMLの表現形式に従って記述される情報であり 基本的にHTMLファイルとしてWebサーバに保管されています このHTMLファイルは作成者が作り出し 内容を書き換えていかない限りそのページはいつも同じ内容であるということになります こうしたHTMLデータファイルのコンテンツを 静的 Webコンテンツ といいます これに対してページを見る人によって内容が変化するページがあります たとえばページ訪問者の数が表示されるような アクセスカウンタ というページのしくみは表示する人によってその数字が変わってきます 別の例では 検索結果を表示するページは検索の条件次第で違う結果が表示されます これらのページはいずれも処理を行うしくみがWebサーバに用意されていて 処理の実行結果をHTMLデータファイルであるかのように表示しているのです そのしくみのためにはWebサーバ側で実行するプログラム処理が必要となります こうした処理の結果がブラウザに表示されるコンテンツを 動的 Webコンテンツ といいます Webサーバ技術のなかで理解しやすい分野が静的コンテンツといえます つまり HTMLデータファイルや表示される画像データファイルを用意し HTMLやCSSなどで体裁を整える技術の習得ということです これに対して本書で勉強するWebアプリケーションとは 文字どおり Webサーバのもとで実行されて動的 Webコンテンツを処理するアプリケーションプログラム のことをいいます 8 第 1 章 Web サーバの構成要素
静的 Web コンテンツ クライアント PC Web サーバ 1 あらかじめ用意された HTML ファイルなど 動的 Web コンテンツ クライアント PC Web サーバ Web アプリケーション 図 1.7 動的 Web コンテンツと静的 Web コンテンツの比較 1-3- サーブレットとは Webアプリケーションとして本書では Servlet( サーブレット ) を学びます サーブレットとはWebサーバで実行される Javaで記述したアプリケーションプログラムのことです サーブレットのほかにも動的 Webコンテンツを生成できるプログラムの種類として有名なものに CGI 1 があります CGIはWebサーバとプログラム間でリクエストとレスポンスをやりとりする規約で プログラム言語としては主にPerlやC 言語で記述されてきました CGIはリクエストの都度に処理を起動しており これに対してサーブレットはWebサーバのメモリ上に常駐し効率よくマルチスレッド処理ができるなどの長所があります またJavaの特徴であるオブジェクト指向での開発に向いており Java 仮想マシンによりさまざまなプラットフォームで動作できるようになります 1 CGI Common Gateway Interface の略 1-3 静的 Web コンテンツと動的 Web コンテンツ 9
1-4 本書での開発と実行環境 1 1-4-1 Tomcat サーブレットの実行にはサーブレットを受け入れて動作させるWebサーバが必要になります サーブレットというWebアプリケーションをコンテンツ ( 中身 ) として格納 動作させる役割がこのWebサーバであることから サーブレットコンテナ ( サーブレットの入れ物 ) とも呼ばれます Javaサーブレットを動作させるコンテナ環境のひとつとして Tomcat 1 があります 現在コンテナとしてはTomcat 以外にJBoss Glassfish WebLogicなどがあります 本書で紹介する Tomcatは Apache Software Foundationのもとで開発されたオープンソースソフトウェアであり 無償で利用できるものです 1 トムキャットと読む 正式名は Apache Tomcat( アパッチ トムキャット ) と呼ばれます Web ファイルサーブレット コンテンツ Web ファイル Apache Tomcat Web サーバコンテナ JVM (Apache など ) OS(Windows など ) OS(Windows など ) 図 1.8 Tomcat と Web サーバの構成比較 1-4- 開発環境 JDK と Eclipse およびデータベース MySQL 本書のアプリケーションを開発するためには Java Developers Kit(JDK) を準備する必要があります 開発用ツールとしてプログラムコード作成のエディタは Eclipse を利用します Eclipseはコード作成を支援し コードの実行を追跡できるなどさまざまな機能を持っています また 本書で紹介するデータベース操作のプログラム例題の環境には データベースソフト MySQL を使用します それぞれのソフトウェアの入手およびインストールの手順は本書巻末の付録を参照してください 第 章からはインストールの準備が完了しているという前提で紹介します オープンソースのデータベースであり 無償で利用できるものと有償の商用版があります 10 第 1 章 Web サーバの構成要素
第 章 簡単な Web アプリケーション
-1 Eclipse によるサーブレットの開発手順 -1-1 Eclipse の初期設定 本章では付録に紹介している開発環境のインストールが完了していることを前提に話を進めます サーブレットの開発をはじめる前に開発ツール Eclipse の初期設定を行います インストールした Eclipseを起動します 図.1 Eclipse 起動 ワークスペース ランチャー このまま [OK] をクリックして進めます 図. Eclipse の起動 ようこそ 画面 この画面でメニューの ウィンドウ から 設定 を選びます 1 第 章簡単な Web アプリケーション
(1) 行番号の表示 下図の左側のメニューで 一般 エディター テキスト エディター の順に展開 選択します 次に右側で 行番号の表示 をチェックして [ 適用 ] をクリックします 図.3 Eclipse 設定 テキスト エディター () テキスト ファイルのエンコード設定左側のメニューで 一般 ワークスペース を選びます 次に右側で テキスト ファイルのエンコード を UTF-8 に変更して [ 適用 ] をクリックします 図.4 Eclipse 設定 ワークスペース -1 Eclipse によるサーブレットの開発手順 13
(3) コンパイラーの警告設定左側のメニューで Java コンパイラー エラー/ 警告 を選びます 次に右側で 潜在的なプログラミングの問題 を展開し serialversionuidなしのシリアライズ可能クラス を 無視 に変更して [ 適用 ] をクリックします 図.5 Eclipse 設定 エラー / 警告 ~ 潜在的なプログラミングの問題 同じく右側で 注釈 を展開し @Override 注釈の欠落 を 警告 に変更して [ 適用 ] をクリックします 図.6 Eclipse 設定 エラー / 警告 ~ 注釈 14 第 章簡単な Web アプリケーション
また [ 適用 ] をクリックしたときに以下の フル ビルドを行いますか のダイアログボックスが表示されるので [ はい ] をクリックします 図.7 Eclipse 設定 適用 の確認 (4) JSP ファイルのエンコード変更 左側のメニューで Web JSPファイル を展開 選択し 右側で エンコード を ISO 10646/ ユニコード (UTF-8) に変更して [ 適用 ] をクリックします 図.8 Eclipse 設定 JSP ファイル -1 Eclipse によるサーブレットの開発手順 15
(5) Tomcat7 の設定 左側のメニューで サーバー ランタイム環境 を展開 選択し 右側で [ 追加 ] をクリックします 図.9 Eclipse 設定 サーバー ランタイム環境 表示された 新規サーバー ランタイム環境 のウィンドウの フィルター入力 から Apache Tomcat v7.0 を選択し [ 次へ ] をクリックします 図.10 Eclipse 設定 サーバー ランタイム環境 ~ タイプを選択 16 第 章簡単な Web アプリケーション
ウィンドウ内に Tomcatサーバー が表示されます Tomcatインストール ディレクトリー の [ 参照 ] をクリックして Tomcatがインストールされたフォルダを指定します ( ここではC:\Program Files\Apache Software Foundation\Tomcat 7.0のフォルダを指定しています ) 次に JRE の項目で[ インストール済みのJRE] をクリックします 図.11 Eclipse 設定 サーバー ランタイム環境 ~ Tomcat サーバー jre7 が表示されているだけですが ここにJDKフォルダのJREを追加するために[ 追加 ] をクリックします 図.1 Eclipse 設定 サーバー ランタイム環境 ~ インストール済みの JRE -1 Eclipse によるサーブレットの開発手順 17
続いて JRE の型 で 標準 VM を選択し [ 次へ ] をクリックします 図.13 Eclipse 設定 サーバー ランタイム環境 ~ JRE の型 表示された JRE 定義 では JREホーム の [ ディレクトリー ] をクリックして JDKがインストールされたフォルダを指定します 図.14 Eclipse 設定 サーバー ランタイム環境 ~ JRE 定義 フォルダを選択すると上図のように JRE システム ライブラリー が展開されて表示されます [ 完了 ] をクリックします 18 第 章簡単な Web アプリケーション
インストール済みの JRE へ戻り [OK] をクリックします 図.15 Eclipse 設定 サーバー ランタイム環境 ~ インストール済みの JRE Tomcatサーバー へ戻るので JRE のプルダウンメニューから上図で追加したJDKフォルダのJRE ( この例ではjdk1.7.0_04) を選び [ 完了 ] をクリックします 図.16 Eclipse 設定 サーバー ランタイム環境 ~ Tomcat サーバー 以上で Tomcat の設定が完了します -1 Eclipse によるサーブレットの開発手順 19
本書でのコード体裁について本書で取り扱うプログラムコードは 限られたページ幅に書き表すためEclipseに以下の体裁を施しています Eclipseの 設定 メニュー Java コード スタイル フォーマッター と展開します ここで [ 新規 ] をクリックして フォーマットのプロファイルを作成して適用しています 図.17 Eclipse 設定 フォーマッター 0 第 章簡単な Web アプリケーション
プロファイルの 行折り返し で 行の最大幅 を70 文字 その下の デフォルト インデント をそれぞれ 文字で設定し 適用します 図.18 Eclipse 設定 フォーマッター ~ プロファイル プログラムソースを編集する際は エディタ画面を開いているときに ソース メニューから フォーマット を選び フォーマットの体裁を適用します -1 Eclipse によるサーブレットの開発手順 1
-1- 簡単なサーブレットの作成 Eclipseの環境の準備が整ったところで ワークスペースにもっとも簡単なサーブレットを作成してみます ここでは以下のようなホームページ結果が表示されるサーブレットの 作成から実行までの作業を確認しましょう 図.19 簡単なサーブレットを実行した結果 (1) Eclispe の ファイル メニューから [ 新規 ] 動的 Web プロジェクト 1 を選択します 図.0 Eclipse 動的 Web プロジェクト の作成メニュー 1 Eclipse では開発の作業に関するファイルや実行の環境などの情報を プロジェクト というフォルダで管理します 本書で紹介している例題や練習問題は その演習の区切りを単位にプロジェクトを作成します また これらプロジェクトと一連の開発作業環境はまとめて ワークスペース というフォルダへ保存されています 第 章簡単な Web アプリケーション
プロジェクト名 に HelloWorldPJ と入力して [ 完了 ] をクリックします 図.1 Eclipse 動的 Web プロジェクト 画面左側の プロジェクト エクスプローラー に HelloWorldPJ プロジェクトが作成されます () 三角形アイコンをクリックしてプロジェクトを展開し内容を確認します 図. Eclipse 動的 Web プロジェクトを作成した直後 -1 Eclipse によるサーブレットの開発手順 3
(3) プロジェクトを選択した状態で メニューの ファイル から 新規 サーブレット を選択します 図.3 Eclipse サーブレット 作成メニュー (4) Javaパッケージ に chapter クラス名 に HelloWorldServlet と入力して [ 次へ ] をクリックします 図.4 Eclipse サーブレット作成 その 1 4 第 章簡単な Web アプリケーション
表示される項目を確認します ここではそのまま [ 次へ ] をクリックします 図.5 Eclipse サーブレット作成 その スーパークラスからのコンストラクター のチェックを外します 継承された抽象メソッド の種類で dopost のチェックを外し doget だけをチェックして [ 完了 ] をクリックします 図.6 Eclipse サーブレット作成 その 3 サーブレットの Java ソースプログラムとして最小限のコードが作成されます -1 Eclipse によるサーブレットの開発手順 5
(5) 画面左側の プロジェクト エクスプローラー では HelloWorldPJ プロジェクト Java Resources src に chapter パッケージが作成されて HelloWorldServlet.java が格納されていることがわかります 図.7 Eclipse サーブレット作成の直後 @Override 警告への対処 プログラムの中央部分で警告のアイコンが表示されています マウスを近づけると次のように警告の原因が表示されます 6 第 章簡単な Web アプリケーション
こうした場合には 警告の黄色のアイコンをクリックして 欠落している @Override 注釈を追加します を選びます ソースには @Override アノテーションが追加されます 続いて メニューの ファイル 保管 を実行すると警告が消えます 簡単な出力処理の記述 dogetメソッド部に簡単な出力処理を記述します ( 下記の例で6~34 行を追加 ) -1 Eclipse によるサーブレットの開発手順 7
ここでも警告表示されています 警告の赤いアイコンをクリックして PrintWriter をインポートします を選びます java.io.printwriter の import 文が追加されて 警告が消えます 8 第 章簡単な Web アプリケーション
これまでの作業で完成したサーブレットのコードは次のようになります ファイル : HelloWorldServlet.java ソースコード 01: 0: 03: 04: 05: 06: 07: 08: 09: 10: 11: 1: 13: 14: 15: 16: 17: 18: 19: 0: 1: : 3: 4: 5: 6: 7: 8: 9: 30: 31: 3: 33: 34: 35: 36: 37: 38: 39: package chapter; import java.io.ioexception; import java.io.printwriter; import javax.servlet.servletexception; import javax.servlet.annotation.webservlet; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; /** * Servlet implementation class HelloWorldServlet */ @WebServlet("/HelloWorldServlet") public class HelloWorldServlet extends HttpServlet { private static final long serialversionuid = 1L; } 追加した行 /** * @see HttpServlet#doGet(HttpServletRequest request, * HttpServletResponse response) */ 追加した行 @Override protected void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto generated method stub PrintWriter out = response.getwriter(); out.println("<html>"); out.println("<head>"); out.println("<title>hello World!</title>"); out.println("</head>"); 追加した行 out.println("<body>"); out.println("<h1>hello World!</h1>"); out.println("<p>first Servlet</p>"); out.println("</body></html>"); } -1 Eclipse によるサーブレットの開発手順 9
ここまでの作業で完成した Eclipse のワークスペースは以下のファイル フォルダ構成になっています プロジェクト名 : HelloWorldPJ HelloWorldPJ src chapter HelloWorldServlet.java 完成したソースプログラムでのアノテーション 完成したソースプログラムではアノテーションが15 行 (@WebServlet) 3 行 (@Override) に設定されています アノテーション自体は注釈ですが コンパイルでのチェックや定型処理の点検支援が可能となり 開発作業が改善される利点があります このうち @Overrideアノテーションはスーパークラス( サーブレットでは HttpServletクラス ) のdoGetメソッドをオーバーライドすることを明示しています 開発時によくありがちなミスの一つの例としてメソッド名は正しいが引数を間違える すなわちシグニチャの不一致があります 継承によりスーパークラスをオーバーライドしているつもりでも シグニチャが不一致ではコンパイルエラーにはならず 実行して初めてその誤りを発見することになります このようなミスを実行前に防止するには サブクラスはこのようなメソッドをオーバーライドしますよ と宣言させることで スーパークラスのメソッドとのチェックが可能になります @WebServletアノテーションは --4 起動呼出しでのURLアドレスとアノテーション @WebServlet を参照してください 30 第 章簡単な Web アプリケーション
(6) 作成したサーブレットを実行します プロジェクト エクスプローラー で HelloWorldServlet.java を右クリックし 実行 1 サーバーで実行 を選択します 図.8 Eclipse サーバーで実行 メニュー -1 Eclipse によるサーブレットの開発手順 31
サーバーで実行 では フィルター入力 は Tomcat v7.0サーバー サーバーのホスト名 は localhost サーバー ランタイム環境 は Apache Tomcat v7.0 が既定で表示されます これを確認して [ 完了 ] をクリックします 図.9 Eclipse サーバーで実行 3 第 章簡単な Web アプリケーション
数分経過してから以下のようにEclipseの内部ブラウザに Hello World! が表示されます また プロジェクト エクスプローラー には Servers フォルダ 1 が新しく表示されます 1 Eclipse は Tomcat の Web サーバ機能を呼び出します Tomcat サーバ定義は Eclipse の Servers フォルダに作られたものを参照します Tomcat のプログラムやライブラリは Tomcat がインストールされたフォルダ内のものを使用します 図.30 Eclipse の内部ブラウザでの表示結果 Eclipse 以外のブラウザ ( ここではインターネットエクスプローラ ) を使う場合は 以下のアドレスを入力すると表示されます http://localhost:8080/helloworldpj/helloworldservlet 図.31 インターネットエクスプローラでの表示結果 -1 Eclipse によるサーブレットの開発手順 33