小森裕介氏の著書「プロになるためのWeb技術入門」がとても参考になったのでメモしておきます。
LESSON 0 プロローグ
- 市民権を得た「Webアプリケーション」
- 「Webアプリケーション」開発の難しさ
- 「Webアプリケーション」の開発技術はどこで学べる?
- なぜ、あなたはWebアプリケーション開発技術を学べないのか
- 本書の対象読者
- 本書を読む上での想定知識
- 最も効率よく「技術」を学ぶ方法
LESSON 1 「Web アプリケーション」とは何か
1.1 デスクトップアプリケーション
1.2 Webアプリケーション
1.3 まとめ
LESSON 2 Webはどのように発展したか
2.1 WWWの誕生と普及
- 世界中のコンピュータを結ぶインターネット
- インターネット普及の立役者 World-Wide WebとMosaic
- WWWの誕生
- 現代Webブラウザの祖先 NCSA Mosaic
2.2 Webを支える技術の発明
- WebサーバとWebクライアント
- なぜ、クライアントとサーバに分けるのか
- コラム 「クライアント」と「サーバ」偉いのはどっち?
- 「そのリソースはどこにある?」ーURL
- HTTP
- コラム インターネットに公開された技術使用 RFC
2.3 CGIの誕生
- 動的なコンテンツへの要求
- CGIの誕生
- Webの爆発的な普及
2.4 サーブレットの登場
- CGIにまつわる問題点
- Java/サーブレットの誕生
- Javaでアプリケーションを開発することの利点
- コラム 早すぎた技術 Javaアプレット
2.5 JSPの誕生
- サーブレットの問題点
- 発送の逆転 JSPの誕生
2.6 Webアプリケーションフレームワークの時代
- サーブレットやJSPの問題点
- Webアプリケーションフレームワークの誕生
2.7 まとめ
LESSON 3 HTTPを知る
3.1 HTTPの知識はなぜ必要か
- コラム ハードウェアさえも信じられない事態!?
3.2 WebブラウザとWebサーバの通信をのぞいてみよう
- 横取り丸とInetSpyのインストール
- HTTP通信をのぞいてみよう
- HTTPリクエストをのぞく
- コラム URLとURIは何が違うのか?
- HTTPレスポンスをのぞく
- HTTPでは1回で1つのリソースを取得
- ファイル名を省略した場合のリクエスト
3.3 情報はどうやってインターネットの大海原を越えるのか
- インターネット上の住所 IPアドレス
- IPアドレスを頼りに情報を届けるTCP/IP
- IPアドレスは誰が決めるのか
- グローバルIPアドレスとプライベートIPアドレス
- コラム IPアドレスと個人情報
- ホスト名をIPアドレスに変換するDNS
- DNSはどのようにして実現されるのか
- ホスト内の宛先を決定するポート番号
3.4 Webサーバへの要求をどのように伝えるのか
- GETメソッドによるパラメータ渡し
- アプリケーション側でのパラメータ受け取り
- POSTメソッドによるパラメータ渡し
- GETとPOSTどちらを使えばよい?
- 日本語はどのようにして渡せばよいか
3.5 まとめ
LESSON 4 CGIからWebアプリケーションへ
4.1 宅配ピザ注文サイトを作ろう
4.2 画面構成を考える
- コラム 実際のWebシステム開発の流れ
4.3 画面モックを作ろう
4.4 ログイン認証機能を作成する
- phpで認証機能を作ろう
- 認証機能の動作を確認しよう
- リダイレクト動作のHTTP通信を確認しよう
- コラム PHPはどのように実行されるのか ~CGIモジュールの違い~
4.5 ログイン状態をどのようにして記憶するのか
- ステートフルなプロトコルとステートレスなプロトコル
- ステートレスなHTTP上で状態をどのように表現するか
- Cookieを利用して状態を保持する
- Cookie利用の実際を確認する
4.6 安全に状態を保存するための技術 ーセッションー
- Cookieにまつわる問題点
- コラム Cookieはどこに保存されている?
- 銀行の窓口業務でセッションを理解しよう
- 講座開設業務の進行状況をどのように管理するか
- セッションで処理の進行状況を管理する
- セッションの状態をどこで保持するか
- HTTPにおけるセッションIDの受け渡し方法
- セッションID利用の実際を確認する
- セッションIDによるユーザーの識別
4.7 ピザ・ペントミノの完成
コラム Webサーバによる認証機能 ~Basic認証~
4.8 まとめ
LESSON 5 Webアプリケーションの構成要素
- なぜWebアプリケーションの構成を理解しなければならにのか
- コラム コンピュータは「節」?
5.1 WebサーバとWebクライアントの時代
- WWWの黎明期
- CGIの時代
- コラム ソフトウェア? プログラム? アプリケーション? サーバ?
5.2 データベースサーバの登場
- 大量の情報をどのようにして管理するか
- データベース管理システムの登場
- コラム DB? DBMS? RDBMS?
- データベースに対する操作
- データベースによる情報の管理
- コラム データベース設計はITシステムの要
- データベースから情報を抽出する
- 必要な情報をSQLでデータベースへ伝える
- コラム データベースに対するCRUD操作とSQL分の関係
- データベースとクライアントの関係
- データベースサーバの分離
- Webアプリケーションとデータベースの通信
- コラム 代表的なデータベース製品
5.3 アプリケーションサーバの登場
- ServletやJSPはどこで動いているのか
- Servlet/JSPを動かすためのアプリケーションサーバ
- Webサーバとアプリケーションサーバの連携
- Webサーバとアプリケーションサーバの分担
- Webサーバとアプリケーションサーバ連携のメリット
- 複数のTomcatへの転送
- Webサーバの機能を持ったアプリケーションサーバ
- コラム アプリケーションサーバの提供する機能
5.4 Webシステムの三層構成
- 最小構成のWebシステム
- 一般的な構成
- Webシステムの三層構成
- コラム 現代のWebシステムを支えるオープンソース
- コラム オープンソースのライセンス
5.5 まとめ
LESSON 6 Webアプリケーションを効率よく開発するための仕組み
6.1 サーブレット/JSPだけではいけないのか
- Webアプリケーション開発のスタンダード Java
- サーブレットとJSPの連携
6.2 サーブレット/JSPで「ピザ・ペントミノ」のログイン処理を実現する
- JSPによるログイン画面の表示
- サーブレット呼び出し
- ログインサーブレットの処理
- フォワードとリダイレクトの違い
- リクエストスコープにおける情報の受け渡し
- JSPにおけるリクエストスコープからの情報の取り出し
- なぜリクエストスコープが必要なのか
- セッションスコープとリクエストスコープのち外
- コラム さまざまなセッションの実現方法
6.3 Webアプリケーションのアーキテクチャ
- ロジックとデザインの分離
- ソフトウェアの建築様式
- コラム カスタムタグとJSTL
- 「ピザ・ペントミノ」の構造を俯瞰しよう
- MVCモデルによるWebアプリケーションのアーキテクチャ
- MVCモデルによる処理の流れ
6.4 フレームワークによるアーキテクチャの実現
- フレームワークとは何か
- StrutsによるMVCモデルの実現
- Strutsによる「ピザ・ペントミノ」のログイン処理
- JSPからログイン処理アクションの呼び出し
- コラム Javaを部品化するための仕組み Java Beans
- ログイン処理アクションでのログインチェック処理
- 商品一覧画面への繊維
6.5 レイヤパターンによるデータアクセス層の分離
- モデルをどのように実現するか
- JDBCによるデータベースからの情報の取得
- レイヤパターンによるデータアクセス層の分離
- DAOパターンによるデータアクセス層の実現
6.6 O/Rマッピングフレームワークによるデータアクセス層の実現
- O/Rマッピングフレームワークの必要性
- RDBとオブジェクトのインピーダンス・ミスマッチ
- iBATISによるO/Rマッピングの実現
- Data MapperとSQLマップファイルによるO/Rマッピング処理
- Dao Frameworkを利用したDAOの作成
6.7 フレームワーク利用におけるメリットとデメリット
- フレームワーク利用のメリット
- フレームワーク利用のデメリット
6.8 まとめ
LESSON 7 セキュリティを確保するための仕組み
7.1 なぜセキュリティを確保しなければならないのか
- Webアプリケーションが守るべきセキュリティ
7.2 代表的なアプリケーションの攻撃手法とその対策
- SQLインジェクション
- クロスサイトスクリプティング(XSS)
- セッションハイジャック
- コラム SSLによる通信ろの暗号化
- クロスサイロリクエストフォー下痢
- コラム セキュリティの影の立役者 ハッシュ関数
- 強制ブラウズ
- ディレクトリトラバーサル
- コラム より安全な認証方式 ~Digest認証~
7.3 設計・実装ミスに起因する誤動作やセキュリティ問題を防ぐための対策
- 「戻る」ボタン対策
- ダブルサブミット対策
- hiddenパラメータ利用時の注意点
- デバッグ情報を出力させない
- グローバル変数に情報を持たせない
7.4 まとめ
LESSON 8 おわりに
LESSON 9 付録
9.1 参考書籍・サイト
参考: