2010-06-15

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

小森裕介 (ウルシステムズ)
技術評論社

なぜ、あなたはWebシステムを開発できないのか

皆さんの身の回りに、当たり前のように普及しているWorld Wide Web。本書は、Webアプリケーション開発の「基礎の基礎」を「プロを目指す」皆さんがしっかり習得できるように作りました。通信技術とソフトウェア開発技術の両面から、Webシステムの仕組みをひとつひとつ確実に解説しました。必要な場合は難解な技術も、さらに一歩踏み込んでやさしく説明することを試みました。これにより、理解できないままになりがちな技術や知識が皆さんの頭の中で結びつき、総合的にWebアプリケーションのしくみがわかるようになります。「10年以上使える確かな実力」を本書で身に付け、皆さんのアイデアをWebアプリケーション開発で実現させてください!

Webアプリ関連の仕事ではないが、タイトルに惹かれてちょっと読んでみました。Webアプリケーションの仕組みを知るための入門書。6章までは技術入門といっても技術の歴史や概要についてがほとんど。6章以降でWebアプリ開発関連の技術が出てくる。

【amazonで購入】
【楽天ブックスで購入】
【DMM.comで購入】

目次
  1. はじめに
  2. プロローグ
      • 市民権を得た「Webアプリケーション」
      • 「Webアプリケーション」開発の難しさ
      • 「Webアプリケーション」の開発技術はどこで学べる?
      • なぜ、あなたはWebアプリケーション開発技術を学べないのか
      • 本書の対象読者
      • 本書を読む上での想定知識
      • 最も効率良く「技術」を学ぶ方法
  3. 「Webアプリケーション」とは何か
    1. デスクトップアプリケーション
    2. Webアプリケーション
    3. まとめ
  4. Webはどのように発展したか
    1. WWWの誕生と普及
      • 世界中のコンピュータを結ぶインターネット
      • インターネット普及の立役者・World-Wide WebとMosaic
      • WWWの誕生
      • 現代Webブラウザの祖先・NCSA Mosaic
    2. Webを支える技術の発明
      • WebサーヴァとWebクライアント
      • なぜ、クライアントとサーバに分けるのか
      • コラム「クライアント」と「サーバ」偉いのはどっち?
      • 「そのリソースはどこにある」- URL
      • HTTP
      • コラム インターネットに公開された技術仕様 - RFC
    3. CGIの誕生
      • 動的なコンテンツへの要求
      • CGIの誕生

      • Webの爆発的な普及

    4. サーブレットの登場
      • CGIにまつわる問題点
      • Java/サーブレットの誕生
      • Javaでアプリケーションを開発することの利点
      • コラム 早すぎた技術、Javaアプレット
    5. JSPの誕生
      • サーブレットの問題点
      • 発想の逆転!JSPの誕生
    6. Webアプリケーションフレームワークの時代
      • サーブレットやJSPの問題点
      • Webアプリケーションフレームワークの誕生
    7. まとめ
  5. HTTPを知る
    1. HTTPの知識はなぜ必要か
      • コラム ハードウェアさえも信じられない事態!?
    2. WebブラウザとWebサーバの通信をのぞいてみよう
      • 横取り丸とInetSpyのインストール
      • HTTP通信をのぞいてみよう
      • HTTPリクエストを除く
      • コラム URLとURIは何が違うのか?
      • HTTPレスポンスをのぞく
      • HTTPでは1回で1つのリソースを取得
      • ファイル名を省略した場合のリクエスト
    3. 情報はどうやってインターネットの大海原を越えるのか
      • インターネット上の住所・IPアドレス
      • IPアドレスを頼りに情報を届けるTCP/IP
      • IPアドレスは誰が決めるのか
      • グローバルIPアドレスとプライベートIPアドレス
      • コラム IPアドレスと個人情報
      • ホスト名をIPアドレスに変換するDNS
      • DNSはどのようにして実現されるのか
      • ホスト内の宛先を決定するポート番号
    4. Webサーバへの要求をどのように伝えるか
      • GETメソッドによるパラメータ渡し
      • アプリケーション側でのパラメータの受け取り
      • POSTメソッドによるパラメータ渡し
      • GETとPOSTどちらを使えばよい?
      • 日本語はどのようにして渡せばよいか
    5. まとめ
  6. CGIからWebアプリケーションへ
    1. 宅配ピザ注文サイトを作ろう
    2. 画面構成を考える
      • コラム 実際のWebシステム開発の流れ
    3. 画面モックを作ろう
    4. ログイン認証機能を作成する
      • PHPで認証機能を作ろう
      • 認証機能の動作を確認しよう
      • リダイレクト動作のHTTP通信を確認しよう
      • コラム PHPはどのように実行されるのか~CGIとモジュールの違い~
    5. ログイン状態をどのようにして記憶するのか
      • ステートフルなプロトコルとステートレスなプロトコル
      • ステートレスなHTTP上で状態をどのように表現するか
      • Cookieを利用して状態を保存する
      • Cookie利用の実際を確認する
    6. 安全に状態を保存するための技術 -セッション-
      • Cookieにまつわる問題点
      • コラム Cookieはどこに保存されている?
      • 銀行の窓口業務でセッションを理解しよう
      • 口座開設業務の進行状況をどのように管理するか
      • セッションで処理の進行状況を管理する
      • セッションの状態をどこで保持するか
      • HTTPにおけるセッションIDの受け渡し方法
      • セッションID利用の実際を確認する
      • セッションIDによるユーザの識別
    7. ピザ・ペントミノの完成
      • コラム Webサーバによる認証機能~Basic認証~
    8. まとめ
  7. Webアプリケーションの構成要素
      • なぜWebアプリケーションの構成を理解しなければならないのか
      • コラム コンピュータとは「節」?
    1. WebサーバとWebクライアントの時代
      • WWWの黎明期
      • CGIの時代
      • コラム ソフトウェア?プログラム?アプリケーション?サーバ?
    2. データベースサーバの登場
      • 大量の情報をどのようにして管理するのか
      • データベース管理システムの登場
      • コラム DB?DBMS?RDBMS?
      • データベースに対する操作
      • データベースによる情報の管理
      • コラム データベース設計はITシステムの要
      • データベースから情報を抽出する
      • 必要な情報をSQLでデータベースへ伝える
      • コラム データベースに対するCRUD操作とSQL文の関係
      • データベースとクライアントの関係
      • データベースサーバの分離
      • Webアプリケーションとデータベースの通信
      • コラム 代表的なデータベース製品
    3. アプリケーションサーバの登場
      • ServletやJSPはどこで動いているのか
      • Servlet/JSPを動かすためのアプリケーションサーバ
      • Webサーバとアプリケーションサーバの連携
      • Webサーバとアプリケーションサーバの分担
      • Webサーバとアプリケーションサーバ連携のメリット
      • 複数のTomcatへの転送
      • Webサーバの機能を持ったアプリケーションサーバ
      • コラム アプリケーションサーバの提供する機能
    4. Webシステムの三層構成
      • 最小構成のWebシステム
      • 一般的な構成
      • Webシステムの三層構成
      • コラム 現代のWebシステムを支えるオープンソース
    5. まとめ
  8. Webアプリケーションを効率よく開発するための仕組み
    1. サーブレット/JSPだけではいけないのか
      • Webアプリケーション開発のスタンダード・Java
      • サーブレットとJSPの連携
    2. サーブレット/JSPで「ピザ・ペントミノ」のログイン処理を実現する
      • JSPによるログイン画面の表示
      • サーブレットの呼び出し
      • ログインサーブレットの処理
      • フォワードとリダイレクトの違い
      • リクエストスコープにおける情報の受け渡し
      • JSPにおけるリクエストスコープからの情報の取り出し
      • なぜリクエストスコープが必要なのか
      • セッションスコープとリクエストスコープの違い
      • コラム さまざまなセッションの実現方法
    3. Webアプリケーションのアーキテクチャ
      • ロジックとデザインの分離
      • ソフトウェアの建築様式
      • コラム カスタムタグとJSTL
      • 「ピザ・ペントミノ」の構造を俯瞰しよう
      • MVCモデルによるWebアプリケーションのアーキテクチャ
      • MVCモデルによる処理の流れ
    4. フレームワークによるアーキテクチャの実現
      • フレームワークとは何か
      • StrutsによるMVCモデルの実現
      • Strutsによる「ピザ・ペントミノ」のログイン処理
      • JSPからのログイン処理アクションの呼び出し
      • コラム Javaを部品化するための仕組み -Java Beans-
      • ログイン処理アクションでログインチェック処理
      • 商品一覧画面への遷移
    5. レイヤパターンによるデータアクセス層の分離
      • モデルをどのように実現するか
      • JDBCによるデータベースからの情報の取得
      • レイヤパターンによるデータアクセス層の分離
      • DAOパターンによるデータアクセス層の実現
    6. O/Rマッピングフレームワークによるデータアクセス層の実現
      • O/Rマッピングフレームワークの必要性
      • RDBとオブジェクトのインピーダンス・ミスマッチ
      • iBATISによるO/Rマッピングの実際
      • Data MapperとSQLマップファイルによるO/Rマッピング処理
      • Dao Frameworkを利用したDAOの作成
    7. フレームワーク利用におけるメリットとデメリット
      • フレームワーク利用のメリット
      • フレームワーク利用のデメリット
    8. まとめ
  9. セキュリティを確保するための仕組み
    1. なぜセキュリティを確保しなければならないのか
      • Webアプリケーションが守るべきセキュリティ
    2. 代表的なWebアプリケーションの攻撃手法とその対策
      • SQLインジェクション
      • クロスサイトスクリプティング(XSS)
      • セッションハイジャック
      • コラム SSLによる通信路の暗号化
      • クロスサイトリクエストフォージェリ
      • コラム セキュリティの陰の立役者・ハッシュ関数
      • 強制ブラウズ
      • ディレクトリトラバーサル
      • コラム より安全な認証方式~Digest認証~
    3. 設計・実装ミスに起因する誤動作やセキュリティ問題を防ぐための対策
      • 「戻る」ボタン対策
      • ダブルサブミット対策
      • hiddenタグに重要な情報をもたせない
      • デバッグ情報を出力させない
      • グローバル変数に情報を持たせない
    4. まとめ
  10. おわりに
    1. 謝辞
  11. 付録
    1. 参考書籍・サイト
  12. 索引
MVC (Model View Control)
モデル
ロジック
ビュー
デザイン
コントロール
アダプタ
レイヤ 自分自身と直下層にのみ関心を持つ
プレゼンテーション層
ユーザーインターフェース
ビジネス層
ロジック
データアクセス層
永続化
ワンタイムトークン
読み込み時にランダム値を発行しておき、この値を保存しておく。送信時に利用されたらそのランダム値を使用済みとする。こうすることで、様々な災を避けることができる。問題は定期的に保存したワンタイムトークンを削除しなければならず、どのタイミングで削除するかだ。発行日時とワンタイムトークンを一緒に保存してデータ読み込み時に一定期間が経過したワンタイムトークンはハッシュから削除するようにする。
onsubmit
formタグのonsubmitイベントはfalseが返ると送信されない? これを利用してグローバル変数のフラグを送信時に倒せば良い。が、これは掲示板などでは連続投稿ができない。質問者は良いが、回答者は連続で回答することが多いがこれでは困る。
ヘッダー情報を操作してキャッシュをno-cacheなどにする ヘッダー情報でLocationを利用するとリダイレクトが利用できる

0 件のコメント:

コメントを投稿