Javaサーバサイドプログラミング パーフェクトマスター

概 要

Javaははじめてですか? でも、しり込みしなくたっていいんです。いきなりサーバサイドからはじめましょう! 本書は、Webエンジニアを目指す人のために対話形式でJava EEを基礎からストア構築まで動かしながら学べる解説書です。Javaサーブレットを学び、Java EEを極めていく一方、初心者のためにコラム形式でJavaの基本も説明します。実行環境の構築、ロジックの作成、データベース連携まで動かしながら覚えられます!

著者 金城俊哉
価格 本体3500円(税別)
ISBN 978-4-7980-4518-4
発売日 2015/12/21
判型 B5変
ページ数 716
CD/DVD
ダウンロード
表紙イメージ
購入 アマゾンで購入する
楽天で購入する

※リンク先によっては、販売ページが用意されていないことがあります。あらかじめご了承ください。

新しいウィンドウで開く 書籍購入のご案内

サポート

サポート情報は以下からご参照下さい。

サポート情報へのリンク

目次

Chapter 1 Java EE 7の概論、まずはここからはじめましょう

1.1 Java EE何ができるの?

1.1.1 Webはインターネット上の基幹技術

1.1.2 同じWebページを扱うのにクライアントとサーバー側では異なる技術が使われる

HTMLがあるのになぜJavaが必要なのか

Memo WebアプリケーションサーバーとWebサーバー

1.1.3 ところでJavaってどんな言語-

プログラミング言語Java

ところでJava EEを使ってプログラミングをすると何ができるの?

1.2 Java EEでどうやってプログラムを作るの?

1.2.1 Java SEとNetBeans

NetBeansがあればJava EEアプリの開発/運用がまとめて行える

1.3 ペアプログラミング方式でJava EE 7を完全習得

1.3.1 Java EEの学習をスイスイ進めるために

ミドルエンジニアとベテランプログラマーによるペアプロを誌上で再現

1.3.2 順番に読み進めなくたっていいんです!

FAQ

Chapter 2 開発環境、ささっと揃える

2.1 サーバーサイドJavaの開発環境を用意しよう

2.1.1 サーバーサイドJavaに必要なツールはこれだ!

Java Platform,Standard Editionを入手すればJavaの開発環境が用意できる

実際にソースコードと書いて実行するためのIDE、それからサーバー(NetBeansとGlassFish)

2.1.2 まずはJavaの基本、Java Platform,Standard Editionを用意

Java Platform,Standard Editionをダウンロードする

2.1.3 統合開発環境NetBeansを用意する

NetBeansのダウンロード

Memo JDK関連の用語

2.1.4 GlassFishをインストールすればJava EEもインストールされるんだね

OnePoint 商用サポートが必要な場合は

GlsassFishのインストール

2.1.5 GlassFishサーバーを起動

GlassFishサーバーを起動する

Chapter 3 サーブレット、そうプログラムの最終的なかたち

3.1 サーブレットを作って動かしてみる

3.1.1 NetBeansでプロジェクトを作成する

NetBeansでサーブレット用のプロジェクトを作成する

できたてのプロジェクトを実行してみる

Memo 実行するブラウザーの指定

3.1.2 サーブレットを作ると何ができるの?

サーブレットが実行されるとHTMLが出力される

Memo GlassFishのデフォルトのポート番号は「8080」

3.1.3 サーブレットクラスを作成する

サーブレットクラスをプロジェクトに追加する

Memo パッケージ名

Memo コンテキストパスとURLパターン

3.1.4 作成直後のサーブレットクラスを即、実行してみる

サーブレットを実行する

サーブレットの中身を見る

Hint プロジェクトをビルドするとどーなるの?

3.1.5 まずはサーブレットで「プログラムらしい処理」をしてみよう

ランダムにメッセージを返すサーブレットを作る

A to Z ミドルエンジニアの素朴な疑問① クラスについて

A to Z ミドルエンジニアの素朴な疑問② フィールドと変数って何が違う?

3.2 サーブレットは1個のインスタンスですべてをまかなう-

3.2.1 サーブレットがリクエストされた回数をカウントする(サーブレットのライフサイクル)

int型のフィールドを持つサーブレットを作成

3.2.2 サーブレットが生成されて破棄されるまで(サーブレットのライフサイクル)

シングルインスタンス・マルチスレッド

サーブレットのライフサイクルを見る

A to Z ミドルエンジニアの素朴な疑問③ そもそもJavaのメソッドって?

A to Z ミドルエンジニアの素朴な疑問④ フィールドはどうやって作る?

Chapter 4 Java EE 7、概要を理解して開発に備える

4.1 そもそもJava EEって何者-

4.1.1 Java EEは「3層システム」の中で培われてきた

3層型システムに対応すべく登場したJava EE

Memo Java EEはどのような経緯で現在の仕様になったのか

4.1.2 Java EE 7は「スーパーフレームワーク」なのだ

Java EE 7はプレゼン/ビジネス/データリンクの専用フレームワークを用意

4.1.3 そもそもアプリケーションサーバーって何をするの?

Java EE対応アプリケーションサーバーの役割

A to Z ミドルエンジニアの素朴な疑問⑤ 呼んだら何か返ってきましたけど(メソッドの戻り値)

A to Z ミドルエンジニアの素朴な疑問⑥ コンストラクターってメソッドとどう違うんでしたっけ?

Chapter 5 まずは画面を作らなきゃ! JSF-

5.1 JSPの/サーブレットを進化させた複合型フレームワーク、それがJSF

Memo FacesServletのもう少し詳しい話

5.1.1 JSF、それは画面を作るためのフレームワーク

JSFではプレゼンテーション層にJSFページ、マネージドBeanを配置

5.1.2 JSFがリクエストされてからレスポンスを返すまで(JSFのライフサイクル)

送信した画面はコンポーネントツリーに保存

JSFのライフサイクル

5.2 JSFで入力データを処理するぞ

5.2.1 JSF用のプロジェクトの作成と文字エンコードの設定

JSF用のプロジェクトを作成する

GlassFishにおける文字のエンコード方式を設定する

Memo glassfish-web.xml

5.2.2 入力データを送信するためのJSFページを作成する

Faceletsタグを配置してJSFページを作る

EL文を使ってJSFページにJavaのコードを埋め込む

Memo EL式における()演算子、empty演算子、[]演算子、.演算子

バインドを実行するためのコマンドボタンを配置する

actionListener/action属性を使えばボタンクリックでメソッドが呼び出せる

必要な部品を配置してJSFページを完成させる

Memo Faceletsのタグ

5.2.3 バッキングBeanを作ればプログラムが実行できる

フィールドの値を出力するバッキングBeanを作成する

Memo EL式で使える演算子

JSFページを実行してデータを入力してみる

5.2.4 FacesServletの動作環境を設定するweb.xml

web.xmlでFacesServletの動作環境を設定する

5.3 別のJSFページに移動する(ページ間のナビゲーション)

5.3.1 入力用のページと結果を表示するページを作成する

データ入力用ページの作成

バッキングBeanのメソッドを作成する

5.3.2 結果を表示するページを作成する

入力結果を表示するJSFページの作成

データを入力した結果を見てみる

5.3.3 出力結果を表形式で出力する

表形式でデータを出力する

Attention ネームスペースの追加

5.4 JSFページの見た目をCSSで設定する

5.4.1 CSSファイルなどのリソースの管理は「resource」フォルダーで

Memo CSSによるスタイルの設定

Memo CSSのセレクター

Memo CSSのクラスセレクター

「resource」フォルダーを作成し内部にCSSファイルを格納する

Memo CSSのIDセレクター

5.4.2 JSFページにCSSルールを適用する

入力用のJSFページにCSSを適用する

入力した結果を表示するJSFページにCSSを適用する

5.5 JSFページにおける入出力処理

5.5.1 テキストの出力

テキストの出力の基本、<h:outputText>タグ

Tips HTMLエスケープを無効にする

Memo フォーマット済みテキスト

5.5.2 グラフィックスの出力

resourcesフォルダーに格納した画像ファイルを表示する

5.5.3 複数行の入力に対応する

<h:inputTextarea>タグで複数行の入力に対応する

Tips テキストエリアに入力したとおりに改行して表示したい

5.5.4 未入力じゃ困ります!(エラーメッセージの出力)

未入力の状態で[送信]ボタンがクリックされたらメッセージを表示する

Memo label属性を設定しないとどうなるの?

Hint 一部のテキストフィールドだけにエラーメッセージを表示する

ページ上で発生したエラーをまとめて表示する

A to Z ミドルエンジニアの素朴な疑問⑦ え? コンストラクターって必ず書かなくてもいいんですか?(デフォルトコンストラクター)「何も入力されてませんが(・ω・)」って表示しちゃえ(メッセージのカスタマイズ)

Memo faceletsタグに設定できる属性

Memo <h:panelGrid>タグに設定できる属性

A to Z ミドルエンジニアの素朴な疑問⑧ コンストラクターっていくつも作れるんですね

Memo 入力系のタグに設定できる属性

5.6 UI部品を配置してユーザーインターフェイスを作成

5.6.1 「より取り見取り」の選択はチェックボックスで

え? チェックボックスなのにYesかNoだけ!

複数項目の選択に対応、チェックボックス本来の姿だね

チェックボックスのアイテムをまとめて設定する

OnePoint LinkedHashMapクラス

5.6.2 「どれか1つだけ」の選択はラジオボタンで

ラジオボタンを配置して1項目のみ選択可にする

Memo static初期化子とインスタンス初期化子

A to Z ミドルエンジニアの素朴な疑問⑨ 何で参照変数はMapインターフェイス型なの?

5.6.3 リスト形式で選択肢を表示する

複数選択可のリストボックスを配置する

5.6.4 プルダウン式のメニューで選択肢を表示する

1項目選択式のプルダウンメニューを配置する

5.6.5 数あるデータも表にしちゃえば見やすくなる(データテーブル)

関連するデータを1行ずつデータテーブルに出力する

Memo ヘッダー/フッダーの表示

A to Z ミドルエンジニアの素朴な疑問⑩ オブジェクトが自分自身を参照したい場合は?(this参照)

Memo CSSの適用

A to Z ミドルエンジニアの素朴な疑問⑪ オブジェクトを必要としないメソッドって?(静的メンバー)

Chapter 6 入力値の変換と検証(コンバートとバリデート)

6.1 入力された値を任意の型に変換する

6.1.1 入力値を数値のデータにコンバートする

「1000」を「\1,000」と表示する

Memo 地域と言語の設定

6.1.2 入力値を日付形式のデータにコンバートする

「2013/12/6」と入力したデータを「2013年12月6日」と表示する

Memo <f:convertDateTime>タグの属性

6.2 入力ミス、チェックさせてもらいます

6.2.1 JSFの標準機能でチェックします(JSF標準バリデーター)

JSF標準バリデーターで入力値をチェックする

OnePoint コンバートできない値を入力した場合のエラーメッセージ

6.2.2 意味不明のメッセージをわかりやすくする

デフォルトのエラーメッセージを別のメッセージに書き換える

6.3 ビーン・バリデーションで入力値を制御する

6.3.1 バッキングBeanでバリデーションを行う(Beanバリデーション)

バッキングBeanの入力チェック機能はアノテーションで実装

6.3.2 Beanバリデーションの英語メッセージを日本語に変える

アノテーションに設定されいるエラーメッセージを独自のものに変更する

6.4 オリジナルのアノテーションでBeanバリデーション

6.4.1 独自のアノテーション型を定義してバリデーションするぞ!

独自のアノテーション型を宣言する

アノテーション型のバリデータークラスを作成する

作成したアノテーションの設定とエラーメッセージの設定

6.5 JavaScriptでバリデーション-(Ajaxバリデーション)

6.5.1 AjaxってJavaScriptの機能ですよね

同期処理とAjaxによる非同期処理

Ajaxを実行するJavaScriptを生成する<f:ajax>タグ

6.5.2 [送信]ボタンをクリックする前にバリデーションを実行するのだ

Ajaxでバリデーション

書籍データの入力ページにAjaxバリデーションを埋め込む

Memo <f:ajax>タグの属性

A to Z ミドルエンジニアの素朴な疑問⑫ クラスの継承について基礎から教えて!

A to Z ミドルエンジニアの素朴な疑問⑬ サブクラスのそのまたサブクラスってのもアリなんですね(サブクラスの継承)

Chapter 7 オブジェクト自動生成(CDI)

7.1 newを書かなくても自動でインスタンス化、それはCDI

7.1.1 ゆるーい依存関係が仕様変更に強い仕組みを作るんですね

ユルイ結合、疎結合でオブジェクト同士を結び透ける

DIから機能強化版のCDIへ

7.1.2 バッキングBeanで別クラスのオブジェクトを生成して処理を行う

CDIを利用して「運試し」アプリを作る

プレゼンテーション層はWebコンテナー、ビジネスロジック層はEJBコンテナーが管理

7.1.3 インターフェイスでCDIBeanを呼び分ける

インターフェイスを実装しているクラスを限定子で指定する

Memo DIから進化したCDI

Hint @Retentionと@Target

Tips 1つの限定子で複数のCDIBeanを呼び分ける

7.2 画面が変わっても前に入力した値が消えないようにする

7.2.1 まずはJSFのセッション管理について

JSFではデフォルトでセッションが開始される

7.2.2 ConversationスコープでバッキングBeanを維持するのだ

書籍購入に関する入力操作を複数の画面で連携処理する

Memo シリアライズ(直列化)とでデシリアライズ(直列化復元)

Tips CDIBeanではないクラスをインジェクトする

A to Z ミドルエンジニアの素朴な疑問⑭ サブクラスをインスタンス化すると、スーパークラスのコンストラクターは?

Chapter 8 EJBでビジネスロジック(データ処理)を実現

8.1 JSFがWeb回りの中心なら、EJBはビジネスロジックの中心なのだ

Memo これから先はCDIBean+EJBで開発!

8.1.1 EJBにはセッションBeanとメッセージ駆動Beanがある

ビジネスロジックはセッションBeanで、コンピューター間通信はメッセージ駆動Beanで

8.1.2 Webアプリケーションで使うのはセッションBeanのSLSBだ!

ステートレス、ステートフル、シングルトンなセッションBean

8.1.3 セッションBeanを作成してインジェクトする

専用のアノテーションを配置すればセッションBeanが作成できる

EJBをインジェクトする

Memo EJBの概要をまとめておきましょう

8.2 いつまでも値を保持するEJB、非同期で呼び出せるEJB

8.2.1 EJBのインスタンスで値を保持するぞ(シングルトン・セッションBean)

すべてのクライアントが1個のインスタンスを参照する(シングルトン・セッションBean)

1つ目の入力画面とバッキングBeanを作成する

2つ目の入力画面とバッキングBeanを作成する

Memo シングルトン・セッションBeanで使用できるアノテーション

8.2.2 非同期呼び出し

処理が終わらなくても他の処理を呼び出す

8.3 コールバックメソッド、インターセプター、それからイベントまで

8.3.1 初期化とか終了処理とか

ライフサイクル・コールバックメソッドでコールバックするぞ!

Memo ライフサイクル・コールバックメソッドの制限事項

OnePoint ログの出力レベル

8.3.2 インターセプターで処理の途中に割り込んじゃえ!

インターセプターを作成する

インターセプターの使用

8.3.3 イベント発生装置

イベントを発生させて処理を委ねる

A to Z ミドルエンジニアの素朴な疑問⑮ メソッドのすげ替え? オーバーライドのことですよね

A to Z ミドルエンジニアの素朴な疑問⑯ 抽象クラスって何が抽象的なの?

Chapter 9 Java EE 7でデータベース操作

9.1 Java DBを起動して空のデータベースを作成する

9.1.1 セキュリティポリシーを編集してJava DBの通信を許可する

Java DBの通信を許可する

9.1.2 空のデータベースを作成する

まっさらな空のデータベースを作成する

Memo POJOとは

9.2 データベースをJavaで扱えるようにするオブジェクト、それがエンティティ

9.2.1 データリンク層でデータベースと繋がるJPA

データリンク層の処理はJPAコンテナーが司るのだ

Attention Date型やCalendar型のフィールドには@Temporalを配置する

9.2.2 エンティティを永続化するデータリンクのEJB

EJBを作成してエンティティ・マネージャーをインジェクトする

エンティティがエンティティ・マネージャーの管理下に入るまでの流れ

9.2.3 データベースへの登録処理はバッキングBeanで制御する

命令の発信元のバッキングBeanを作成する

9.2.4 ロギングの実行クラスを作成

ロガーの作成

OnePoint 「ログ」「ロギング」「ロガー」

Memo エンティティ・マネージャーのメソッド

9.2.5 登録用のJSFページを作成する

登録用の画面を作る

Memo エンティティの状態遷移

9.2.6 永続化ユニットとデータソースを作成すればアプリケーションを実行できるよ!

JPAがデータベースに接続する仕組み

データソースと永続化ユニットの作成

書籍データ登録アプリでデータベースに登録してみよう

9.3 書籍データ登録アプリに更新/削除/検索機能を実装する

9.3.1 「書籍データ登録システム」の構造

「書籍データ登録システム」で作成するソースファイルを確認

9.3.2 まずはアプリケーションの画面から作成

トップ画面/更新/削除/検索用のJSFページを作成する

9.3.3 バッキングBeanを作成する

バッキングBeanのメソッドでビジネスロジックと連携する

9.3.4 データベースのレコードを更新/削除/検索するには

エンティティはデータベースの中身をオブジェクトにしたものだって?

EJBにCRUD機能を実装する

OnePoint classフィールド

EJBを作れば「書籍データ登録システム」の完成だ!

Memo Javaのデータ型とJava DBのデータ型の対応

Chapter 10 データベースをオブジェクトで制御する

10.1 データベースをオブジェクトで操作する

10.1.1 デーブル名を独自の名前にする

テーブル名をエンティティとは異なる名前にする

10.1.2 データを複数のテーブルに分割して登録する(リレーショナルデータベースの作成)

ユーザーの郵便番号と住所をそれぞれ専用のテーブルで管理する

10.1.3 エンティティに別のクラスのフィールドを組み込む

別のクラスで定義したフィールドをエンティティに組み込む

10.1.4 レコードに自動的に連番を振る

レコードを追加したら主キーの値を自動で生成する

Memo エンティティで使えるアノテーション

10.1.5 複数の値を合体して主キーにする

2つのカラムをまとめて主キーにする

Tips 複合キーを定義するクラスを丸ごとエンティティに埋め込む

10.1.6 エンティティのフィールドに複数のデータを格納できるようにする(コレクション)

1つのフィールドに複数の値をまとめて格納し、独立したレコードとして登録する

Memo ジェネリクス(総称型)によるArrayListの操作

10.2 オブジェクトをデータベースに対応付け、それがORM

10.2.1 オブジェクトをデータベースに対応付け- それってマッピング?

ORMって何をしてくれるの-

10.2.2 ではOne-To-One(1方向)いってみよう

まずはOne-To-Oneを使わないでやってみよう

それではOne-To-One(1方向)いってみよう

10.2.3 One-To-One(双方向)いってみよう

One-To-One(双方向)にすると互いに参照できるよ!

10.2.4 One-To-Many(1方向)で1対多の関係だ

One-To-Many(1方向)の関係を構築する

10.2.5 One-To-Many(双方向)で互いに参照できるようにしよう

One-To-Many(双方向)の関係を構築する

A to Z ミドルエンジニアの素朴な疑問⑰ 抽象メソッドだけを宣言するとインターフェイスになる?

Chapter 11 Java EEによるオンラインブックストアの開発

11.1 Javaが話すSQL言語、それはJPQL

11.1.1 JPQLの書き方、ほとんどSQLと同じだね

データの抽出と言えばSELECT文

何で絞り込む? それはWHERE句で指定

Memo カラムのデータの合計や平均、最高値を表現する-集約関数

抽出したデータの並べ替えはORDER BY句で

データの更新と削除

11.1.2 JPQL文をクエリとして実行する4つの方法

動的クエリ

名前付きクエリ

ネイティブクエリを使えば素のSQLが書けるのね

11.2 「Java EE 7 オンラインブックストア」の開発①(データの登録)

11.2.1 ブックストア用のデータベースとデータ登録用プロジェクトの作成

データベース「books」の作成

プロジェクトと永続化ユニットの作成

Attention 表作成を繰返し実行したい場合

11.2.2 書籍データ登録アプリの作成

JSFページの作成

バッキングBeanの作成

エンティティクラスの作成

EJBの作成

画像ファイルからデータを読み込むBinaryDataUtilityクラスの作成

書籍データを登録する

11.3 「Java EE 7 オンラインブックストア」の開発②(エンティティの作成)

11.3.1 オンラインブックスストア用プロジェクトの作成

BookStoreプロジェクトを作成して必要な設定を済ませておく

11.3.2 書籍データ用エンティティの作成

BOOKテーブル用のエンティティクラスを作成する

11.3.3 アカウントデータ用エンティティの作成

アカウントデータを扱う2つのエンティティを作成する

注文内容を扱うエンティティを作成する

11.4 「Java EE 7 オンラインブックストア」の開発③(EJBの登録)

11.4.1 データベースの操作を行うEJBを作成する

ジェネリッククラスとEJBをまとめて作成

11.4.2 書籍データをデータベースから取得しなきゃね

書籍データの取得を行うEJBを作成する

Memo Java 8のラムダ式っていったい何?

11.4.3 購入履歴をデータベースから取り出せるようにする

購入履歴の取得を行うEJBを作成する

Memo ラムダ式に使用したStreamインターフェイス

11.5 「Java EE 7 オンラインブックストア」の開発④(ページング処理とバッキングBean)

11.5.1 ページを「進む」「戻る」ができなきゃね(ページング)

ページング処理で書籍データを5件ずつ画面に表示する

11.5.2 Loggerオブジェクトを生成するクラスを作成しておかなきゃね

ロガーを生成するクラスの作成

11.5.3 バッキングBeanのスーパークラスを作成する

データベースから画像を読み込んで表示する

メッセージを設定するメソッドを定義する

リクエストに関する情報を取得する

ではバッキングBeanのスーパークラスの定義、いってみよう

11.5.4 注文処理を行うバッキングBean「OederHandler」を作成

書籍の注文はOederHandlerクラスでまとめて処理!

11.6 「Java EE 7 オンラインブックストア」の開発⑤(画面の作成)

11.6.1 ページの「ひな形」、テンプレートを作ってコンテンツを供用する

テンプレートの作成

各ページの作り方

Memo PrimeFacesの<p:growl>タグ

CSSとイメージを用意する

イメージの用意

11.6.2 オンラインブックストアの各画面を作成する

トップページを作成する

書籍の詳細ページを作成する

ショッピングカート用の画面を作成する

注文画面を作成する

注文完了画面を作成する

ユーザーの購入履歴を表示する画面を作成する

サインイン画面を作成する

11.7 「Java EE 7 オンラインブックストア」の開発⑥(ログイン/ログアウトの処理)

11.7.1 ユーザー登録機能を実装するぞ!

ユーザーアカウントを登録できるようにする

ユーザー登録用の画面を用意する

Memo ハッシュアルゴリズムによる暗号化の処理

11.7.2 「ログイン/ログアウト」の機能を実装すれば完成だね

ログイン/ログアウトの処理

ログイン画面を確認する

11.7.3 あとはサーバーの認証機能を設定すれば完了!

BlassFishのユーザー認証機能を設定する

セキュリティで保護されたフォルダーを設定

Memo 認証機能の設定

11.7.4 やっと完成したよ! さっそく動かしてみよう

「Java EE 7オンラインブックストア」を起動しよう

OnePoint 「Java EE 7オンラインブックストア」

PR

秀和システム