目次
Part1 サーバサイドJavaScript序論
1章 サーバサイドJavaScriptの動向
- 1.1 JavaScriptの歴史
- 1.1.1 JavaScriptの広がり
- 1.2 JavaScriptの規格と実装
- 1.2.1 ECMAScriptとJavaScript
- 1.2.2 JavaScriptのバージョン
- 1.2.3 JavaScript処理系
- コラム JavaScriptのスピード競争
- 1.2.4 JavaScriptライブラリ
- 1.2.5 CommonJS
- 1.2.6 Java6のスクリプティングAPI
- 1.3 サーバサイドJavaScriptの背景
- 1.3.1 Webアプリ開発現場の言語混在
- 1.3.2 バリデーションコードの重複
- 1.3.3 AJAXとRPC
- 1.3.4 負荷分散としてのクライアントサイドJavaScript
- 1.4 JavaScriptで見るインターネットの動向
- 1.4.1 JSON
- 1.4.2 HTML5
- 1.4.3 クラウドコンピューティング
- 1.4.4 ドキュメントデータベースとREST
- コラム require.js
Part2 共通API
2章 サーバサイドJavaScriptに共通APIが必要な背景
- 2.1 はじめに
- 2.2 クライアントサイドJavaScriptとサーバサイドJavaScript
- 2.1.1 JavaScript言語とその他のプログラミング言語
- 2.2.2 JavaScriptコマンドラインツール
- 2.3 ホストオブジェクト
- 2.3.1 拡張言語
- 2.3.2 ホスト環境
- 2.3.3 グローバルオブジェクトを参照する変数
- 2.4 標準APIの動き
- 2.4.1 拡張API
3章 標準オブジェクト
- 3.1 標準組み込みオブジェクト
- 3.1.1 オブジェクトの互換性
- 3.2 Objectクラス
- 3.2.1 プロトタイプチェーン
- 3.2.2 プロトタイプチェーンの具体例
- 3.3 グローバルオブジェクト
- 3.3.1 クライアントサイドJavaScriptにおけるグローバルオブジェクト
- 3.3.2 グローバルオブジェクトのプロパティ
- 3.4 Stringクラス
- 3.5 Arrayクラス
- 3.6 Functionクラス
- 3.7 Numberクラス
- 3.8 Booleanクラス
- 3.9 Mathオブジェクト
- 3.10 Dateクラス
- 3.11 RegExpクラス
- 3.12 JSONオブジェクト
- 3.12.1 JSONとは
- 3.12.2 JSONオブジェクト
- 3.13 エラークラス
- 3.14 E4X
- 3.14.1 XMLオブジェクト生成
- 3.14.2 XMLの読み書き
- 3.14.3 XMLノードの選択
- 3.14.4 XMLList
- 3.14.5 E4Xの演算
- 3.14.6 XMLの名前空間
- 3.14.7 E4XのAPI
- コラム サーバサイドでDOM
4章 CommonJS
- 4.1 CommonJSとは
- 4.2 モジュール
- 4.2.1 CommonJSのモジュール規格
- 4.2.2 公開側コード
- 4.2.3 利用側コード
- 4.3 ファイル操作
- 4.3.1 I/Oストリーム処理
- 4.3.2 バイト型
- 4.3.3 テキスト処理
- 4.3.4 同期/非同期
- 4.4 システムAPI
- 4.5 ネットワーク(ソケット)
- 4.5.1 ネットワークAPI
- 4.5.2 XMLHttpRequest
- 4.5.3 WebSocket
- 4.6 並列処理(マルチスレッド)
- 4.6.1 排他制御
- 4.6.2 Web Workers
- 4.7 RDB操作
- 4.8 パッケージ
- 4.9 JSGI
- 4.9.1 JSGIの概要
- 4.9.2 JSGIの具体例
- 4.10 CommonJS実装
- 4.10.1 Flusspferd
- 4.10.2 Narwhal
- 4.10.3 node.js
5章 JavaのスクリプティングAPI
- 5.1 はじめに
- 5.2 Java6付属のjrunscript
- 5.3 JVM上のJavaScriptコード
- 5.4 型変換
- 5.4.1 配列
- 5.4.2 コレクション
- 5.6 JavaからJavaScriptコードを呼ぶ
- 5.7 ホストオブジェクトの渡し方
- 5.7.1 ホストオブジェクト経由でJavaオブジェクトにアクセス
- 5.7.2 JavaからJavaScriptのコンテキストにアクセス
Part3 サーバサイドJavaScript実行環境
6章 アーキテクチャ概論
- 6.1 Webアプリのアーキテクチャ
- 6.1.1 技術要素
- 6.1.2 Webアプリ
- 6.2 セッション管理
- 6.2.1 クッキーによるセッション管理
- 6.3 AJAX
- 6.4 MVCアーキテクチャ
- 6.4.1 モデル
- 6.5 サーバサイドJavaScriptの分類
- 6.5.1 サーバサイドJavaScriptの概観
- 6.5.2 分類のための用語整理
- 6.5.3 HTTP処理での分類
- コラム 通信プロトコルの変換は必要?
- 6.5.4 JavaScript処理系での分類
- コラム node.jsブーム
- 6.5.5 APIでの分類
- コラム Aptana Jaxerについて
7章 非JVMアプリコンテナ
- 7.1 smjsのcgi
- 7.1.1 CGI
- 7.1.2 Apacheの設定例
- 7.1.3 具体例
- 7.1.4 まとめ
- 7.2 Jack
- 7.2.1 Jackとは
- 7.2.2 JSGI
- 7.2.3 NarwhalのAPI
- 7.2.4 JackのWebアプリ
- 7.2.5 Nitro
- 7.2.6 まとめ
- 7.3 v8cgi
- 7.3.1 v8cgiとは
- 7.3.2 v8cgiのAPI
- 7.3.3 v8cgiのWebアプリ
- コラム ビュー技術
- 7.3.4 まとめ
- 7.4 Juice
- 7.4.1 Juiceとは
- 7.4.2 JSGIとJuice
- 7.4.3 Juice実行の準備
- 7.4.4 JuiceのWebアプリ
- 7.4.5 まとめ
- 7.5 JSEXT
- 7.5.1 JSEXTとは
- 7.5.2 JSEXTのAPI
- 7.5.3 モジュール
- 7.5.4 JSEXTのWebアプリ
- 7.5.5 まとめ
8章 JVM系アプリコンテナ
- 8.1 Myna
- 8.1.1 Mynaとは
- 8.1.2 Myna実行の準備
- 8.1.3 MynaのAPI
- 8.1.4 MynaのWebアプリ
- コラム rawDataのエスケープ処理とXSS
- 8.1.5 まとめ
- 8.2 RingoJSとHelma
- 8.2.1 RingoJSとHelma
- 8.2.2 Helmaの簡単なWebアプリ
- 8.2.3 HelmaのMVC
- 8.2.4 HelmaのORM
- 8.2.5 RingoJS
- 8.2.6 RingoJSのAPI
- コラム パッケージシステムの乱立
- 8.2.7 RingoJSの簡単なWebアプリ
- 8.2.8 RingoJSのMVCアーキテクチャ
- 8.2.9 RingoJSのJSONデータベース
- 8.2.10 CRUD
- 8.2.11 まとめ
Part4 ドキュメントDB
9章 CouchDB
- 9.1 NoSQLとドキュメントDB
- 9.2 CouchDBとは
- 9.2.1 CouchDBの特徴
- 9.2.2 CouchDBのアーキテクチャ概論
- 9.2.3 起動と終了
- 9.3 データベース操作
- 9.3.1 データベースの作成
- 9.3.2 データベース情報の取得
- 9.3.3 データベースの削除
- 9.4 ドキュメント操作
- 9.4.1 ドキュメントの作成
- 9.4.2 ドキュメントの更新
- 9.4.3 更新と並行処理
- 9.4.4 更新の注意
- 9.4.5 ドキュメントの削除
- 9.4.6 名前付きドキュメントの作成
- 9.4.7 添付ファイル
- 9.4.8 ドキュメント一括操作
- 9.4.9 デザインドキュメント
- 9.5 CouchDBとMap/Reduce
- 9.5.1 ビュー
- 9.5.2 Map/Reduce一般論
- 9.5.3 CouchDBのMap/Reduce
- 9.5.4 ビューとMap/Reduce
- 9.5.5 組み込みのreduce関数
- 9.6 クエリ
- 9.6.1 ビューのクエリ
- 9.6.2 ビューの具体例
- 9.6.3 ビューの具体例(reduceを使う例)
- 9.7 ハンドラとCouchDBアプリ
- 9.7.1 CouchDBアプリのアーキテクチャ分類
- 9.7.2 CouchDBアプリの開発
- 9.7.3 showハンドラ
- 9.7.4 listハンドラ
- 9.7.5 updateハンドラ
- 9.7.6 テンプレート言語
- 9.7.7 CouchDBの周辺ツール
- 9.8 スキーマフリー(スキーマレス)のデータ設計(データモデル)
- 9.8.1 1対多の関連
- 9.8.2 多対多の関連
- 9.9 まとめ
10章 MongoDB
- 10.1 MongoDBとは
- 10.1.1 MongoDBの特徴
- 10.1.2 MongoDBのアーキテクチャ
- 10.1.3 起動と終了
- 10.2 データベース操作
- 10.3 コレクション操作
- 10.4 ドキュメント操作
- 10.4.1 ドキュメント作成と更新
- 10.4.2 ドキュメント取得と更新
- 10.4.3 ドキュメント削除
- 10.4.4 フィールドの更新処理
- 10.5 クエリ
- 10.5.1 クエリ条件
- 10.5.2 埋め込み配列
- 10.5.3 埋め込みオブジェクト
- 10.5.4 インデックス
- 10.5.5 サーバサイドJavaScript
- 10.5.6 集計処理
- 10.6 MongoDBのMap/Reduce
- 10.6.1 Map/Reduceの具体例
- 10.7 スキーマフリー(スキーマレス)のデータ設計(データモデル)
- 10.8 まとめ
Part5 クラウドの拡張言語
11章 Google Apps Scriptによるクラウドコンピューティング
- 11.1 サーバサイドの拡張言語
- 11.2 Google Apps Scriptとは
- 11.2.1 開発環境
- 11.2.2 簡単なスクリプト
- 11.2.3 ボタンイベント
- 11.2.4 デバッグ
- 11.2.5 スクリプトギャラリー
- コラム Google Apps Scriptのファイル(モジュール)分割
- 11.2.6 Spreadsheetプログラミング
- コラム Webアンケートアプリ
- 11.2.7 応用
- 11.2.8 GoogleサイトのGoogle Apps Script
- 11.3 まとめ
Part6 Webアプリ実践
12章 アーキテクチャ
- 12.1 アーキテクチャ概要
- 12.1.1 コンポーネント選択について
- 12.2 Google App Engine for Java(GAE/J)
- 12.2.1 GAE/Jの開発概要
- 12.2.2 GAE/Jの開発手順
- 12.2.3 データストア
- 12.2.4 JDOプログラミング
- 12.2.5 エンティティクラス
- 12.2.6 PersistenceManagerクラス
- 12.2.7 CRUD
- 12.2.8 クエリ
- 12.2.9 関連
- 12.2.10 トランザクション処理
- 12.3 JAX.RSとJersey
- 12.3.1 Jerseyの概要
- 12.3.2 Jerseyアプリの開発手順
- 12.3.3 リソースクラス
- 12.3.4 データバインディング
- 12.3.5 フォワードとリダイレクト
- 12.4 Rhino
- 12.4.1 Rhino API
- 12.4.2 ホストオブジェクト
- 12.4.3 JVM上のJavaScriptコード
- 12.4.4 その他のRhino API
- 12.4.5 GAE/JとRhino
- コラム PermGenに注意
13章 設計と実装
- 13.1 作成アプリの機能概要
- 13.2 設計の考え方
- 13.2.1 最初の設計
- 13.3 コードの解説
- 13.3.1 コード一覧
- 13.3.2 エンティティクラス
- 13.3.3 Jerseyリソースクラス
- 13.3.4 DI
- 13.3.5 イベントとサーバサイドJavaScript実行
- 13.3.6 ビュー処理とユーザインターフェース
- 13.3.7 サーバサイドJavaScriptのコード例
- 13.4 設計の評価
- 13.4.1 依存性
- 13.4.2 役割と分割
- 13.4.3 改善案
- 13.5 まとめ