書籍概要

Software Design plus

Webサーバを作りながら学ぶ 基礎からのWebアプリケーション開発入門

著者
発売日
更新日

概要

Webアプリ開発には幅広い知識と,多様な技術を使いこなせることが求められます。HTTP・Webサーバ・サーブレット・JSP・Cookie・セッション・プロキシサーバ・TLS・認証・JavaScriptでのDOM操作・Ajax。これらを正しく説明できますか?使いこなせますか? 人に聞いただけでは忘れるかもしれません。読んで理解しただけでは使えないかもしれません。しかし,自分で試して納得した技術は使えるようになります。本書では,Webサーバを作りつつ,実際に動かして結果を見ながら,先に挙げた技術要素を1つ1つ解説します。

こんな方におすすめ

  • Webアプリケーションを開発しているエンジニア/これから開発するエンジニア

サンプル

samplesamplesample

目次

序章 はじめに

  • I.1 なぜWebサーバを作るのか
  • I.2 「Webアプリケーション」という不幸
  • I.3 対象読者
  • I.4 本書の構成
  • I.5 本書のサポートページについて

第1章 Webサーバを作る

  • 1.1 Webサーバとはそもそも何か
  • 1.2 URL―スキーム,ホスト,ドメイン,ポート
  • 1.3 TCPサーバ/クライアントを作る
    • 1.3.1 TCPとソケット
    • 1.3.2 TCPサーバ/クライアントのプログラム
    • [補足] C,C#の場合
    • 1.3.3 TCPサーバをWebブラウザで叩く
    • 1.3.4 TCPクライアントでWebサーバを叩く
    • [補足] Apache入れるの面倒なんですけど
  • 1.4 HTTP―Hypertext Transfer Protocolについて
    • 1.4.1 HTTPとはそもそも何か
    • [補足] HTTP/2
    • 1.4.2 HTTPステータスコード
    • 1.4.3 RFCとは何か
    • 1.4.4 画像を表示する―Content-Type
    • 1.4.5 Apacheのアクセスログを見る
    • [補足] なぜIEのユーザエージェントが「Mozilla」なのか?
  • 1.5 Webサーバを作る
    • 1.5.1 Webサーバは何を返せばよいのか
    • 1.5.2 レスポンスヘッダを取捨選択する
    • 1.5.3 1つのHTMLファイルを返す
    • [補足] ディレクトリトラバーサル脆弱性
    • 1.5.4 普通にWebページを表示できるようにする
    • [補足] 1つのサーバ側のポート番号で,複数の通信を行う

第2章 Webサーバを完成させる

  • 2.1 この章で扱うこと
  • 2.2 「404 Not Found」を返す
  • 2.3 ディレクトリトラバーサル脆弱性に対応する
  • 2.4 ディレクトリを指定した場合―リダイレクト
    • [補足] URLの末尾のスラッシュはいるの? いらないの?
  • 2.5 URLエンコードに対応する
    • [補足] クエリストリング部分の文字コード
    • [補足] JavaのURLDecoder.decode()がたいへんにタコである話
  • 2.6 Modoki/0.2のソースコード

第3章 へなちょこサーブレットコンテナ「Henacat」を作る

  • 3.1 Webアプリケーションとはそもそも何か
    • 3.1.1 Webアプリケーションの基本的な動き
    • [補足] 静的コンテンツ/動的コンテンツ
    • 3.1.2 GETのパラメタ―クエリストリング
    • 3.1.3 POSTメソッド
  • 3.2 POSTを受け付ける
    • 3.2.1 HTMLの<form>要素
    • 3.2.2 POSTで何が送られてくるのか
    • [補足] 1ページに複数のボタンを配置したい
    • 3.2.3 multipart/form-data
    • [補足] ファイルのパスをサーバに送って良いのか
    • [補足] フォームの内容の復元について
  • 3.3 サーブレットとは何か
    • 3.3.1 サーブレットとは
    • [補足] サーブレットのインスタンスは1つだけ生成される
    • 3.3.2 Tomcatをインストールする
    • 3.3.3 Tomcatで掲示板を作る
    • [補足] POSTのあと,リロードすると
    • 3.3.4 JSPとは何か
  • 3.4 Henacat ver.0.1を作る
    • 3.4.1 Henacat ver.0.1で実装するサーブレットAPI
    • 3.4.2 Henacat ver.0.1の実装
    • [補足] 302 Foundによるリダイレクト
    • [補足] Tomcat 5以降でsetCharacterEncoding()の仕様が変わった話
    • 3.4.3 Henacat ver.0.1で掲示板を動かす

第4章 Cookieに対応する

  • 4.1 Cookieとは
    • [補足] Cookieの容量制限
  • 4.2 クライアント側で発行するCookie
  • 4.3 Cookieの仕様
  • 4.4 TomcatでCookieを発行する
  • 4.5 Henacatに追加するメソッド
  • 4.6 Henacatにおける実装
    • 4.6.1 Cookieクラス
    • 4.6.2 Cookieの受信
    • 4.6.3 Cookieの送信
    • 4.6.4 ServletServiceクラス
    • 4.6.5 SendResponseクラス
  • 4.7 Henacat ver.0.2でCookieを発行する
    • [補足] Cookieの日付形式について

第5章 セッションに対応する

  • 5.1 セッションとは
    • [補足] Webサーバがたくさんある場合
    • [補足] セッションをCookie以外で実現する方法
  • 5.2 Tomcatでセッションを使ってみる
  • 5.3 Henacatに追加するメソッド
  • 5.4 Henacatにおける実装
    • 5.4.1 HttpSessionImplクラス
    • 5.4.2 SessionManagerクラス
    • 5.4.3 SessionIdGeneratorクラス
    • 5.4.4 HttpServletRequestImplクラス
    • 5.4.5 Henacatでセッションを使ってみる

第6章 Webアプリ開発に必要なその他の知識

  • 6.1 この章で扱うこと
  • 6.2 OSI 参照モデル
    • 6.2.1 OSI参照モデルとは
    • 6.2.2 インターネット・プロトコル・スイート
    • [補足] DNS
  • 6.3 プロキシサーバ
    • 6.3.1 プロキシサーバとは
    • [補足] IPアドレス枯渇問題
    • 6.3.2 プロキシサーバの動きを確認する
    • 6.3.3 リバースプロキシ
    • [補足] X-Forwarded-For
  • 6.4 SSL(TLS)
    • 6.4.1 SSL(TLS)とは
    • 6.4.2 公開鍵暗号
    • 6.4.3 サーバ証明書
    • [補足] オレオレ証明書
    • [補足] プロキシサーバのログにはSSLによる通信の内容が残るのか
  • 6.5 認証
    • 6.5.1 Basic認証
    • 6.5.2 Digest認証
    • 6.5.3 パスワードとハッシュ
    • 6.5.4 フォーム認証
  • 6.6 クライアントサイドの技術
    • 6.6.1 JavaScriptによるDOMの操作
    • 6.6.2 DOMを見てみる
    • [補足] ノードとエレメント
    • [補足] JavaScriptの実行タイミングについて
    • 6.6.3 DOMを操作する
    • 6.6.4 Ajax
  • 6.7 セキュリティ
    • 6.7.1 同一オリジンポリシー
    • [補足] JSONP
    • 6.7.2 クロスサイトスクリプティング
    • [補足] 反射型,格納型,DOM Based
    • 6.7.3 SQLインジェクション
    • 6.7.4 HTMLやSQLのエスケープは「使用する直前」に行う
    • 6.7.5 Webビーコン

第7章 TIPS

  • 7.1 この章で扱うこと
  • 7.2 ファイルをアップロードする
  • 7.3 画像を動的に生成する
  • 7.4 ファイルをダウンロードさせる(サーバ側)
  • 7.5 ファイルをダウンロードする(クライアント側)
    • [補足] 分割ダウンロード
  • 7.6 Web APIを呼び出す

付録 Henacatの全ソースコード

  • A.1 Henacat ver.0.4全ソースコード
    • A.1.1 コンパイルと実行
    • A.1.2 com.kmaebashi.henacat.webserverパッケージ
    • A.1.3 com.kmaebashi.henacat.servletパッケージ
    • A.1.4 com.kmaebashi.henacat.servlet.httpパッケージ
    • A.1.5 com.kmaebashi.henacat.servletimplパッケージ
    • A.1.6 com.kmaebashi.henacat.utilパッケージ

サポート

補足情報

本書内にて,作成しているサーブレットコンテナ「Henacat」のソースコードは,以下の著者のWebサイトからダウンロードできます。

また,正誤表も上記サイトで公開していく予定です。

商品一覧