はじめに
プロになるためのWeb技術入門を読みました。
こちらは個人的な読書メモです。
2章 Webはどのように発展したのか
■ RFC
インターネット上で利用される仕様や規約
■CGI
動的コンテンツを作成してWebクライアントに返す仕組み
■サーブレット
Web開発をサポートするための機能で、Javaのオブジェクト指向により大規模開発に適している。
また、Webコンテナ内で実行するため新たなプロセスを起動する必要がない。
→CGIの問題点を補っている
■JavaVM
仮想的なコンピュータの言語。Javaは直接機械語に翻訳されるのではなくJavaVMにコンパイルされる。
そのため、異なるプラットフォームでの開発がしやすくなる。
■Javaアプレット
JavaプログラムをWebブラウザの画面上で実行できる技術。
サーブレットの問題点
- プログラム担当者とデザイン担当者が同じファイル編集するので修正しにくい
■JSP
JSP内部のプログラムを<%= %>
(スクリプトレット)で囲うことでプログラムの部分を明示する。
サーブレットはJavaコードの中にHTMLを埋め込むのに対して、JSPはHTMLの中にJavaコードを埋め込む。
3章 HTTPを知る
3.4 Webサーバへの要求をどのように伝えるか
・GETメソッドによる値渡し
通常のURLに?
からはじまるクエリ文字列つけることでサーバー側にパラメータを渡す。
サーバー側では?
が存在すれば、そこに含まれるパラメータをアプリケーションに渡す。
・POSTメソッドによる値渡し
メッセージボディでパラメータを渡すため、第3者に見られる心配が少ない。
→検索結果などパラメータを保持したほうが良いものはGET、それ以外はPOSTを使う
4章 CGIからWebアプリケーションへ
■リダイレクト
最初に要求したURLと異なるURLに誘導すること。
ブラウザはステータスコード302 Found
を受け取ると、LocationヘッダのURLに再度リクエストを発行する。
ログイン画面の例ではログイン成功時には成功画面、失敗時には失敗画面をLocationヘッダに書き込む。
4.5 ログイン状態をどのようにして記憶するのか
HTTPはステートレスなプロトコル(状態を保持しない)
→Cookieを利用する
4.6 安全に状態を保存するための技術
・Cookieの問題点
簡単に盗聴することができる
→セッションの利用
セッションIDをCookieでやり取りすることで安全にセッションごとの状態を保持できる。
5章 Webアプリケーションの構成要素
サーブレットやJSPはコンピュータが直接実行するのではなく、JavaVM上のアプリケーションサーバーが動かしている。CGIは使い捨てなのに対して、アプリケーションサーバーは常に起動している点が異なる。
・Webサーバーとアプリケーションサーバーの連携
WebサーバーにTomcat、アプリケーションサーバーにApacheを利用する場合mode_jkという連携モジュールを使う。
Webサーバーとアプリケーションサーバーを連携させる場合、静的コンテンツはWebサーバーに動的コンテンツはアプリケーションサーバーに配置する。
最低限の構成である
・Webサーバー
・データベースサーバー
・アプリケーションサーバー
は三層構成と呼ばれる
6章 Webアプリケーションを効率的に開発する仕組み
サーブレットとJSPを連携させる際はHTMLの表示をJSPに任せて、アプリケーションはサーブレットに担当させる。
■フォワード
サーブレットからJSPへの遷移。
リダイレクトは2回のHTTPリクエストが発生するのに対して、フォワードはアプリケーションサーバー内で完結するため1回のHTTPリクエストで済む。
■リクエストスコープ
フォワード元とフォワード先で情報を共有する仕組み。
サーブレット、JSPともに読み書き可能。(リクエストパラメータはそれぞれの読み込みのみ可能)
リクエストスコープはレスポンスが返ると削除される
■セッションタイムアウト
一定時間を過ぎたセッション情報がアプリケーションサーバーから削除されること。
・なぜ、リクエストスコープが必要か
セッションですべての情報を保持するとメモリを多く消費するため。
■アーキテクチャ
設計スタイルと設計に基づく全体構造。
■IPO
入力、出力、処理のサーバーサイドの基本的な処理
■MVCモデル
アプリケーションをModel,View,Controllerの3つの役割に分けるモデル。
ロジックの部分をModelが、デザインの部分をViewが担当し、Controllerが2つを繋ぐ役割をする。
7章 セキュリティを確保するための仕組み
■サニタイジング
特殊文字を文字参照に置き換える(XSS対策)
■ワンタイムトークン
フォームを送信する際に生成してアクセス時に自サーバーのものか確認、hiddenタグで送信する(CSRF対策)