プロになるためのWeb技術入門

小森裕介氏の著書「プロになるための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 参考書籍・サイト

参考:

プロになるためのWeb技術入門 なぜ、あなたはWebシステムを開発できないのか