• 検索結果がありません。

Webアプリケーション構築 Java 7版

N/A
N/A
Protected

Academic year: 2021

シェア "Webアプリケーション構築 Java 7版"

Copied!
41
0
0

読み込み中.... (全文を見る)

全文

(1)

(本体 2,800 円+税) 好評発売中 ! HTML演習 HTML5対応版 著者:中島省吾 ●B5変 305頁 ●定価(本体2,000円+税) 好評発売中 ! Javaバイブルシリーズ Java入門 Java7版 ●B5変 371頁 ●定価(本体2,000円+税) 好評発売中 ! Javaバイブルシリーズ オブジェクト指向プログラミング Java7版 ●B5変 421頁 ●定価(本体2,000円+税)

(2)

● OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における 登録商標です。

●Eclipseは米国およびその他の国における Eclipse Foundation, Inc. の商標もしくは登録商標です。 ●MySQLの名称及びロゴは、Oracle Corporationの登録商標または商標です。

●Apache Tomcat、Tomcat、Apacheは、Apache Software Foundationの登録商標または商標です。 ● Windowsは米国Microsoft Corporationの米国およびその他の国における登録商標です。 ● その他記載された会社名およびロゴ、製品名などは該当する各社の商標または登録商標です。 ● 本書では™および®の記載は省略しました。

(3)

はじめに

インターネットが人々の生活基盤と位置付けられて久しくなった今日、特にWebアプリを利用した情報の 入力や活用はより重要性を増しています。 本書は、Webアプリケーションの構築方法として入門的なApache Tomcatサーバに焦点を当て、その動 作のしくみの学習とWebアプリケーションを作る手順について小さなサンプル作成を通して学んでいくも のです。また、インターネットを身近に利用するとき今日ではサーバのしくみに脆弱性対策は欠かせな い条件となっており、本書はこうした観点にも触れることとしました。 Javaを学習した方が実用的なプログラムとしてWebアプリケーションを作る一助となれば幸いです。 対象とする読者 本書は、次のような技術に関する基礎的な知識を有している人を対象に、サーバサイドJavaを使って Webアプリケーションを構築できるようになることを目標としています。 ・Javaプログラミングの基礎知識 オブジェクト指向技術(継承、インスタンス、実装、ポリモルフィズムなど)の簡単なプログラムをJava で作成することができる。 ・データベースに関する基礎知識 リレーショナルデータベースに関して基礎知識とテーブルの作成、検索、更新、削除などをSQL命令 で操作できる。 ・HTMLの基礎知識 <table>や<form>など基本的タグを理解している。また、HTMLを使ってWebページを作成することがで きる。 ・インターネットプロトコルの基礎知識 TCP/IPの概略とOSI階層を理解している。クライアント/サーバ間のパケットの要求・応答を理解して いる。

(4)

サポート情報/サンプルプログラム

本書に記載された項目に関する最新情報や、サンプルプログラムなどを、必要に応じて公開しています。 <URL> http://www.scc-kk.co.jp/scc-books/support/B-364/support.html

本書の概要/標準学習時間

章 概要 学習時間 (1時限=90分) 第1章 Webサーバの構成要素 TCP/IPにおけるリクエストとレスポンス、 動的Webコンテンツ 1.0時限 第2章 簡単なWebアプリケーション EclipseとTomcatによる初歩的サーブレット 作成方法 6.0時限 第3章 JSP JSPの基本文法 4.0時限 第4章 プログラム間のつながり セッションの概念を中心に複数ページで構 成されるWebアプリの考慮事項 4.0時限 第5章 JavaBeans JavaBeansの基本事項 4.0時限 第6章 JDBCドライバによるDB操作 MySQLを操作するJDBC例題 3.0時限 第7章 ユーザ認証 Webアプリでのログイン方法 2.0時限 第8章 システムの統合化 1~7章の技術を総復習した実習 3.0時限 第9章 セキュリティ確保の実現 安全なWebアプリ構築方法 1.0時限 第10章 フールプルーフ 利用者の誤操作への対策 1.0時限 第11章 総合演習 第8章の構築実習に基づいた応用実習 (模範解答は本書には記載していません。上記 のサポート情報ページからダウンロードすること ができます。) 15.0時限 付録1 Eclipse、Tomcat、MySQLなどのインストー ル作業 1.0時限 合計 45.0時限 学習時間はあくまでも目安です。理解度に合わせて、さらに時間をかけて学習しても構いません。

プログラムのソースコード

本書ではソースコードがどこにあるかが一目でわかるように、ソースコードに背景色を付けています。ま た、ソースコードで使用する文字で紛らわしいものに関しては以下のように区別しやすい形にしてありま す。

ナビゲーションマップ

本書の学習の順序は以下を想定しています。 表記 意味 1  数字の1(イチ) l  英小文字の(l エル) I  英大文字の(I アイ) 0  数字の0(ゼロ) o  英小文字のo(オー) O  英大文字のO(オー) 付録1 第1章 第11章 第10章 第9章 第8章 第7章 第6章 第5章 第4章 第3章 第2章 選択省略可 必修内容 先行する章は 必須の前提知識 途中の章知識 を習得済みであれ ば省略可能

(5)

サポート情報/サンプルプログラム

本書に記載された項目に関する最新情報や、サンプルプログラムなどを、必要に応じて公開しています。 <URL> http://www.scc-kk.co.jp/scc-books/support/B-364/support.html

本書の概要/標準学習時間

章 概要 学習時間 (1時限=90分) 第1章 Webサーバの構成要素 TCP/IPにおけるリクエストとレスポンス、 動的Webコンテンツ 1.0時限 第2章 簡単なWebアプリケーション EclipseとTomcatによる初歩的サーブレット 作成方法 6.0時限 第3章 JSP JSPの基本文法 4.0時限 第4章 プログラム間のつながり セッションの概念を中心に複数ページで構 成されるWebアプリの考慮事項 4.0時限 第5章 JavaBeans JavaBeansの基本事項 4.0時限 第6章 JDBCドライバによるDB操作 MySQLを操作するJDBC例題 3.0時限 第7章 ユーザ認証 Webアプリでのログイン方法 2.0時限 第8章 システムの統合化 1~7章の技術を総復習した実習 3.0時限 第9章 セキュリティ確保の実現 安全なWebアプリ構築方法 1.0時限 第10章 フールプルーフ 利用者の誤操作への対策 1.0時限 第11章 総合演習 第8章の構築実習に基づいた応用実習 (模範解答は本書には記載していません。上記 のサポート情報ページからダウンロードすること ができます。) 15.0時限 付録1 Eclipse、Tomcat、MySQLなどのインストー ル作業 1.0時限 合計 45.0時限 学習時間はあくまでも目安です。理解度に合わせて、さらに時間をかけて学習しても構いません。

プログラムのソースコード

本書ではソースコードがどこにあるかが一目でわかるように、ソースコードに背景色を付けています。ま た、ソースコードで使用する文字で紛らわしいものに関しては以下のように区別しやすい形にしてありま す。

ナビゲーションマップ

本書の学習の順序は以下を想定しています。 表記 意味 1  数字の1(イチ) l  英小文字の(l エル) I  英大文字の(I アイ) 0  数字の0(ゼロ) o  英小文字のo(オー) O  英大文字のO(オー) 付録1 第1章 第11章 第10章 第9章 第8章 第7章 第6章 第5章 第4章 第3章 第2章 選択省略可 必修内容 先行する章は 必須の前提知識 途中の章知識 を習得済みであれ ば省略可能

(6)

目次

第1章 Webサーバの構成要素 ··· 1

1-1 Webサーバの構成 ··· 2

1-2 HTTPリクエストとHTTPレスポンス ··· 3

1-3 静的Webコンテンツと動的Webコンテンツ ··· 8

1-4 本書での開発と実行環境 ··· 10

第2章 簡単なWebアプリケーション ··· 11

2-1 Eclipseによるサーブレットの開発手順 ··· 12

2-2 サーブレットの基本事項 ··· 34

2-3 サーブレットでの文字コードとエンコード ··· 41

2-4 リクエストによる入力値の受け取り ··· 47

練習問題 ··· 63

第3章 JSP ··· 71

3-1 JSPとは ··· 72

3-2 はじめてのJSP ··· 73

3-3 JSPコンパイル ··· 79

3-4 JSPの基本的なタグ ··· 82

3-5 ディレクティブ(Directive) ··· 88

3-6 コメント ··· 91

練習問題 ··· 93

第4章 プログラム間のつながり ··· 97

4-1 クッキー ··· 98

4-2 セッション ··· 110

4-3 フォワード ··· 128

4-4 リダイレクト ··· 135

4-5 スコープとJSP暗黙オブジェクト ··· 140

練習問題 ··· 150

第5章 JavaBeans ··· 151

5-1 JavaBeansとは ··· 152

5-2 JSPのアクションタグ ··· 154

5-3 JSP,Beansを応用したMVCモデル ··· 160

5-4 「学生登録アプリケーション」の作成 ··· 172

練習問題 ··· 183

第6章 JDBCドライバによるDB操作 ··· 187

6-1 JDBCドライバとは ··· 188

6-2 DB準備 ··· 189

6-3 DB操作するサーブレット概要 ··· 194

6-4 表の参照 ··· 195

6-5 行の挿入 ··· 200

6-6 行の更新 ··· 204

6-7 行の削除 ··· 208

練習問題 ··· 212

第7章 ユーザ認証 ··· 215

7-1 Tomcatのユーザ認証機能 ··· 216

7-2 ユーザ認証のサンプルプログラム ··· 224

7-3 ユーザ認証機能のポイント ··· 238

第8章 システムの統合化 ··· 239

8-1 システムの統合化 ··· 240

第9章 セキュリティ確保の実現 ··· 261

9-1 SQLインジェクション ··· 262

9-2 クロスサイトスクリプティング(XSS) ··· 270

9-3 ディレクトリトラバーサル ··· 276

9-4 その他の脆弱性について ··· 282

(7)

目次

第1章 Webサーバの構成要素 ··· 1

1-1 Webサーバの構成 ··· 2

1-2 HTTPリクエストとHTTPレスポンス ··· 3

1-3 静的Webコンテンツと動的Webコンテンツ ··· 8

1-4 本書での開発と実行環境 ··· 10

第2章 簡単なWebアプリケーション ··· 11

2-1 Eclipseによるサーブレットの開発手順 ··· 12

2-2 サーブレットの基本事項 ··· 34

2-3 サーブレットでの文字コードとエンコード ··· 41

2-4 リクエストによる入力値の受け取り ··· 47

練習問題 ··· 63

第3章 JSP ··· 71

3-1 JSPとは ··· 72

3-2 はじめてのJSP ··· 73

3-3 JSPコンパイル ··· 79

3-4 JSPの基本的なタグ ··· 82

3-5 ディレクティブ(Directive) ··· 88

3-6 コメント ··· 91

練習問題 ··· 93

第4章 プログラム間のつながり ··· 97

4-1 クッキー ··· 98

4-2 セッション ··· 110

4-3 フォワード ··· 128

4-4 リダイレクト ··· 135

4-5 スコープとJSP暗黙オブジェクト ··· 140

練習問題 ··· 150

第5章 JavaBeans ··· 151

5-1 JavaBeansとは ··· 152

5-2 JSPのアクションタグ ··· 154

5-3 JSP,Beansを応用したMVCモデル ··· 160

5-4 「学生登録アプリケーション」の作成 ··· 172

練習問題 ··· 183

第6章 JDBCドライバによるDB操作 ··· 187

6-1 JDBCドライバとは ··· 188

6-2 DB準備 ··· 189

6-3 DB操作するサーブレット概要 ··· 194

6-4 表の参照 ··· 195

6-5 行の挿入 ··· 200

6-6 行の更新 ··· 204

6-7 行の削除 ··· 208

練習問題 ··· 212

第7章 ユーザ認証 ··· 215

7-1 Tomcatのユーザ認証機能 ··· 216

7-2 ユーザ認証のサンプルプログラム ··· 224

7-3 ユーザ認証機能のポイント ··· 238

第8章 システムの統合化 ··· 239

8-1 システムの統合化 ··· 240

第9章 セキュリティ確保の実現 ··· 261

9-1 SQLインジェクション ··· 262

9-2 クロスサイトスクリプティング(XSS) ··· 270

9-3 ディレクトリトラバーサル ··· 276

9-4 その他の脆弱性について ··· 282

(8)

第10章 フールプルーフ ··· 285

10-1 なぜフールプルーフが必要なのか ··· 286

10-2 注意が必要なユーザの操作 ··· 288

10-3 想定外ナビゲーションの対策方法 ··· 289

10-4 サンプルプログラム「フールプルーフの実装例」 ··· 294

第11章 総合演習「つぶやきアプリ」 ··· 305

11-1 概要 ··· 306

11-2 機能概要 ··· 307

11-3 データベース仕様 ··· 308

11-4 画面遷移 ··· 309

11-5 画面レイアウト例 ··· 310

11-6 第1段階 つぶやき機能作成 ··· 313

11-7 第2段階 削除とユーザ認証機能の作成 ··· 316

11-8 第3段階 ユーザ管理機能の作成 ··· 319

付録1 開発環境の準備 ··· 323

付録1-1 JDKの入手とインストール ··· 324

付録1-2 Apache Tomcatの入手とインストール ··· 329

付録1-3 MySQLの入手とインストール ··· 335

付録1-4 Eclipseの入手とインストール ··· 348

付録2 Tomcatディレクトリ構造 ··· 357

索引 ··· 360

別冊 練習問題解答

第2章練習問題の模範解答

第3章練習問題の模範解答

第4章練習問題の模範解答

第5章練習問題の模範解答

第6章練習問題の模範解答

第11章総合演習サンプルプログラム

(9)

第1章

(10)

1-1 Webサーバの構成

今日インターネットの利用でWebを閲覧するとき、閲覧するユーザの手元にはWebブラウザと呼ばれる クライアント用ソフトウェアを準備します。また閲覧される情報であるWebページを保管しているWeb サーバも必要となります。WebブラウザからWebサーバにホームページ情報を要求し、Webサーバはこ れに返信することでWebブラウザはホームページを閲覧することができます。ホームページまたはWeb ページで表現される情報を「情報の内容物」という意味でWebコンテンツともいいます。 1.1 Web サーバの構成要素 クライアントPCとWebサーバ間では、インターネットの通信手順であるTCP/IPプロトコルでデータが送受 信されます。ホームページデータを要求・受信する手順はこのTCP/IPの上位レイヤープロトコルである HTTP1というプロトコルに従います。WebブラウザがWebサーバに要求する情報をHTTPリクエストとい います。またWebサーバがこれに応答し返信する情報をHTTPレスポンスといいます。 Webコンテンツは文字、画像、音楽、映像などのひとまとまりの情報で、表現方法のルールはHTML※2 従って「タグ」を利用して記述します。記述したホームページデータは主に「.html」または「.htm」という拡 張子をファイル名に付けて保存します。 図1.2 HTML の例

※1 HTTP HyperText Transfer Protocolの略。 ※2 HTML HyperText Markup Languageの略。

<HTML>   <HEAD>     <TITLE>My Web Page</TITLE>   </HEAD>   <BODY>     <H2>Welcome to Hogehoge</H2>   </BODY>  </HTML> HTTP リクエスト HTTP レスポンス クライアント PC Web ブラウザ Web サーバ Web コンテンツ

1-2 HTTPリクエストとHTTPレスポンス

前述のHTTPのプロトコルで実際に送受信される例を紹介します。 図1.3 HTTP リクエストと HTTP レスポンスの見本環境 上図のデータ送受信をパケット追跡のツール「WireShark※1」でとらえた例が次のページの図です。一般 にブラウザでページ閲覧した際は通信プロトコルの裏舞台に隠れて画面などには見えない送受信デー タの交換の様子が見えてきます。 まずクライアントPCのブラウザは入力したアドレスから、①HTTPリクエストにおいてWebサーバへホー ムページデータが存在するディレクトリ(パスといいます)およびファイル名(この場合は「sample.htm」で これをリソースともいいます)を送信します。送信の最初にはリクエストメソッドをGETという種類にして送 信しています。 ※1 WireShark入手先:http://www.wireshark.org/download.html クライアント PC Web サーバ ページのアドレス <HTML>    <HEAD>      <TITLE>My Web Page</TITLE>    </HEAD>    <BODY>      <H2>Welcome to Hogehoge</H2>      Myself Picture<br>      <img src="henomoheji.jpg">    </BODY>  </HTML>  sample.htm

 

HTTP リクエスト HTTP レスポンス

1

(11)

1-1 Webサーバの構成

今日インターネットの利用でWebを閲覧するとき、閲覧するユーザの手元にはWebブラウザと呼ばれる クライアント用ソフトウェアを準備します。また閲覧される情報であるWebページを保管しているWeb サーバも必要となります。WebブラウザからWebサーバにホームページ情報を要求し、Webサーバはこ れに返信することでWebブラウザはホームページを閲覧することができます。ホームページまたはWeb ページで表現される情報を「情報の内容物」という意味でWebコンテンツともいいます。 1.1 Web サーバの構成要素 クライアントPCとWebサーバ間では、インターネットの通信手順であるTCP/IPプロトコルでデータが送受 信されます。ホームページデータを要求・受信する手順はこのTCP/IPの上位レイヤープロトコルである HTTP1というプロトコルに従います。WebブラウザがWebサーバに要求する情報をHTTPリクエストとい います。またWebサーバがこれに応答し返信する情報をHTTPレスポンスといいます。 Webコンテンツは文字、画像、音楽、映像などのひとまとまりの情報で、表現方法のルールはHTML※2 従って「タグ」を利用して記述します。記述したホームページデータは主に「.html」または「.htm」という拡 張子をファイル名に付けて保存します。 図1.2 HTML の例

※1 HTTP HyperText Transfer Protocolの略。 ※2 HTML HyperText Markup Languageの略。

<HTML>   <HEAD>     <TITLE>My Web Page</TITLE>   </HEAD>   <BODY>     <H2>Welcome to Hogehoge</H2>   </BODY>  </HTML> HTTP リクエスト HTTP レスポンス クライアント PC Web ブラウザ Web サーバ Web コンテンツ

1-2 HTTPリクエストとHTTPレスポンス

前述のHTTPのプロトコルで実際に送受信される例を紹介します。 図1.3 HTTP リクエストと HTTP レスポンスの見本環境 上図のデータ送受信をパケット追跡のツール「WireShark※1」でとらえた例が次のページの図です。一般 にブラウザでページ閲覧した際は通信プロトコルの裏舞台に隠れて画面などには見えない送受信デー タの交換の様子が見えてきます。 まずクライアントPCのブラウザは入力したアドレスから、①HTTPリクエストにおいてWebサーバへホー ムページデータが存在するディレクトリ(パスといいます)およびファイル名(この場合は「sample.htm」で これをリソースともいいます)を送信します。送信の最初にはリクエストメソッドをGETという種類にして送 信しています。 ※1 WireShark入手先:http://www.wireshark.org/download.html クライアント PC Web サーバ ページのアドレス <HTML>    <HEAD>      <TITLE>My Web Page</TITLE>    </HEAD>    <BODY>      <H2>Welcome to Hogehoge</H2>      Myself Picture<br>      <img src="henomoheji.jpg">    </BODY>  </HTML>  sample.htm

 

HTTP リクエスト HTTP レスポンス

1

(12)

①に応答して②HTTPレスポンスがHTMLファイルの中身をブラウザへ返答します。 ②HTTPレスポンスを受信したブラウザは内容を解析し、このページに画像ファイルが含まれることを判 定して、③HTTPリクエストでそのファイル「henomoheji.jpg」を要求します。 最後に④HTTPレスポンスではその画像ファイルをエンコードして返信しています。 図1.4 HTTP リクエストと HTTP レスポンスの実際の例 そのホームページにほかにも画像などの内容(コンテンツ)が含まれれば、その都度③のようにリクエス トし、受信します。 HTTPリクエストとHTTPレスポンスの内容をもう少し見ましょう。 ①HTTP リクエスト ③HTTP リクエスト ②HTTP レスポンス ④HTTP レスポンス この部分は sample.htm の中身そのものを返信 している。

1-2-1 HTTPリクエスト

HTTPリクエストは「メッセージヘッダー」と「メッセージボディ」から構成され、さらにヘッダーは「リクエストラ イン」と複数の「ヘッダーフィールド」から構成されます。リクエストラインは、「メソッド」、「リクエストURI※1」、 「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)をまと めた概念として考えられました。 HTTP リクエスト メッセージヘッダー メッセージボディ ヘッダーフィールド リクエストライン ヘッダーフィールド メソッド リクエスト URI HTTP バージョン リクエストライン ヘッダーフィールド メソッド リクエスト URI HTTP バージョン

1

(13)

①に応答して②HTTPレスポンスがHTMLファイルの中身をブラウザへ返答します。 ②HTTPレスポンスを受信したブラウザは内容を解析し、このページに画像ファイルが含まれることを判 定して、③HTTPリクエストでそのファイル「henomoheji.jpg」を要求します。 最後に④HTTPレスポンスではその画像ファイルをエンコードして返信しています。 図1.4 HTTP リクエストと HTTP レスポンスの実際の例 そのホームページにほかにも画像などの内容(コンテンツ)が含まれれば、その都度③のようにリクエス トし、受信します。 HTTPリクエストとHTTPレスポンスの内容をもう少し見ましょう。 ①HTTP リクエスト ③HTTP リクエスト ②HTTP レスポンス ④HTTP レスポンス この部分は sample.htm の中身そのものを返信 している。

1-2-1 HTTPリクエスト

HTTPリクエストは「メッセージヘッダー」と「メッセージボディ」から構成され、さらにヘッダーは「リクエストラ イン」と複数の「ヘッダーフィールド」から構成されます。リクエストラインは、「メソッド」、「リクエストURI※1」、 「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)をまと めた概念として考えられました。 HTTP リクエスト メッセージヘッダー メッセージボディ ヘッダーフィールド リクエストライン ヘッダーフィールド メソッド リクエスト URI HTTP バージョン リクエストライン ヘッダーフィールド メソッド リクエスト URI HTTP バージョン

1

(14)

1-2-2 HTTPレスポンス

HTTPレスポンスは「ステータスライン」と「メッセージボディ」から構成されます。ステータスラインは、 「HTTPバージョン」、「ステータスコード」、それに関連した「テキストフレーズ」から成り立ちます。 図1.6 HTTP レスポンスの構成 ステータスコードの概要と主なものを以下に示します。 表1.2 ステータスコードの概要 コード 意味 説明 1xx 肯定先行 正しいコマンドを受け付けて処理中である。 2xx 肯定完了 正しいコマンドを受け付けて処理を完了した。 3xx 肯定中間 正しいコマンドを受け付けて、次に別のコマンドを要求する。 4xx 一時否定完了 誤ったコマンドを受け付けた。再送を望む。 5xx 否定完了 サーバの状態によりコマンドを受け付けることができない。 HTTP レスポンス ステータスライン ステータスコード テキストフレーズ HTTP バージョン メッセージボディ ステータスライン メッセージボディ HTTP バージョン ステータスコード テキストフレーズ 表1.3 主なステータスコード ステータス 応答フレーズ 説明 200 OK 正常にリクエストを受け付けた。 202 Created 正常にリソースを作成した。 205 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 コマンドを実行する機能が存在しない。

たとえばホームページを閲覧するとき、アドレスを間違えている場合に表示されるコード「404」はこの表 にある「リソースは存在しない」という意味です。

(15)

1-2-2 HTTPレスポンス

HTTPレスポンスは「ステータスライン」と「メッセージボディ」から構成されます。ステータスラインは、 「HTTPバージョン」、「ステータスコード」、それに関連した「テキストフレーズ」から成り立ちます。 図1.6 HTTP レスポンスの構成 ステータスコードの概要と主なものを以下に示します。 表1.2 ステータスコードの概要 コード 意味 説明 1xx 肯定先行 正しいコマンドを受け付けて処理中である。 2xx 肯定完了 正しいコマンドを受け付けて処理を完了した。 3xx 肯定中間 正しいコマンドを受け付けて、次に別のコマンドを要求する。 4xx 一時否定完了 誤ったコマンドを受け付けた。再送を望む。 5xx 否定完了 サーバの状態によりコマンドを受け付けることができない。 HTTP レスポンス ステータスライン ステータスコード テキストフレーズ HTTP バージョン メッセージボディ ステータスライン メッセージボディ HTTP バージョン ステータスコード テキストフレーズ 表1.3 主なステータスコード ステータス 応答フレーズ 説明 200 OK 正常にリクエストを受け付けた。 202 Created 正常にリソースを作成した。 205 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 コマンドを実行する機能が存在しない。

たとえばホームページを閲覧するとき、アドレスを間違えている場合に表示されるコード「404」はこの表 にある「リソースは存在しない」という意味です。

(16)

1-3 静的Webコンテンツと動的Webコンテンツ

1-3-1 Webアプリケーション

ここまでインターネットの主流のひとつとして普及したホームページの送受信の流れを紹介しましたが、 Webサーバは通信プロトコルHTTPの手順に沿って送受信を行うアプリケーションです。そして送受信の データはHTMLの表現形式に従って記述される情報であり、基本的にHTMLファイルとしてWebサーバに 保管されています。このHTMLファイルは作成者が作り出し、内容を書き換えていかない限りそのページ はいつも同じ内容であるということになります。こうしたHTMLデータファイルのコンテンツを「静的Webコ ンテンツ」といいます。 これに対してページを見る人によって内容が変化するページがあります。たとえばページ訪問者の数が 表示されるような「アクセスカウンタ」というページのしくみは表示する人によってその数字が変わってき ます。別の例では、検索結果を表示するページは検索の条件次第で違う結果が表示されます。これら のページはいずれも処理を行うしくみがWebサーバに用意されていて、処理の実行結果をHTMLデータ ファイルであるかのように表示しているのです。そのしくみのためにはWebサーバ側で実行するプログラ ム処理が必要となります。こうした処理の結果がブラウザに表示されるコンテンツを「動的Webコンテン ツ」といいます。 Webサーバ技術のなかで理解しやすい分野が静的コンテンツといえます。つまり、HTMLデータファイル や表示される画像データファイルを用意し、HTMLやCSSなどで体裁を整える技術の習得ということで す。 これに対して本書で勉強するWebアプリケーションとは、文字どおり「Webサーバのもとで実行されて動 的Webコンテンツを処理するアプリケーションプログラム」のことをいいます。 図1.7 動的 Web コンテンツと静的 Web コンテンツの比較

1-3-2 サーブレットとは

Webアプリケーションとして本書では「Servlet(サーブレット)」を学びます。サーブレットとはWebサーバ で実行される、Javaで記述したアプリケーションプログラムのことです。 サーブレットのほかにも動的Webコンテンツを生成できるプログラムの種類として有名なものに「CGI1 があります。CGIはWebサーバとプログラム間でリクエストとレスポンスをやりとりする規約で、プログラ ム言語としては主にPerlやC言語で記述されてきました。CGIはリクエストの都度に処理を起動しており、 これに対してサーブレットはWebサーバのメモリ上に常駐し効率よくマルチスレッド処理ができるなどの 長所があります。またJavaの特徴であるオブジェクト指向での開発に向いており、Java仮想マシンによ りさまざまなプラットフォームで動作できるようになります。

※1 CGI Common Gateway Interfaceの略。

Web サーバ Web アプリケーション クライアント PC あらかじめ用意された HTML ファイルなど クライアント PC Web サーバ

動的 Web コンテンツ

静的 Webコンテンツ

1

(17)

1-3 静的Webコンテンツと動的Webコンテンツ

1-3-1 Webアプリケーション

ここまでインターネットの主流のひとつとして普及したホームページの送受信の流れを紹介しましたが、 Webサーバは通信プロトコルHTTPの手順に沿って送受信を行うアプリケーションです。そして送受信の データはHTMLの表現形式に従って記述される情報であり、基本的にHTMLファイルとしてWebサーバに 保管されています。このHTMLファイルは作成者が作り出し、内容を書き換えていかない限りそのページ はいつも同じ内容であるということになります。こうしたHTMLデータファイルのコンテンツを「静的Webコ ンテンツ」といいます。 これに対してページを見る人によって内容が変化するページがあります。たとえばページ訪問者の数が 表示されるような「アクセスカウンタ」というページのしくみは表示する人によってその数字が変わってき ます。別の例では、検索結果を表示するページは検索の条件次第で違う結果が表示されます。これら のページはいずれも処理を行うしくみがWebサーバに用意されていて、処理の実行結果をHTMLデータ ファイルであるかのように表示しているのです。そのしくみのためにはWebサーバ側で実行するプログラ ム処理が必要となります。こうした処理の結果がブラウザに表示されるコンテンツを「動的Webコンテン ツ」といいます。 Webサーバ技術のなかで理解しやすい分野が静的コンテンツといえます。つまり、HTMLデータファイル や表示される画像データファイルを用意し、HTMLやCSSなどで体裁を整える技術の習得ということで す。 これに対して本書で勉強するWebアプリケーションとは、文字どおり「Webサーバのもとで実行されて動 的Webコンテンツを処理するアプリケーションプログラム」のことをいいます。 図1.7 動的 Web コンテンツと静的 Web コンテンツの比較

1-3-2 サーブレットとは

Webアプリケーションとして本書では「Servlet(サーブレット)」を学びます。サーブレットとはWebサーバ で実行される、Javaで記述したアプリケーションプログラムのことです。 サーブレットのほかにも動的Webコンテンツを生成できるプログラムの種類として有名なものに「CGI1 があります。CGIはWebサーバとプログラム間でリクエストとレスポンスをやりとりする規約で、プログラ ム言語としては主にPerlやC言語で記述されてきました。CGIはリクエストの都度に処理を起動しており、 これに対してサーブレットはWebサーバのメモリ上に常駐し効率よくマルチスレッド処理ができるなどの 長所があります。またJavaの特徴であるオブジェクト指向での開発に向いており、Java仮想マシンによ りさまざまなプラットフォームで動作できるようになります。

※1 CGI Common Gateway Interfaceの略。

Web サーバ Web アプリケーション クライアント PC あらかじめ用意された HTML ファイルなど クライアント PC Web サーバ

動的 Web コンテンツ

静的 Webコンテンツ

1

(18)

1-4 本書での開発と実行環境

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 サーバ (Apache など) JVM OS(Windows など) OS(Windows など) 図1.8 Tomcat と Web サーバの構成比較

1-4-2 開発環境JDKとEclipseおよびデータベースMySQL

本書のアプリケーションを開発するためには「Java Developers Kit(JDK)」を準備する必要があります。 開発用ツールとしてプログラムコード作成のエディタは「Eclipse」を利用します。Eclipseはコード作成を支 援し、コードの実行を追跡できるなどさまざまな機能を持っています。 また、本書で紹介するデータベース操作のプログラム例題の環境には、データベースソフト「MySQL※2 を使用します。 それぞれのソフトウェアの入手およびインストールの手順は本書巻末の付録を参照してください。第2章 からはインストールの準備が完了しているという前提で紹介します。 ※2 オープンソースのデータベースであり、無償で利用できるものと有償の商用版があります。

1

(19)

第2章

(20)

2-1 Eclipseによるサーブレットの開発手順

2-1-1 Eclipseの初期設定

本章では付録に紹介している開発環境のインストールが完了していることを前提に話を進めます。 サーブレットの開発をはじめる前に開発ツール「Eclipse」の初期設定を行います。インストールした Eclipseを起動します。 図2.1 Eclipse 起動 「ワークスペース・ランチャー」 このまま[OK]をクリックして進めます。 図2.2 Eclipse の起動 「ようこそ」画面 この画面でメニューの「ウィンドウ」から「設定」を選びます。 (1) 行番号の表示 下図の左側のメニューで「一般」→「エディター」→「テキスト・エディター」の順に展開・選択します。 次に右側で「行番号の表示」をチェックして、[適用]をクリックします。 図2.3 Eclipse「設定」 「テキスト・エディター」 (2) テキスト・ファイルのエンコード設定 左側のメニューで「一般」→「ワークスペース」を選びます。 次に右側で「テキスト・ファイルのエンコード」を「UTF-8」に変更して、[適用]をクリックします。 図2.4 Eclipse「設定」 「ワークスペース」

2

(21)

2-1 Eclipseによるサーブレットの開発手順

2-1-1 Eclipseの初期設定

本章では付録に紹介している開発環境のインストールが完了していることを前提に話を進めます。 サーブレットの開発をはじめる前に開発ツール「Eclipse」の初期設定を行います。インストールした Eclipseを起動します。 図2.1 Eclipse 起動 「ワークスペース・ランチャー」 このまま[OK]をクリックして進めます。 図2.2 Eclipse の起動 「ようこそ」画面 この画面でメニューの「ウィンドウ」から「設定」を選びます。 (1) 行番号の表示 下図の左側のメニューで「一般」→「エディター」→「テキスト・エディター」の順に展開・選択します。 次に右側で「行番号の表示」をチェックして、[適用]をクリックします。 図2.3 Eclipse「設定」 「テキスト・エディター」 (2) テキスト・ファイルのエンコード設定 左側のメニューで「一般」→「ワークスペース」を選びます。 次に右側で「テキスト・ファイルのエンコード」を「UTF-8」に変更して、[適用]をクリックします。 図2.4 Eclipse「設定」 「ワークスペース」

2

(22)

(3) コンパイラーの警告設定 左側のメニューで「Java」→「コンパイラー」→「エラー/警告」を選びます。 次に右側で「潜在的なプログラミングの問題」を展開し、「serialVersionUIDなしのシリアライズ可能クラス」 を「無視」に変更して、[適用]をクリックします。 図2.5 Eclipse「設定」 「エラー/警告」~「潜在的なプログラミングの問題」 同じく右側で「注釈」を展開し、「’@Override’注釈の欠落」を「警告」に変更して、[適用]をクリックします。 2.6 Eclipse「設定」 「エラー/警告」~「注釈」 また[適用]をクリックしたときに以下の「フル・ビルドを行いますか」のダイアログボックスが表示される ので、[はい]をクリックします。 図2.7 Eclipse「設定」 「適用」の確認 (4) JSPファイルのエンコード変更 左側のメニューで「Web」→「JSPファイル」を展開・選択し、右側で「エンコード」を「ISO 10646/ユニコード (UTF-8)」に変更して、[適用]をクリックします。 図2.8 Eclipse「設定」 「JSP ファイル」

2

(23)

(3) コンパイラーの警告設定 左側のメニューで「Java」→「コンパイラー」→「エラー/警告」を選びます。 次に右側で「潜在的なプログラミングの問題」を展開し、「serialVersionUIDなしのシリアライズ可能クラス」 を「無視」に変更して、[適用]をクリックします。 図2.5 Eclipse「設定」 「エラー/警告」~「潜在的なプログラミングの問題」 同じく右側で「注釈」を展開し、「’@Override’注釈の欠落」を「警告」に変更して、[適用]をクリックします。 2.6 Eclipse「設定」 「エラー/警告」~「注釈」 また[適用]をクリックしたときに以下の「フル・ビルドを行いますか」のダイアログボックスが表示される ので、[はい]をクリックします。 図2.7 Eclipse「設定」 「適用」の確認 (4) JSPファイルのエンコード変更 左側のメニューで「Web」→「JSPファイル」を展開・選択し、右側で「エンコード」を「ISO 10646/ユニコード (UTF-8)」に変更して、[適用]をクリックします。 図2.8 Eclipse「設定」 「JSP ファイル」

2

(24)

(5) Tomcat7の設定 左側のメニューで「サーバー」→「ランタイム環境」を展開・選択し、右側で[追加]をクリックします。 図2.9 Eclipse「設定」 「サーバー・ランタイム環境」 表示された「新規サーバー・ランタイム環境」のウィンドウの、「フィルター入力」から「Apache Tomcat v7.0」を選択し、[次へ]をクリックします。 図2.10 Eclipse「設定」 「サーバー・ランタイム環境」~「タイプを選択」 ウィンドウ内に「Tomcatサーバー」が表示されます。「Tomcatインストール・ディレクトリー」の[参照]をク リックして、Tomcatがインストールされたフォルダを指定します(ここではC:\Program Files\Apache Software Foundation\Tomcat 7.0のフォルダを指定しています)。 次に「JRE」の項目で[インストール済みのJRE]をクリックします。 図2.11 Eclipse「設定」 「サーバー・ランタイム環境」~「Tomcat サーバー」 「jre7」が表示されているだけですが、ここにJDKフォルダのJREを追加するために[追加]をクリックしま す。 図2.12 Eclipse「設定」 「サーバー・ランタイム環境」~「インストール済みの JRE」

2

(25)

(5) Tomcat7の設定 左側のメニューで「サーバー」→「ランタイム環境」を展開・選択し、右側で[追加]をクリックします。 図2.9 Eclipse「設定」 「サーバー・ランタイム環境」 表示された「新規サーバー・ランタイム環境」のウィンドウの、「フィルター入力」から「Apache Tomcat v7.0」を選択し、[次へ]をクリックします。 図2.10 Eclipse「設定」 「サーバー・ランタイム環境」~「タイプを選択」 ウィンドウ内に「Tomcatサーバー」が表示されます。「Tomcatインストール・ディレクトリー」の[参照]をク リックして、Tomcatがインストールされたフォルダを指定します(ここではC:\Program Files\Apache Software Foundation\Tomcat 7.0のフォルダを指定しています)。 次に「JRE」の項目で[インストール済みのJRE]をクリックします。 図2.11 Eclipse「設定」 「サーバー・ランタイム環境」~「Tomcat サーバー」 「jre7」が表示されているだけですが、ここにJDKフォルダのJREを追加するために[追加]をクリックしま す。 図2.12 Eclipse「設定」 「サーバー・ランタイム環境」~「インストール済みの JRE」

2

(26)

続いて「JREの型」で「標準VM」を選択し、[次へ]をクリックします。 図2.13 Eclipse「設定」 「サーバー・ランタイム環境」~「JRE の型」 表示された「JRE定義」では、「JREホーム」の[ディレクトリー]をクリックして、JDKがインストールされた フォルダを指定します。 図2.14 Eclipse「設定」 「サーバー・ランタイム環境」~「JRE 定義」 フォルダを選択すると上図のように「JREシステム・ライブラリー」が展開されて表示されます。 [完了]をクリックします。 「インストール済みのJRE」へ戻り、[OK]をクリックします。 図2.15 Eclipse「設定」 「サーバー・ランタイム環境」~「インストール済みの JRE」 「Tomcatサーバー」へ戻るので、「JRE」のプルダウンメニューから上図で追加したJDKフォルダのJRE (この例ではjdk1.7.0_04)を選び、[完了]をクリックします。 図2.16 Eclipse「設定」 「サーバー・ランタイム環境」~「Tomcat サーバー」 以上でTomcatの設定が完了します。

2

(27)

続いて「JREの型」で「標準VM」を選択し、[次へ]をクリックします。 図2.13 Eclipse「設定」 「サーバー・ランタイム環境」~「JRE の型」 表示された「JRE定義」では、「JREホーム」の[ディレクトリー]をクリックして、JDKがインストールされた フォルダを指定します。 図2.14 Eclipse「設定」 「サーバー・ランタイム環境」~「JRE 定義」 フォルダを選択すると上図のように「JREシステム・ライブラリー」が展開されて表示されます。 [完了]をクリックします。 「インストール済みのJRE」へ戻り、[OK]をクリックします。 図2.15 Eclipse「設定」 「サーバー・ランタイム環境」~「インストール済みの JRE」 「Tomcatサーバー」へ戻るので、「JRE」のプルダウンメニューから上図で追加したJDKフォルダのJRE (この例ではjdk1.7.0_04)を選び、[完了]をクリックします。 図2.16 Eclipse「設定」 「サーバー・ランタイム環境」~「Tomcat サーバー」 以上でTomcatの設定が完了します。

2

(28)

・本書でのコード体裁について 本書で取り扱うプログラムコードは、限られたページ幅に書き表すためEclipseに以下の体裁を施してい ます。 Eclipseの「設定」メニュー→「Java」→「コード・スタイル」→「フォーマッター」と展開します。 ここで[新規]をクリックして、フォーマットのプロファイルを作成して適用しています。 図2.17 Eclipse「設定」 「フォーマッター」 プロファイルの「行折り返し」で「行の最大幅」を70文字、その下の「デフォルト・インデント」をそれぞ れ2文字で設定し、適用します。 図2.18 Eclipse「設定」 「フォーマッター」~「プロファイル」 プログラムソースを編集する際は、エディタ画面を開いているときに「ソース」メニューから「フォーマット」 を選び、フォーマットの体裁を適用します。

2

(29)

・本書でのコード体裁について 本書で取り扱うプログラムコードは、限られたページ幅に書き表すためEclipseに以下の体裁を施してい ます。 Eclipseの「設定」メニュー→「Java」→「コード・スタイル」→「フォーマッター」と展開します。 ここで[新規]をクリックして、フォーマットのプロファイルを作成して適用しています。 図2.17 Eclipse「設定」 「フォーマッター」 プロファイルの「行折り返し」で「行の最大幅」を70文字、その下の「デフォルト・インデント」をそれぞ れ2文字で設定し、適用します。 図2.18 Eclipse「設定」 「フォーマッター」~「プロファイル」 プログラムソースを編集する際は、エディタ画面を開いているときに「ソース」メニューから「フォーマット」 を選び、フォーマットの体裁を適用します。

2

(30)

2-1-2 簡単なサーブレットの作成

Eclipseの環境の準備が整ったところで、ワークスペースにもっとも簡単なサーブレットを作成してみます。 ここでは以下のようなホームページ結果が表示されるサーブレットの、作成から実行までの作業を確認 しましょう。 図2.19 簡単なサーブレットを実行した結果 (1) Eclispeの「ファイル」メニューから[新規]→「動的Webプロジェクト」※1を選択します。 2.20 Eclipse「動的 Web プロジェクト」の作成メニュー ※1 Eclipseでは開発の作業に関するファイルや実行の環境などの情報を「プロジェクト」というフォルダで管理します。本書で紹介 している例題や練習問題は、その演習の区切りを単位にプロジェクトを作成します。また、これらプロジェクトと一連の開発作業環境 はまとめて「ワークスペース」というフォルダへ保存されています。 「プロジェクト名」に「HelloWorldPJ」と入力して、[完了]をクリックします。 図2.21 Eclipse「動的 Web プロジェクト」 画面左側の「プロジェクト・エクスプローラー」にHelloWorldPJプロジェクトが作成されます。 (2) 三角形アイコンをクリックしてプロジェクトを展開し内容を確認します。 図2.22 Eclipse 動的 Web プロジェクトを作成した直後

2

(31)

2-1-2 簡単なサーブレットの作成

Eclipseの環境の準備が整ったところで、ワークスペースにもっとも簡単なサーブレットを作成してみます。 ここでは以下のようなホームページ結果が表示されるサーブレットの、作成から実行までの作業を確認 しましょう。 図2.19 簡単なサーブレットを実行した結果 (1) Eclispeの「ファイル」メニューから[新規]→「動的Webプロジェクト」※1を選択します。 2.20 Eclipse「動的 Web プロジェクト」の作成メニュー ※1 Eclipseでは開発の作業に関するファイルや実行の環境などの情報を「プロジェクト」というフォルダで管理します。本書で紹介 している例題や練習問題は、その演習の区切りを単位にプロジェクトを作成します。また、これらプロジェクトと一連の開発作業環境 はまとめて「ワークスペース」というフォルダへ保存されています。 「プロジェクト名」に「HelloWorldPJ」と入力して、[完了]をクリックします。 図2.21 Eclipse「動的 Web プロジェクト」 画面左側の「プロジェクト・エクスプローラー」にHelloWorldPJプロジェクトが作成されます。 (2) 三角形アイコンをクリックしてプロジェクトを展開し内容を確認します。 図2.22 Eclipse 動的 Web プロジェクトを作成した直後

2

(32)

(3) プロジェクトを選択した状態で、メニューの「ファイル」から「新規」→「サーブレット」を選択します。 図2.23 Eclipse「サーブレット」作成メニュー (4) 「Javaパッケージ」に「chapter2」、「クラス名」に「HelloWorldServlet」と入力して、[次へ]をクリックし ます。 図2.24 Eclipse「サーブレット作成」その1 表示される項目を確認します。 ここではそのまま[次へ]をクリックします。 図2.25 Eclipse「サーブレット作成」その2 「スーパークラスからのコンストラクター」のチェックを外します。 「継承された抽象メソッド」の種類で「doPost」のチェックを外し「doGet」だけをチェックして、[完了]を クリックします。 図2.26 Eclipse「サーブレット作成」その3 サーブレットのJavaソースプログラムとして最小限のコードが作成されます。

2

(33)

(3) プロジェクトを選択した状態で、メニューの「ファイル」から「新規」→「サーブレット」を選択します。 図2.23 Eclipse「サーブレット」作成メニュー (4) 「Javaパッケージ」に「chapter2」、「クラス名」に「HelloWorldServlet」と入力して、[次へ]をクリックし ます。 図2.24 Eclipse「サーブレット作成」その1 表示される項目を確認します。 ここではそのまま[次へ]をクリックします。 図2.25 Eclipse「サーブレット作成」その2 「スーパークラスからのコンストラクター」のチェックを外します。 「継承された抽象メソッド」の種類で「doPost」のチェックを外し「doGet」だけをチェックして、[完了]を クリックします。 図2.26 Eclipse「サーブレット作成」その3 サーブレットのJavaソースプログラムとして最小限のコードが作成されます。

2

(34)

(5) 画面左側の「プロジェクト・エクスプローラー」では「HelloWorldPJ」プロジェクト→「Java Resources」 →「src」に「chapter2」パッケージが作成されて「HelloWorldServlet.java」が格納されていることがわかり ます。 図2.27 Eclipse サーブレット作成の直後 ・「@Override」警告への対処 プログラムの中央部分で警告のアイコンが表示されています。 マウスを近づけると次のように警告の原因が表示されます。 こうした場合には、警告の黄色のアイコンをクリックして「欠落している@Override注釈を追加します」を 選びます。 ソースには「@Override」アノテーションが追加されます。 続いて、メニューの「ファイル」→「保管」を実行すると警告が消えます。 ・簡単な出力処理の記述 doGetメソッド部に簡単な出力処理を記述します。(下記の例で26~34行を追加)

2

(35)

(5) 画面左側の「プロジェクト・エクスプローラー」では「HelloWorldPJ」プロジェクト→「Java Resources」 →「src」に「chapter2」パッケージが作成されて「HelloWorldServlet.java」が格納されていることがわかり ます。 図2.27 Eclipse サーブレット作成の直後 ・「@Override」警告への対処 プログラムの中央部分で警告のアイコンが表示されています。 マウスを近づけると次のように警告の原因が表示されます。 こうした場合には、警告の黄色のアイコンをクリックして「欠落している@Override注釈を追加します」を 選びます。 ソースには「@Override」アノテーションが追加されます。 続いて、メニューの「ファイル」→「保管」を実行すると警告が消えます。 ・簡単な出力処理の記述 doGetメソッド部に簡単な出力処理を記述します。(下記の例で26~34行を追加)

2

(36)

ここでも警告表示されています。 警告の赤いアイコンをクリックして「’PrintWriter’をインポートします」を選びます。 java.io.PrintWriterのimport文が追加されて、警告が消えます。 これまでの作業で完成したサーブレットのコードは次のようになります。 ファイル: HelloWorldServlet.java ソースコード 01:  02:  03:  04:  05:  06:  07:  08:  09:  10:  11:  12:  13:  14:  15:  16:  17:  18:  19:  20:  21:  22:  23:  24:  25:  26:  27:  28:  29:  30:  31:  32:  33:  34:  35:  36:  37:  38:  39:  package chapter2;    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>");    }    }  追加した行  追加した行  追加した行 

2

(37)

ここでも警告表示されています。 警告の赤いアイコンをクリックして「’PrintWriter’をインポートします」を選びます。 java.io.PrintWriterのimport文が追加されて、警告が消えます。 これまでの作業で完成したサーブレットのコードは次のようになります。 ファイル: HelloWorldServlet.java ソースコード 01:  02:  03:  04:  05:  06:  07:  08:  09:  10:  11:  12:  13:  14:  15:  16:  17:  18:  19:  20:  21:  22:  23:  24:  25:  26:  27:  28:  29:  30:  31:  32:  33:  34:  35:  36:  37:  38:  39:  package chapter2;    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>");    }    }  追加した行  追加した行  追加した行 

2

(38)

ここまでの作業で完成したEclipseのワークスペースは以下のファイル・フォルダ構成になっています。 プロジェクト名: HelloWorldPJ HelloWorldPJ  └─src      └─chapter2        HelloWorldServlet.java    完成したソースプログラムでのアノテーション 完成したソースプログラムではアノテーションが15行(@WebServlet)、23行 (@Override)に設定されています。アノテーション自体は注釈ですが、コンパイ ルでのチェックや定型処理の点検支援が可能となり、開発作業が改善される 利点があります。 こ の う ち 、 @Override ア ノ テ ー シ ョ ン は ス ー パ ー ク ラ ス ( サ ー ブ レ ッ ト で は HttpServletクラス)のdoGetメソッドをオーバーライドすることを明示しています。 開発時によくありがちなミスの一つの例としてメソッド名は正しいが引数を間違 える、すなわちシグニチャの不一致があります。継承によりスーパークラスを オーバーライドしているつもりでも、シグニチャが不一致ではコンパイルエラー にはならず、実行して初めてその誤りを発見することになります。このようなミ スを実行前に防止するには、「サブクラスはこのようなメソッドをオーバーライド しますよ」と宣言させることで、スーパークラスのメソッドとのチェックが可能にな ります。 @WebServletアノテーションは、「2-2-4 起動呼出しでのURLアドレスとアノテー ション@WebServlet」を参照してください。 (6) 作成したサーブレットを実行します。 「プロジェクト・エクスプローラー」で「HelloWorldServlet.java」を右クリックし「実行」→「1 サーバーで実行」 を選択します。 図2.28 Eclipse「サーバーで実行」メニュー

2

(39)

ここまでの作業で完成したEclipseのワークスペースは以下のファイル・フォルダ構成になっています。 プロジェクト名: HelloWorldPJ HelloWorldPJ  └─src      └─chapter2        HelloWorldServlet.java    完成したソースプログラムでのアノテーション 完成したソースプログラムではアノテーションが15行(@WebServlet)、23行 (@Override)に設定されています。アノテーション自体は注釈ですが、コンパイ ルでのチェックや定型処理の点検支援が可能となり、開発作業が改善される 利点があります。 こ の う ち 、 @Override ア ノ テ ー シ ョ ン は ス ー パ ー ク ラ ス ( サ ー ブ レ ッ ト で は HttpServletクラス)のdoGetメソッドをオーバーライドすることを明示しています。 開発時によくありがちなミスの一つの例としてメソッド名は正しいが引数を間違 える、すなわちシグニチャの不一致があります。継承によりスーパークラスを オーバーライドしているつもりでも、シグニチャが不一致ではコンパイルエラー にはならず、実行して初めてその誤りを発見することになります。このようなミ スを実行前に防止するには、「サブクラスはこのようなメソッドをオーバーライド しますよ」と宣言させることで、スーパークラスのメソッドとのチェックが可能にな ります。 @WebServletアノテーションは、「2-2-4 起動呼出しでのURLアドレスとアノテー ション@WebServlet」を参照してください。 (6) 作成したサーブレットを実行します。 「プロジェクト・エクスプローラー」で「HelloWorldServlet.java」を右クリックし「実行」→「1 サーバーで実行」 を選択します。 図2.28 Eclipse「サーバーで実行」メニュー

2

(40)

「サーバーで実行」では「フィルター入力」は「Tomcat v7.0サーバー」、「サーバーのホスト名」は 「localhost」、「サーバー・ランタイム環境」は「Apache Tomcat v7.0」が既定で表示されます。これを確認 して[完了]をクリックします。 図2.29 Eclipse「サーバーで実行」 数分経過してから以下のようにEclipseの内部ブラウザに「Hello World!」が表示されます。また、「プロ ジェクト・エクスプローラー」には「Servers」フォルダ※1が新しく表示されます。 ※1 EclipseはTomcatのWebサーバ機能を呼び出します。Tomcatサーバ定義はEclipseの「Servers」フォルダに作られたものを参照 します。TomcatのプログラムやライブラリはTomcatがインストールされたフォルダ内のものを使用します。 図2.30 Eclipse の内部ブラウザでの表示結果 Eclipse以外のブラウザ(ここではインターネットエクスプローラ)を使う場合は、以下のアドレスを入力す ると表示されます。 http://localhost:8080/HelloWorldPJ/HelloWorldServlet  図2.31 インターネットエクスプローラでの表示結果

2

(41)

「サーバーで実行」では「フィルター入力」は「Tomcat v7.0サーバー」、「サーバーのホスト名」は 「localhost」、「サーバー・ランタイム環境」は「Apache Tomcat v7.0」が既定で表示されます。これを確認 して[完了]をクリックします。 図2.29 Eclipse「サーバーで実行」 数分経過してから以下のようにEclipseの内部ブラウザに「Hello World!」が表示されます。また、「プロ ジェクト・エクスプローラー」には「Servers」フォルダ※1が新しく表示されます。 ※1 EclipseはTomcatのWebサーバ機能を呼び出します。Tomcatサーバ定義はEclipseの「Servers」フォルダに作られたものを参照 します。TomcatのプログラムやライブラリはTomcatがインストールされたフォルダ内のものを使用します。 図2.30 Eclipse の内部ブラウザでの表示結果 Eclipse以外のブラウザ(ここではインターネットエクスプローラ)を使う場合は、以下のアドレスを入力す ると表示されます。 http://localhost:8080/HelloWorldPJ/HelloWorldServlet  図2.31 インターネットエクスプローラでの表示結果

2

参照

関連したドキュメント

(実被害,構造物最大応答)との検討に用いられている。一般に地震動の破壊力を示す指標として,入

この問題に対処するため、第5版では Reporting Period HTML、Reporting Period PDF 、 Reporting Period Total の3つのメトリックのカウントを中止しました。.

WAV/AIFF ファイルから BR シリーズのデータへの変換(Import)において、サンプリング周波 数が 44.1kHz 以外の WAV ファイルが選択されました。.

Jabra Talk 15 SE の操作は簡単です。ボタンを押す時間の長さ により、ヘッドセットの [ 応答 / 終了 ] ボタンはさまざまな機

タップします。 6通知設定が「ON」になっ ているのを確認して「た めしに実行する」ボタン をタップします。.

えて リア 会を設 したのです そして、 リア で 会を開 して、そこに 者を 込 ような仕 けをしました そして 会を必 開 して、オブザーバーにも必 の けをし ます

[r]

原則としてメール等にて,理由を明 記した上で返却いたします。内容を ご確認の上,再申込をお願いいた