「プロになるためのWeb技術入門」 ――なぜ、あなたはWebシステムを開発できないのか
- 技術評論社 (2010年4月10日発売)
- Amazon.co.jp ・本 (288ページ)
- / ISBN・EAN: 9784774142357
作品紹介・あらすじ
Webアプリケーション開発の「基礎の基礎」をしっかり学べる入門書。通信技術とソフトウェア開発技術の両面から、Webシステムのしくみをひとつひとつ確実に解説。
感想・レビュー・書評
-
詳細をみるコメント0件をすべて表示
-
2010年刊行(2020年13刷)の、読み継がれてきたことがわかる本。まだ事例にInternet Explorer があった頃だけれども、三種のサーバ(Webサーバ, アプリケーションサーバ, DBサーバ)の役割分担、ネットワークの仕組み、設計のモダンスタイル、セキュリティ対策、など主要な理論が一冊にまとまっており、助かった。IT技術書は細目ごとに話が分かれているため、この本のようにWeb技術というまとまりでしっかり解説している本は、古典として定評のある本以外では相対的に少ない印象がある。
-
WebエンジニアとしてWebの基礎を抑えようと思い本書を選択。
HTTPやDNSについて理解が深まった。
またMVCアーキテクチャについても漠然と理解していたのが具体的にイメージできた。
私の作るものはMVCがごちゃごちゃしてしまっているので、改善しなくては。。。 -
web系の知識は皆無であったがwebの仕組みやアーキテクチャ、セキュリティ関連のあれこれと多くの事を学べた
ただ内容に対してサブタイトルが合ってなく気になった -
Webアプリケーションを構築するために必要な知識が、背景から記載されており、体系的に整理されている。
Webアプリケーションを構築するための全体像が、本書のおかげでようやく見えた。これをベースに各要素技術を学んでいきたい。
以下、備忘としてキーワードを雑多に残す
■HTTP
→クライアント、サーバ間の規約。
※メソッド、URL、ハイパーリンク、ステートレス
■Cookieとセッション
■三層構成(Webサーバ、APサーバ、DBサーバ)
・Apache
・httpd.conf
→URLパスとworker(Tomcatプロセス)を紐付け
・workers.properties
→workerを定義(worker名、ホスト、ポート、プロトコル)
■APサーバの機能(Tomcatが例)
・セッション管理(セッションID発行など)
・トランザクション管理
・DB接続(データソース、コネクションプール)
※APサーバ(JavaVM)は常駐プロセス
■MVCモデルとレイヤパターン
→これによって、可読性/変更容易性の確保、作業分担が可能。
■フレームワーク(Struts、iBATISが例)
・コントローラ、ビュー相当
・プレゼンテーション層
→ アクション、JSPなど。
→URLパスによって使用アクション振分
→アクション結果によって使用JSP振分
・モデル相当
・ビジネスロジック層
・データアクセス層
→Java Beans
→DAO
→ORマッパー(インピーダンス・ミスマッチの対策)
■セキュリティ
・機密性(暗号化など)
・完全性(電子署名による改竄の検知など)
・可用性(権限制御など)
■各セキュリティ対策
・クロスサイトスクリプティング
・クロスサイトリクエストフォージェリ
・セッションハイジャック
・SQLインジェクション
・ディレクトリトラバーサル
・強制ブラウズ
など
→対策として、hiddenパラメータにトークンを持たせるのがよくある手法。トークンにはハッシュ値を利用する。
→バリデーション、サニタイジングも抑えておく。 -
webアプリケーションについて概念がとてもわかり易くまとめられている
-
異動後、同僚の技術レベルにまったくついて行けず、苦しい日々を送っていましたが、本書により最初の1歩を踏み出せたと思います。副題の「なぜ、あなたはWebシステムを開発できないのか」が目を引いて手に取った一冊です。本書で紹介されていた参考文献を手掛かりに次の一歩を踏み出してみようと思います。
-
Webサイト:公開されたコンテンツを受動的に閲覧する
Webアプリ:能動的に利用する
■webの誕生
研究成果を共有したい→HTMLで研究成果を表現しよう:ハイパーテキストという仕組みで共有=www→WebブラウザMosaicが誕生し、文字と画像を混在させて表示可能に
■クライアント・サーバモデル
クライアント→リクエスト→サーバ
クライアント←レスポンス←サーバ
Q.なぜ役割を分けるか?
不特定多数の人に公開するには、コンテンツは一箇所にまとめたほうが管理は楽:サーバ
→コンテンツを保管しているWebサーバを利用者が直接操作するのは非現実的
→利用者の手元にあるPCをWebクライアントとして利用可能にし、遠隔地にあるWebサーバWebクライアントの間をインターネット接続する
→WWWが実現
→クライアントとサーバに役割を分けることは必然
多くの人に閲覧してもらうために、新しいコンテンツを常に提供したいという思いから、
静的なコンテンツ→動的なコンテンツへ
動的なコンテンツを生成して、Webクライアントに渡すには、Webサーバとコンテンツを生成するプログラムとの連携が必要
→CGI誕生:Webサーバとプログラムの間でリクエストとレスポンスをやりとりするための規約
Webブラウザからリクエストが届くたびに、CGIを通してプロセスを起動していたため、アクセスが増えると、画面がなかなか表示されない問題が発生
→Java誕生:CGIの問題点を補う、サーブレット機能により、Webアプリケーションの開発が可能に。また、オブジェクト指向の機能をフルサポートしているため、大規模システム開発しやすいという、メリットや、特定のOSやハードウェアに依存せずに動作する(JavaVM)というメリットがある。
サーブレット:Javaコードの中にHTMLを埋め込む
JSP:HTMLの中にJavaコードを埋めこむ
■HTTP
TCP/IP:ブラウザなどから受け取ったHTTPリクエストなどの情報を、パケットに分割して送信し、受け取った側で元のように組み立ててから、受け手となるWebサーバなどのアプリケーションに渡す
IPアドレス:世界中で一意の値になる必要があるため、ISPインターネットサービスプロバイダが、まとまった数のIPアドレスを確保し、ユーザに一時的に割り当てている
IPアドレスは、人間にとって理解しにくいため、ドメイン名に変換されている
→DNS:ドメインネームシステム、ドメイン名とIPアドレスの対応表を持ったコンピュータである、DNSサーバをインターネット上に配置しておき、DNSサーバに問い合わせれば、ドメイン名に対応するIPアドレスが返ってくる
TCP/IP上では、HTTP以外にも、SMTPや、POP3など、様々なプロトコルで情報がやり取りされている
→受信した情報がどのプロトコルのものであり、どのアプリケーションが処理すべきか把握する必要がある
→ポート番号:どのプロトコルのものかが分かるため、届いた情報をどのアプリケーションが処理すべきかが分かる
リクエスト処理
①GET:クエリ文字列を使用して、パラメータを渡すため、URLの中にパラメータが含まれる
②POST:メッセージボディを利用してパラメータを渡すため、URLにはパラメータは含まれないし、パラメータの長さに制限がなくなる
→副作用がない、同じ要求を何度繰り返しても同じ結果が得られることが期待されている場合は、GETリクエストを利用したほうが良い
日本語をGETパラメータで渡す方法
→パーセントエンコード:文字列を文字コードで表し、16進数で表された各値の先頭に%を付けている
■Cookie
・HTTPの仕様を拡張してWebアプリケーションとWebブラウザの間で情報を交換できるようにしたもの
・名前=値の組み合わせで表される
・WebサーバからCookieを受け取ったウェブブラウザは、次回同じWebサーバにアクセスする際に、受け取ったCookieをほのままHTTPリクエストヘッダに入れて送る
・Cookieを受け取ったサーバとは異なるWebサーバに対しては、Cookieは送らない
→Cookieにより、ウェブブラウザに状態を持たせることが可能になった
ただし、Cookieの値は、InetSpyのようなツールで簡単に覗けてしまう
→セッション
■セッション
目的を達成するために、webアプリケーションに対して何度かのHTTPリクエストを行う、一連の処理の流れをセッションと呼ぶ
Webサーバとwebクライアント間でのやり取りを、セッションIDのみで行い、Webサーバ側はクライアントから受け取ったCookieに格納されているセッションIDを元に、状態を復元する
→安全性が高い -
【書誌情報】
著者:小森祐介
版型:B5変形判/288ページ
定価:本体2,280円+税
発売日:2010年4月10日
ISBN: 978-4-7741-4235-7
なぜあなたはJavaでオブジェクト指向開発できないのか』の著者である小森祐介氏の新刊です。Webアプリケーションの開発方法を,インターネットの仕組みの根本原理から,じっくり解説します。Webアプリケーションとは何か?――という根本的な問いかけから始まり,基礎の基礎をかためつつ,本物の実力を養成することを目標に内容を構成しています。これにより一貫した流れでWebアプリケーション開発の真髄を学ぶことができます。図解をたくさん用意しましたので,これで直感的に楽しく理解も進むようになっています。
〈https://gihyo.jp/book/2010/978-4-7741-4235-7〉
【目次】
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 -
設計から実装担当に作業が
変わる予定だったので、おさらいのために買おうとしたら、自社の蔵書棚で
埃をかぶってる!!
(オイオイオイ!!っと怒りながら涎を垂らしてる不審者)
ひっそりと持ち帰り、正月
居間で寝そべり読みました。
webアプリケーションに必要な技術が生まれ、その穴を埋めるために別の技術が生まれて良い部分を組み合わせて今のスタンダード(ちょっと古くなってますが)が作られてきた経緯の説明がざっくりとはわかりました。
復習するにはちょうど良かったです。
技術面も古くなってる部分が、実は現場では現役だったりして、ドンピシャでした。