プロになるためのシリーズ『プロになるためのWeb技術入門』
――なぜ,あなたはWebシステムを開発できないのか

[表紙]『プロになるためのWeb技術入門』――なぜ,あなたはWebシステムを開発できないのか

紙版発売
電子版発売

B5変形判/288ページ

定価2,508円(本体2,280円+税10%)

ISBN 978-4-7741-4235-7

電子版

→学校・法人一括購入ご検討の皆様へ

書籍の概要

この本の概要

『なぜあなたはJavaでオブジェクト指向開発できないのか』の著者である小森祐介氏の新刊です。Webアプリケーションの開発方法を,インターネットの仕組みの根本原理から,じっくり解説します。Webアプリケーションとは何か?――という根本的な問いかけから始まり,基礎の基礎をかためつつ,本物の実力を養成することを目標に内容を構成しています。これにより一貫した流れでWebアプリケーション開発の真髄を学ぶことができます。図解をたくさん用意しましたので,これで直感的に楽しく理解も進むようになっています。

こんな方におすすめ

  • Webアプリケーションの基礎の基礎を学びたい方
  • Webのしくみを根本的に知りたい方

この書籍に関連する記事があります!

ロングセラーで売れ続ける理由
『プロになるためのWeb技術入門――なぜあなたはWebシステムを開発できないのか』は,発売開始以来,AmazonでのIT書籍ランキングで570日以上100位以内にランキングされ,2011年のBest Book of 2011コンピュータ書籍で総合13位を達成しました。

本書のサンプル

本書の一部ページを,PDFで確認することができます。

目次

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 代表的なWebアプリケーションの攻撃手法とその対策

  • SQLインジェクション
  • クロスサイトスクリプティング(XSS)
  • セッションハイジャック
  • コラム SSLによる通信路の暗号化
  • クロスサイトリクエストフォージェリ
  • コラム セキュリティの陰の立役者・ハッシュ関数
  • 強制ブラウズ
  • ディレクトリトラバーサル
  • コラム より安全な認証方式?Digest認証?

7.3 設計・実装ミスに起因する誤動作やセキュリティ問題を防ぐための対策

  • 「戻る」ボタン対策
  • ダブルサブミット対策
  • hiddenタグに重要な情報を持たせない
  • デバッグ情報を出力させない
  • グローバル変数に情報を持たせない

7.4 まとめ

  • 謝辞

LESSON 8 おわりに

LESSON 9 付録

9.1  参考書籍・サイト

  • Lesson 0
  • Lesson 2
  • Lesson 3
  • Lesson 4
  • Lesson 5
  • Lesson 6
  • Lesson 7

著者プロフィール

小森裕介(こもりゆうすけ)

ウルシステムズ株式会社 シニアコンサルタント

2000年,東京工業大学工学部情報工学科卒業。進学か就職かで悩むが「研究よりも実際に役に立つソフトウェアを創りたい」という思いから,就職を決意。独立系システム開発会社でのSE・技術コンサルタント経験を経て,現職にて技術支援やPM支援,ビジネス企画支援などを幅広くこなすが,「世界中の人々に使ってもらえるプロダクトを開発する」という夢への道のりはまだ遠い。

2005年からオープンソースソフトウェア開発活動に興味を持ち,Seasarプロジェクト にてコミッタやカンファレンス講演者として活動中。同プロジェクト配下でリッチクライアントフレームワーク,Uruma を立ち上げ開発を進めるが,時間が取れず思うように開発が進まないのが目下の悩み。

最近の趣味は,スポーツでは体力の続かないバドミントンと下手くそなゴルフ。マイ・ブームは高速道路を使わない長距離ドライブ。まとまった休みには,行き当たりばったりで日本の原風景を楽しみながら,ときには2,000km以上も走る。ソーラーカーレースへの参戦をやめてしまったのを惜しみつつも,第2の故郷・大潟村にもふらりと足を伸ばす。