Java: ソフトウェア革 命 - Core...

35
© 2003 Marty Hall, http://www.coreservlets.com Java: ソフトウェア革 ソフトウェア革 ソフトウェア革 ソフトウェア革 ? Marty Hall http://www.coreservlets.com CasaReal, Inc. http://www.casareal.co.jp www.coreservlets.com アジェンダ アジェンダ アジェンダ アジェンダ Java の迷信と実像 の迷信と実像 の迷信と実像 の迷信と実像 Java Web が使用可能? Java は安全? Java はクロス・プラットフォーム? Java は簡単? Java は強力? 共通 共通 共通 共通 Java プロトコル プロトコル プロトコル プロトコル & パッケージ パッケージ パッケージ パッケージ Java の未来 の未来 の未来 の未来 Java Java Java Java の実用例 の実用例 の実用例 の実用例 サンプル サンプル サンプル サンプル Java プログラム プログラム プログラム プログラム Q A

Transcript of Java: ソフトウェア革 命 - Core...

Page 1: Java: ソフトウェア革 命 - Core Servletscourses.coreservlets.com/.../Java-for-Managers-Japanese.pdfAWT (Java 1.0 and 1.1) は力不足だったが、JFC/Swing (Java 2) はよ

© 2003 Marty Hall, http://www.coreservlets.com

Java: ソフトウェア革ソフトウェア革ソフトウェア革ソフトウェア革命命命命?

Marty Hall http://www.coreservlets.com

CasaReal, Inc. http://www.casareal.co.jp

www.coreservlets.com

アジェンダアジェンダアジェンダアジェンダ

• Java の迷信と実像の迷信と実像の迷信と実像の迷信と実像– Java は Web が使用可能?– Java は安全?– Java はクロス・プラットフォーム?– Java は簡単?– Java は強力?

• 共通共通共通共通 Java プロトコルプロトコルプロトコルプロトコル &&&& パッケージパッケージパッケージパッケージ• Java の未来の未来の未来の未来• JavaJavaJavaJava の実用例の実用例の実用例の実用例• サンプルサンプルサンプルサンプル Java プログラムプログラムプログラムプログラム• Q &&&& A

Page 2: Java: ソフトウェア革 命 - Core Servletscourses.coreservlets.com/.../Java-for-Managers-Japanese.pdfAWT (Java 1.0 and 1.1) は力不足だったが、JFC/Swing (Java 2) はよ

www.coreservlets.com

Java はははは Web が使用可能が使用可能が使用可能が使用可能?

• 実像実像実像実像: Web ブラウザはブラウザはブラウザはブラウザは Java “アプレットアプレットアプレットアプレット”を起を起を起を起動可能動可能動可能動可能– Web はドキュメントの配信と表示だけでなく、ソフトウェアの配信と実行も可能

– インストールやアップデートが不要;ブックマークするだけ

– 大きく、複雑なアプレットはイントラネットに適。概して WWW ではなく、APL モデルに適している

• 実像実像実像実像: Java のネットワークライブラリは使いやのネットワークライブラリは使いやのネットワークライブラリは使いやのネットワークライブラリは使いやすいすいすいすい– 普通の人でもソケットプログラミングが可能

標準分散オブジェクトプロトコルと DBMS API

www.coreservlets.com

ハッブル宇宙望遠鏡のモニタリングハッブル宇宙望遠鏡のモニタリングハッブル宇宙望遠鏡のモニタリングハッブル宇宙望遠鏡のモニタリング:“NASA ゴダード宇宙研究所で も成功したゴダード宇宙研究所で も成功したゴダード宇宙研究所で も成功したゴダード宇宙研究所で も成功した

ソフトウェアプロジェクソフトウェアプロジェクソフトウェアプロジェクソフトウェアプロジェクトトトト”

Page 3: Java: ソフトウェア革 命 - Core Servletscourses.coreservlets.com/.../Java-for-Managers-Japanese.pdfAWT (Java 1.0 and 1.1) は力不足だったが、JFC/Swing (Java 2) はよ

www.coreservlets.com

Java はははは Web が使用可能が使用可能が使用可能が使用可能?

• 迷信迷信迷信迷信: Java はははは Web 専用専用専用専用– Java “アプレット” は Web ページ内で起動– Java “アプリケーション”はスダンドアローンで起動

– 現在の用途 (概算)• Client (アプレット): 5%• Desktop (アプリケーション): 45%• Server (サーブレット/JSP/EJB): 50%

www.coreservlets.com

Star OfficeJava でででで 書かれた書かれた書かれた書かれた MS Office の競合製品の競合製品の競合製品の競合製品

Page 4: Java: ソフトウェア革 命 - Core Servletscourses.coreservlets.com/.../Java-for-Managers-Japanese.pdfAWT (Java 1.0 and 1.1) は力不足だったが、JFC/Swing (Java 2) はよ

www.coreservlets.com

Java は安全は安全は安全は安全?

• JAVA: Just Another Virus Architecture?

www.coreservlets.com

Java は安全は安全は安全は安全?

• 実像実像実像実像: 許容可能なオペレーションに対する制限許容可能なオペレーションに対する制限許容可能なオペレーションに対する制限許容可能なオペレーションに対する制限は可能は可能は可能は可能– メモリーを(直接または間接的にも) “生” での操作しない。

• よって、禁止操作の発見が容易。

– アプレットはデフォルトで以下のことが禁止されている:

• ローカルディスクの読み込み• ローカルディスクへの書き込み• ローカルプログラムの実行• HTTP サーバ以外へのネットワーク接続• ユーザのプライベート情報(ユーザ名、ディレクトリ、OS パッチレベル、インストールされたアプリケーションなど)の発見

Page 5: Java: ソフトウェア革 命 - Core Servletscourses.coreservlets.com/.../Java-for-Managers-Japanese.pdfAWT (Java 1.0 and 1.1) は力不足だったが、JFC/Swing (Java 2) はよ

www.coreservlets.com

Java は安全は安全は安全は安全?

• 迷信迷信迷信迷信: アプレットはコンピュータに害を及ぼさアプレットはコンピュータに害を及ぼさアプレットはコンピュータに害を及ぼさアプレットはコンピュータに害を及ぼさないないないない– サービス妨害 (Denial of service)– 不適切なブラウザ設定– バグの実装

• 迷信迷信迷信迷信: Java は制限が多く使いづらいは制限が多く使いづらいは制限が多く使いづらいは制限が多く使いづらい– 制限はアプレットにのみ適用。通常の Java プログラムに制限はない

– 電子署名のサポートにより、制限が緩まった

• 迷信迷信迷信迷信: 電子署名付きアプレットの安全性は電子署名付きアプレットの安全性は電子署名付きアプレットの安全性は電子署名付きアプレットの安全性はActiveX と変わらないと変わらないと変わらないと変わらない– アプレットのセキュリティは緩くなったが、

ActiveX のように“全て”か“なし”かではない

www.coreservlets.com

JavaSource Code

Java Bytecode

Compiler

(javac)

Java Bytecode

Execution

JIT Compileror Interpreter

Compile Time Run Time

Java はクロス・プラットフォーはクロス・プラットフォーはクロス・プラットフォーはクロス・プラットフォームムムム?

• 実像実像実像実像: Java プログラムはマシン固有のバイトコプログラムはマシン固有のバイトコプログラムはマシン固有のバイトコプログラムはマシン固有のバイトコードにコンパイル可能ードにコンパイル可能ードにコンパイル可能ードにコンパイル可能

• 実像実像実像実像: ほとんどのオペレーティングシステムにほとんどのオペレーティングシステムにほとんどのオペレーティングシステムにほとんどのオペレーティングシステムにはははは Java 動作環境が備わっている動作環境が備わっている動作環境が備わっている動作環境が備わっている– 通常バンドルされている

(Solaris, MacOS, Linux, Windows, OS/2)

Page 6: Java: ソフトウェア革 命 - Core Servletscourses.coreservlets.com/.../Java-for-Managers-Japanese.pdfAWT (Java 1.0 and 1.1) は力不足だったが、JFC/Swing (Java 2) はよ

www.coreservlets.com

火星探査機のデータ・ビューア火星探査機のデータ・ビューア火星探査機のデータ・ビューア火星探査機のデータ・ビューア

www.coreservlets.com

Java はクロス・プラットフォーはクロス・プラットフォーはクロス・プラットフォーはクロス・プラットフォームムムム?

• 迷信迷信迷信迷信: パフォーマンスを悪化させずに安全性とパフォーマンスを悪化させずに安全性とパフォーマンスを悪化させずに安全性とパフォーマンスを悪化させずに安全性とマシンの独立性の達成が可能マシンの独立性の達成が可能マシンの独立性の達成が可能マシンの独立性の達成が可能– 既存のシステムは C++ よりも約 20% 遅い

– 次期リリースでそのギャップは減少、解消されると言われている

– 個人的には 10% 以上のギャップになると考えている

– 無償コンパイラよりも商用コンパイラの方が早い場合がある

• 迷信迷信迷信迷信: Java は解釈(インタープリット)されは解釈(インタープリット)されは解釈(インタープリット)されは解釈(インタープリット)されているているているている– 初期リリースでは解釈されていた– 多くの“Just in Time” (JIT) コンパイラ

HotSpot と “ネイティブ”なコンパイラはそれ以上

Page 7: Java: ソフトウェア革 命 - Core Servletscourses.coreservlets.com/.../Java-for-Managers-Japanese.pdfAWT (Java 1.0 and 1.1) は力不足だったが、JFC/Swing (Java 2) はよ

www.coreservlets.com

•実像実像実像実像: Java には移植できるグラフィック・ライブには移植できるグラフィック・ライブには移植できるグラフィック・ライブには移植できるグラフィック・ライブラリがあるラリがあるラリがあるラリがある

“OSネイティブな操作感(ルック・アンド・フィール)ネイティブな操作感(ルック・アンド・フィール)ネイティブな操作感(ルック・アンド・フィール)ネイティブな操作感(ルック・アンド・フィール)” -- Java 1.1 UI がががが OS への適合を制御するへの適合を制御するへの適合を制御するへの適合を制御する

“プラッグ可能な操作感(ルック・アンド・フィール)プラッグ可能な操作感(ルック・アンド・フィール)プラッグ可能な操作感(ルック・アンド・フィール)プラッグ可能な操作感(ルック・アンド・フィール)” -- Java 2 がががが見た目の変更を制御する見た目の変更を制御する見た目の変更を制御する見た目の変更を制御する

•迷信迷信迷信迷信: グラフィックライブラリには、大体のアプグラフィックライブラリには、大体のアプグラフィックライブラリには、大体のアプグラフィックライブラリには、大体のアプリケーションで必要なものが揃っているリケーションで必要なものが揃っているリケーションで必要なものが揃っているリケーションで必要なものが揃っている

AWT (Java 1.0 and 1.1) は力不足だったが、は力不足だったが、は力不足だったが、は力不足だったが、JFC/Swing (Java 2) はよはよはよはより完全で、パワーがあるり完全で、パワーがあるり完全で、パワーがあるり完全で、パワーがある

Java はクロス・プラットフォーはクロス・プラットフォーはクロス・プラットフォーはクロス・プラットフォームムムム?

www.coreservlets.com

Java はクロス・プラットフォーはクロス・プラットフォーはクロス・プラットフォーはクロス・プラットフォームムムム?

• 真実真実真実真実: (意見意見意見意見) ネイティブな操作感(ルック・アネイティブな操作感(ルック・アネイティブな操作感(ルック・アネイティブな操作感(ルック・アンド・フィール)の選択は正しかったンド・フィール)の選択は正しかったンド・フィール)の選択は正しかったンド・フィール)の選択は正しかった

Page 8: Java: ソフトウェア革 命 - Core Servletscourses.coreservlets.com/.../Java-for-Managers-Japanese.pdfAWT (Java 1.0 and 1.1) は力不足だったが、JFC/Swing (Java 2) はよ

www.coreservlets.com

Java Foundation Classes (JFC)によりグラフィックスが格段に向によりグラフィックスが格段に向によりグラフィックスが格段に向によりグラフィックスが格段に向上上上上

• 更なる更なる更なる更なるGUI の制御の制御の制御の制御• 更なるカスタマイズ化が可能更なるカスタマイズ化が可能更なるカスタマイズ化が可能更なるカスタマイズ化が可能• プラグ可能な操作性プラグ可能な操作性プラグ可能な操作性プラグ可能な操作性• ネイティブなフォントネイティブなフォントネイティブなフォントネイティブなフォント• より豊富なより豊富なより豊富なより豊富な

描画操作描画操作描画操作描画操作

www.coreservlets.com

Java はクロス・プラットフォーはクロス・プラットフォーはクロス・プラットフォーはクロス・プラットフォームムムム?

• 迷信迷信迷信迷信: Write Once Run Anywhere– クロス・プラットフォームなコードは可能だが、使用する全てのプラットフォームでテストする必要がある

• Java アプリケーションはローカルコードで実行可能• グラフィックライブラリは異なるプラットフォームでは若干異なる振舞いをする

• スレッドスケジューラの振舞いは、緩くしか定義されていない

• 迷信迷信迷信迷信: Java がががが Microsoft を倒すを倒すを倒すを倒す– 逆(Microsoft が Java を今すぐ倒す)ような危険性はなくなった

– Microsoft は Java と戦うのか、仲良くしマーケットを独占することで儲けるのかで迷っていた。しかし NETで再度 戦いに転じた

Page 9: Java: ソフトウェア革 命 - Core Servletscourses.coreservlets.com/.../Java-for-Managers-Japanese.pdfAWT (Java 1.0 and 1.1) は力不足だったが、JFC/Swing (Java 2) はよ

www.coreservlets.com

Sun のスローガンのスローガンのスローガンのスローガン: “100% Pure Java”

パットを見てください。パットはプログラムを一度だけ書きました全てのプラットフォームで動作が可能です

プログラムを書くのに、パットは100% Pure Java を使いました。

動けプログラム、動け!

www.coreservlets.com

Java は簡単は簡単は簡単は簡単?

• 実像実像実像実像: Java は幾つかの言語の機能を非常に簡単は幾つかの言語の機能を非常に簡単は幾つかの言語の機能を非常に簡単は幾つかの言語の機能を非常に簡単にするにするにするにする– Java は自動メモリ管理機能を持つ

• Windows はゴミを捨ててくれますか?• ぶら下がっているポインタがない。メモリーリークがない。

– Java はポインタ処理を簡単にする• 明示的な参照/参照渡しの操作がない

– メイクファイルがいらない – ヘッダーファイルがいらない– C++ の構文を合理化– C# は Java と同等、ただし言語の核心に関して言えば・・・。

Page 10: Java: ソフトウェア革 命 - Core Servletscourses.coreservlets.com/.../Java-for-Managers-Japanese.pdfAWT (Java 1.0 and 1.1) は力不足だったが、JFC/Swing (Java 2) はよ

www.coreservlets.com

Java による迅速なによる迅速なによる迅速なによる迅速なアプリケーション開発アプリケーション開発アプリケーション開発アプリケーション開発

– 数ギガバイトのテキストコーパスの情報回収 (APL RTDC)

– 分散シミュレーションの (APL STD)

www.coreservlets.com

Java は簡単は簡単は簡単は簡単?

• 迷信迷信迷信迷信: Java ののののプログラミングプログラミングプログラミングプログラミングは簡単は簡単は簡単は簡単

– プログラミングは常に難しい• Java は HTML ではない;

JavaScript に少し似ているだけ– プログラマは大抵、複雑さを追求してしまう

• マルチスレッド、およびネットワークプログラミング

Page 11: Java: ソフトウェア革 命 - Core Servletscourses.coreservlets.com/.../Java-for-Managers-Japanese.pdfAWT (Java 1.0 and 1.1) は力不足だったが、JFC/Swing (Java 2) はよ

www.coreservlets.com

Java は強力は強力は強力は強力?

• 実像実像実像実像: Java は豊富な標準ライブラリを備えていは豊富な標準ライブラリを備えていは豊富な標準ライブラリを備えていは豊富な標準ライブラリを備えているるるる– ネットワーク – スレッド  (軽いプロセス)– 分散オブジェクト – データベースアクセス– グラフィックス:GUI 制御と描画 – データ構造ライブラリ – 任意の正確積分および固定小数点式の算術– 電子署名 – シリアライズ化  (データ構造の送信/再構築)– ファイルとストリームの圧縮 

www.coreservlets.com

MEL - Master Environmental Library

Page 12: Java: ソフトウェア革 命 - Core Servletscourses.coreservlets.com/.../Java-for-Managers-Japanese.pdfAWT (Java 1.0 and 1.1) は力不足だったが、JFC/Swing (Java 2) はよ

www.coreservlets.com

Java は強力は強力は強力は強力?

• 迷信迷信迷信迷信: 全てのアプリケーションに対して、全てのアプリケーションに対して、全てのアプリケーションに対して、全てのアプリケーションに対して、Java はプログラマの生産性をはプログラマの生産性をはプログラマの生産性をはプログラマの生産性をXXX%%%%向上させる向上させる向上させる向上させる

• 迷信迷信迷信迷信: Java はははは C++ をなくすをなくすをなくすをなくす• 迷信迷信迷信迷信: 全てのソフトウェアを全てのソフトウェアを全てのソフトウェアを全てのソフトウェアを Java で書くべきで書くべきで書くべきで書くべき

– Unix :C 言語を活用– 中小規模の Windows 専用プログラム: Visual Basic– 文字列の構文解析: Perl– 高パフォーマンス、単一プラットフォームのオブジェクト指向システム:C++ 

– 航空交通完成、航空機飛行ソフトウェア: Ada– 知識ベースシステム: Lisp/CLOS– Java はこれらのプログラムの良い代替プログラムである 

www.coreservlets.com

Java とととと C++Java は C++ を駆逐することはないが、Java と C++ は同じ土俵で競い合う。

The C++ Report では Java にポートすることで C++ を頑強できると考えているのか?

Page 13: Java: ソフトウェア革 命 - Core Servletscourses.coreservlets.com/.../Java-for-Managers-Japanese.pdfAWT (Java 1.0 and 1.1) は力不足だったが、JFC/Swing (Java 2) はよ

www.coreservlets.com

鍵となる鍵となる鍵となる鍵となる Java パッケージとプロトパッケージとプロトパッケージとプロトパッケージとプロトコルコルコルコルKey Java Packages and    Protocols

• コアテクノロジー コアテクノロジー コアテクノロジー コアテクノロジー – JDBC– RMI (and Jini)– JavaBeans– Swing– Java 2D

• 標準拡張標準拡張標準拡張標準拡張    – Servlets

(及び JavaServer Pages)– Struts– Enterprise Java Beans (and JNDI)– Java 3D

www.coreservlets.com

Java パッケージとプロトコルパッケージとプロトコルパッケージとプロトコルパッケージとプロトコル:JDBC (Java DataBase Connectivity)

• データベースサーバへ接続する仕組みを標準化データベースサーバへ接続する仕組みを標準化データベースサーバへ接続する仕組みを標準化データベースサーバへ接続する仕組みを標準化– クライアント側にサーバ固有のドライバが必要。サーバの設定には変更なし

• クエリー送信の仕組みを標準化クエリー送信の仕組みを標準化クエリー送信の仕組みを標準化クエリー送信の仕組みを標準化– 正規またはパラメータ化されたクエリー (ストアドプロシージャ)

• クエリー結果のデータ構造を標準化クエリー結果のデータ構造を標準化クエリー結果のデータ構造を標準化クエリー結果のデータ構造を標準化– リレーショナルデータが前提の為、データ構造はテーブル

• 「「「「SQL 構文の標準化」ではない構文の標準化」ではない構文の標準化」ではない構文の標準化」ではない– クエリーは簡単なストリング– サーバの拡張機能および追加機能をサポート

Page 14: Java: ソフトウェア革 命 - Core Servletscourses.coreservlets.com/.../Java-for-Managers-Japanese.pdfAWT (Java 1.0 and 1.1) は力不足だったが、JFC/Swing (Java 2) はよ

www.coreservlets.com

Java パッケージとプロトコルパッケージとプロトコルパッケージとプロトコルパッケージとプロトコル:Remote Method Invocation (RMI)

• 組み込まれた分散オブジェクト・プロトコル組み込まれた分散オブジェクト・プロトコル組み込まれた分散オブジェクト・プロトコル組み込まれた分散オブジェクト・プロトコル– 開発者は RMI を使用することで普通に Java オブジェクトにアクセスし、操作する。その裏で実際のファンクション呼び出しはネットワークを介してリモートオブジェクトに行く

– Java の “シリアライズ化”機構により、特別のパッケージングをほとんど使わずに、どんなJavaのデータ構造でも、ネットワークを介して送信することが可能

– 簡略化された CORBA に類似、しかし Java 同士のやり取りに制限される

• Jini– RMI ベースの自己文書化サービス向けプロトコル– 正真正銘の“プラグ&プレイ”を可能にする

—別ドライバ不要今後の成功はこれからにかか ている セキ リティ

www.coreservlets.com

Java パッケージとプロトコルパッケージとプロトコルパッケージとプロトコルパッケージとプロトコル:JavaBeans

• JavaBeans とととと Java の関係はの関係はの関係はの関係は        ActiveX とととと Visual C++の関係と同等の関係と同等の関係と同等の関係と同等. – Java プログラムをソフトウェアの

“コンポーネント”としてパッケージできる

– ビジュアルのツールにより、事前に詳細を知らなくても、変更/操作が可能

• 例えば、Bean を Visual Café, IBM VisualAge for Java, Inprise (Borland) JBuilder, Sybase PowerJ, Metrowerks CodeWarrior, Sun JavaWorkshop, などにドロップするだけで、ツールパレットからドラッグ&ドロップの開発が可能

– ActiveX よりも優れたセキュリティと移植性– 多くの ActiveX コンポーネントが利用可能

Page 15: Java: ソフトウェア革 命 - Core Servletscourses.coreservlets.com/.../Java-for-Managers-Japanese.pdfAWT (Java 1.0 and 1.1) は力不足だったが、JFC/Swing (Java 2) はよ

www.coreservlets.com

Java パッケージとプロトコルパッケージとプロトコルパッケージとプロトコルパッケージとプロトコル:Swing

• Java 2 標準標準標準標準 GUI 制御制御制御制御• より多くの組み込まれた制御より多くの組み込まれた制御より多くの組み込まれた制御より多くの組み込まれた制御• より柔軟で、カスタマイズ化が可能より柔軟で、カスタマイズ化が可能より柔軟で、カスタマイズ化が可能より柔軟で、カスタマイズ化が可能• 商用アプリケーション向けの機能を多く含む商用アプリケーション向けの機能を多く含む商用アプリケーション向けの機能を多く含む商用アプリケーション向けの機能を多く含む

– ツールチップ、タブ枠、オンラインヘルプ、HTMLサポート、ドック可能なツールバー、マルチ-ドキュメントインタフェースなど

• 起動時に操作性(ルック・起動時に操作性(ルック・起動時に操作性(ルック・起動時に操作性(ルック・アンド・フィール)が変わるアンド・フィール)が変わるアンド・フィール)が変わるアンド・フィール)が変わる場合がある場合がある場合がある場合がある

www.coreservlets.com

Java パッケージとプロトコルパッケージとプロトコルパッケージとプロトコルパッケージとプロトコル:Java 2D

• Java 2222 標準描画ライブラリ標準描画ライブラリ標準描画ライブラリ標準描画ライブラリ• 多くの新しい描画属性多くの新しい描画属性多くの新しい描画属性多くの新しい描画属性

– 塗りつぶしパターンと画像– 任意のフォント– ペンの太さとパターン– 色の混合規則と透過性

• 座標変換 座標変換 座標変換 座標変換 – 浮動小数点の座標システム – メモリ座標からスクリーン座標またはプリンタ座標へのマッピング 

– アフィン変換:変換、スケール、回転、ねじれ

Page 16: Java: ソフトウェア革 命 - Core Servletscourses.coreservlets.com/.../Java-for-Managers-Japanese.pdfAWT (Java 1.0 and 1.1) は力不足だったが、JFC/Swing (Java 2) はよ

www.coreservlets.com

Java パッケージとプロトコルパッケージとプロトコルパッケージとプロトコルパッケージとプロトコル:Java 3D

• Java の標準拡張機能の標準拡張機能の標準拡張機能の標準拡張機能– Java 2D のように、Java 言語の”コア”ではない

• プラットフォームにより、プラットフォームにより、プラットフォームにより、プラットフォームにより、Direct3D、、、、またはまたはまたはまたはOpenGL 上に構築上に構築上に構築上に構築

• Scene-graph に基づいたモデル。に基づいたモデル。に基づいたモデル。に基づいたモデル。リアルタイムレンダリング向けではないリアルタイムレンダリング向けではないリアルタイムレンダリング向けではないリアルタイムレンダリング向けではない

www.coreservlets.com

Java パッケージとプロトコルパッケージとプロトコルパッケージとプロトコルパッケージとプロトコル:Servlets

• クライアントが明示的に送信したデータを読み込クライアントが明示的に送信したデータを読み込クライアントが明示的に送信したデータを読み込クライアントが明示的に送信したデータを読み込むむむむ(フォームデータフォームデータフォームデータフォームデータ)

• クライアントが暗示的に送信したデータを読み込クライアントが暗示的に送信したデータを読み込クライアントが暗示的に送信したデータを読み込クライアントが暗示的に送信したデータを読み込むむむむ(リクエストヘッダリクエストヘッダリクエストヘッダリクエストヘッダ)

• 結果の生成結果の生成結果の生成結果の生成• 明示的データをクライアントに返す明示的データをクライアントに返す明示的データをクライアントに返す明示的データをクライアントに返す(HTML)• 暗示的データをクライアントに返す暗示的データをクライアントに返す暗示的データをクライアントに返す暗示的データをクライアントに返す

(ステータスコード及びレスポンスヘッダステータスコード及びレスポンスヘッダステータスコード及びレスポンスヘッダステータスコード及びレスポンスヘッダ)

Page 17: Java: ソフトウェア革 命 - Core Servletscourses.coreservlets.com/.../Java-for-Managers-Japanese.pdfAWT (Java 1.0 and 1.1) は力不足だったが、JFC/Swing (Java 2) はよ

www.coreservlets.com

“既存既存既存既存”ののののCGI に対するサーブレッに対するサーブレッに対するサーブレッに対するサーブレットの利点トの利点トの利点トの利点

• 効率性 効率性 効率性 効率性 Efficient – OS プロセスの代わりにスレッドを利用、1サーブレットのコピー、パーシスタンス

• 便利 便利 便利 便利 Convenient– 多くの高レベルユーティリティ 

• 強力 強力 強力 強力 Powerful– データ共有、プーリング、パーシスタンス

• 移植性 移植性 移植性 移植性 Portable– ほとんどのオペレーティングシステムとサーバで動作

• 安全 安全 安全 安全 Secure– シェルエスケープがない、バッファフローがない

• 安価 安価 安価 安価 Inexpensive– 多くの無償、低価格サーバが存在

www.coreservlets.com

Java パッケージとプロトコルパッケージとプロトコルパッケージとプロトコルパッケージとプロトコル:JavaServer Pages (JSP)

• アイディアアイディアアイディアアイディア: – ページの大部分では通常のHTMLを使用– サーブレットコードを特別なタグでマーク– JSP ページ全体がサーブレットに変換(一回)され、各リクエストで、実際に呼び出されるのはそのサーブレット

• 例えば例えば例えば例えば: – JSP

• Thanks for ordering <I><%= request.getParameter("title") %></I>

– URL • http://host/OrderConfirmation.jsp

?title=Core+Web+Programming– 結果

• Thanks for ordering Core Web Programming

Page 18: Java: ソフトウェア革 命 - Core Servletscourses.coreservlets.com/.../Java-for-Managers-Japanese.pdfAWT (Java 1.0 and 1.1) は力不足だったが、JFC/Swing (Java 2) はよ

www.coreservlets.com

JSP の利点の利点の利点の利点

• 技術的に技術的に技術的に技術的にJSPはサーブレットで出来ないことははサーブレットで出来ないことははサーブレットで出来ないことははサーブレットで出来ないことは出来ない。しかし、出来ない。しかし、出来ない。しかし、出来ない。しかし、JSP は以下を簡単にするは以下を簡単にするは以下を簡単にするは以下を簡単にする :– HTML の作成– HTML の読み込みと保守

• JSP が可能にすることが可能にすることが可能にすることが可能にすること:– Allaire HomeSite, Macromedia DreamWeaver, or

Adobe GoLive などの標準的な HTML の使用.– HTML レイアウトとJava プログラミングの分離

• JSP によって推奨されること によって推奨されること によって推奨されること によって推奨されること – コンテンツを作成する (Java) コードと、それを

www.coreservlets.com

Servlets とととと JSP: 業界への導入 業界への導入 業界への導入 業界への導入 Industry Adoption

Page 19: Java: ソフトウェア革 命 - Core Servletscourses.coreservlets.com/.../Java-for-Managers-Japanese.pdfAWT (Java 1.0 and 1.1) は力不足だったが、JFC/Swing (Java 2) はよ

www.coreservlets.com

Struts• Servlet およびおよびおよびおよび JSP のフレームワークのフレームワークのフレームワークのフレームワーク• 無償無償無償無償• オープンソースオープンソースオープンソースオープンソース• Apache Software Foundation で提供で提供で提供で提供• 大規模、中規模の大規模、中規模の大規模、中規模の大規模、中規模の サーバーサイドサーバーサイドサーバーサイドサーバーサイド

Java システムの管理を簡単にするシステムの管理を簡単にするシステムの管理を簡単にするシステムの管理を簡単にする• 業界で広く導入されている業界で広く導入されている業界で広く導入されている業界で広く導入されている

www.coreservlets.com

Java パッケージとプロトコルパッケージとプロトコルパッケージとプロトコルパッケージとプロトコル:Enterprise JavaBeans (EJB)

• 通常の通常の通常の通常のJavaBeans がアプリケーションのがアプリケーションのがアプリケーションのがアプリケーションのコンポーネントであるように、コンポーネントであるように、コンポーネントであるように、コンポーネントであるように、EJB はサーバのコンポーネントはサーバのコンポーネントはサーバのコンポーネントはサーバのコンポーネント

• ロードバランシング、パーシスタンス、ロードバランシング、パーシスタンス、ロードバランシング、パーシスタンス、ロードバランシング、パーシスタンス、フォールオーバーなどのサービスへのフォールオーバーなどのサービスへのフォールオーバーなどのサービスへのフォールオーバーなどのサービスへのアクセスを標準化アクセスを標準化アクセスを標準化アクセスを標準化

• 中身は中身は中身は中身は JavaBeans、、、、CORBA、、、、およびおよびおよびおよびRMIで構築で構築で構築で構築

• 非非非非 Java プログラムからのアクセスも可能プログラムからのアクセスも可能プログラムからのアクセスも可能プログラムからのアクセスも可能

• EJB をサポートするアプリケーションサーバをサポートするアプリケーションサーバをサポートするアプリケーションサーバをサポートするアプリケーションサーバ– BEA WebLogic, IBM WebSphere, Netscape, Oracle, Progress SW

Apptivity, NetDynamics, Sybase, Bluestone Saphire/Web など

Page 20: Java: ソフトウェア革 命 - Core Servletscourses.coreservlets.com/.../Java-for-Managers-Japanese.pdfAWT (Java 1.0 and 1.1) は力不足だったが、JFC/Swing (Java 2) はよ

www.coreservlets.com

Java の未来の未来の未来の未来

• 言語の核言語の核言語の核言語の核– Windows 向け Java 2(別名 JDK 1.2-1.4 )は

1998年12月にリリース。豊富なGUI制御、描画モデルの改善、多数のデータ構造ライブラリ(“コレクション”)、オーディオサポートの改善、標準 CORBA インタフェース、パフォーマンスの改善

– 徐々に進化 

• 標準拡張機能標準拡張機能標準拡張機能標準拡張機能– Servlets, JSP, Jini, JAXP, など– 急速に進化 

• サーバ上のサーバ上のサーバ上のサーバ上の Java– 現在 も伸びている分野 

www.coreservlets.com

Java の未来 の未来 の未来 の未来 (続き続き続き続き)

• 小さなデバイス、組み込み式小さなデバイス、組み込み式小さなデバイス、組み込み式小さなデバイス、組み込み式アプリケーション向けのアプリケーション向けのアプリケーション向けのアプリケーション向けのJava

– Java 2 Micro Edition • PDA、 携帯電話など

– JavaCard• Smart cards

– Real-Time Java の未来はまだ不明

• http://www.rtj.org を参照

• 訴訟の行方は?訴訟の行方は?訴訟の行方は?訴訟の行方は?

Page 21: Java: ソフトウェア革 命 - Core Servletscourses.coreservlets.com/.../Java-for-Managers-Japanese.pdfAWT (Java 1.0 and 1.1) は力不足だったが、JFC/Swing (Java 2) はよ

www.coreservlets.com

Java の未来の未来の未来の未来: パフォーマンスの改善パフォーマンスの改善パフォーマンスの改善パフォーマンスの改善

0

50

100

150

200

250

1.1.3 1.1.5 1.2B2 1.2B3 1.2B4

JHU/APL Information Retrieval Benchmark

www.coreservlets.com

Java の未来の未来の未来の未来:更なる成長更なる成長更なる成長更なる成長

0

100,000,000

200,000,000

300,000,000

400,000,000

500,000,000

600,000,000

700,000,000

800,000,000

900,000,000

1,000,000,000

19

96

19

97

19

98

19

99

20

00 0

200,000

400,000

600,000

800,000

1,000,000

1,200,000

1/9

6

5/9

6

9/9

6

1/9

7

5/9

7

Web Documents On-Line Java Programs On-Line

Page 22: Java: ソフトウェア革 命 - Core Servletscourses.coreservlets.com/.../Java-for-Managers-Japanese.pdfAWT (Java 1.0 and 1.1) は力不足だったが、JFC/Swing (Java 2) はよ

www.coreservlets.com

Java の未来の未来の未来の未来:より多くの仕事より多くの仕事より多くの仕事より多くの仕事

• 不景気に関わらず、大量のソフトウェア開発を不景気に関わらず、大量のソフトウェア開発を不景気に関わらず、大量のソフトウェア開発を不景気に関わらず、大量のソフトウェア開発を行うほとんどの企業では、優良な行うほとんどの企業では、優良な行うほとんどの企業では、優良な行うほとんどの企業では、優良な Java 開発者開発者開発者開発者が不足しているが不足しているが不足しているが不足している

• IBM ではではではでは2,,,,500名以上のプロフェッショナル名以上のプロフェッショナル名以上のプロフェッショナル名以上のプロフェッショナルををををJava製品開発に従事させている製品開発に従事させている製品開発に従事させている製品開発に従事させている

• JavaOne カンファレンスのビデオクリップのカンファレンスのビデオクリップのカンファレンスのビデオクリップのカンファレンスのビデオクリップの背景に書かれているコード:背景に書かれているコード:背景に書かれているコード:背景に書かれているコード:

if (you.canRead(this))you.canGet(new Job(!problem));

© 2003 Marty Hall, http://www.coreservlets.com

サンプルサンプルサンプルサンプル Java プログラプログラプログラプログラムムムム

Page 23: Java: ソフトウェア革 命 - Core Servletscourses.coreservlets.com/.../Java-for-Managers-Japanese.pdfAWT (Java 1.0 and 1.1) は力不足だったが、JFC/Swing (Java 2) はよ

www.coreservlets.com

デスクトップデスクトップデスクトップデスクトップ Java プログラムプログラムプログラムプログラムDesktop Java Program

• File ShowArgs.java:

public class ShowArgs {public static void main(String[] args) {for(int i=0; i<args.length; i++) {System.out.println("Arg " + i +

" is " + args[i]);}

}}

www.coreservlets.com

デスクトップデスクトップデスクトップデスクトップ Java プログラムプログラムプログラムプログラム:結果結果結果結果

• Compiling and Running:

> javac ShowArgs.java

> java ShowArgs fee fie foe fumArg 0 is feeArg 1 is fieArg 2 is foeArg 3 is fum

Page 24: Java: ソフトウェア革 命 - Core Servletscourses.coreservlets.com/.../Java-for-Managers-Japanese.pdfAWT (Java 1.0 and 1.1) は力不足だったが、JFC/Swing (Java 2) はよ

www.coreservlets.com

Web で使用可能なで使用可能なで使用可能なで使用可能な Java プログラプログラプログラプログラムムムム (Applet)

import java.applet.Applet;import java.awt.*;

public class Message extends Applet {private int fontSize;private String message;

public void init() {setBackground(Color.black);setForeground(Color.white);fontSize = getSize().height - 10; setFont(new Font("SansSerif", Font.BOLD, fontSize));// Read heading message from PARAM entry in HTML.message = getParameter("MESSAGE");

}

public void paint(Graphics g) {if (message != null)g.drawString(message, 5, fontSize+5);

}}

www.coreservlets.com

Web で使用可能なで使用可能なで使用可能なで使用可能な Java プログラプログラプログラプログラムムムム (Applet) ::::続き続き続き続き

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML><HEAD><TITLE>The Message Applet</TITLE></HEAD><BODY BGCOLOR="WHITE"><H1>The <CODE>Message</CODE> Applet</H1><P><APPLET CODE="Message.class" WIDTH=325 HEIGHT=25><PARAM NAME="MESSAGE" VALUE="Tiny"><B>Sorry, these examples require Java</B>

</APPLET><P><APPLET CODE="Message.class" WIDTH=325 HEIGHT=50><PARAM NAME="MESSAGE" VALUE="Small"><B>Sorry, these examples require Java</B>

</APPLET>...</BODY></HTML>

Page 25: Java: ソフトウェア革 命 - Core Servletscourses.coreservlets.com/.../Java-for-Managers-Japanese.pdfAWT (Java 1.0 and 1.1) は力不足だったが、JFC/Swing (Java 2) はよ

www.coreservlets.com

Web で使用可能なで使用可能なで使用可能なで使用可能な Java プログラプログラプログラプログラムムムム (Applet) : 結果結果結果結果

www.coreservlets.com

サーバサイドサーバサイドサーバサイドサーバサイド Java プログラムプログラムプログラムプログラム(Servlet)import java.io.*; import javax.servlet.*;import javax.servlet.http.*;

public class HelloWorld extends HttpServlet {public void doGet(HttpServletRequest request,

HttpServletResponse response)throws ServletException, IOException {

PrintWriter out = response.getWriter();out.println("Hello World");

}}

Page 26: Java: ソフトウェア革 命 - Core Servletscourses.coreservlets.com/.../Java-for-Managers-Japanese.pdfAWT (Java 1.0 and 1.1) は力不足だったが、JFC/Swing (Java 2) はよ

www.coreservlets.com

サーバサイドサーバサイドサーバサイドサーバサイド Java プログラムプログラムプログラムプログラム(Servlet): 結果結果結果結果

www.coreservlets.com

サーバサイドサーバサイドサーバサイドサーバサイド Java プログラムプログラムプログラムプログラム(JSP)<!DOCTYPE HTML PUBLIC

"-//W3C//DTD HTML 4.0 Transitional//EN">…<BODY><H2>JSP Expressions</H2><UL>

<LI>Current time: <%= new java.util.Date() %><LI>Your hostname: <%= request.getRemoteHost() %><LI>Your session ID: <%= session.getId() %><LI>The <CODE>testParam</CODE> form parameter:

<%= request.getParameter("testParam") %></UL></BODY></HTML>

Page 27: Java: ソフトウェア革 命 - Core Servletscourses.coreservlets.com/.../Java-for-Managers-Japanese.pdfAWT (Java 1.0 and 1.1) は力不足だったが、JFC/Swing (Java 2) はよ

www.coreservlets.com

サーバサイドサーバサイドサーバサイドサーバサイド Java プログラムプログラムプログラムプログラム(JSP): 結果結果結果結果

www.coreservlets.com

ビジネスにおけるビジネスにおけるビジネスにおけるビジネスにおける Java の導入の導入の導入の導入

• フィナンシャルサービフィナンシャルサービフィナンシャルサービフィナンシャルサービスススス: Charles Schwab– 1999年に、拡張性、開発効率、およびビジネスエンタープライズ全体におけるコードの再利用性と共有性を提供する Javaプラットフォームに、内部システム全てと、カスタマ・アプリケーションを移行する戦略的決定を行った。

Page 28: Java: ソフトウェア革 命 - Core Servletscourses.coreservlets.com/.../Java-for-Managers-Japanese.pdfAWT (Java 1.0 and 1.1) は力不足だったが、JFC/Swing (Java 2) はよ

www.coreservlets.com

ビジネスにおけるビジネスにおけるビジネスにおけるビジネスにおける Java の導入の導入の導入の導入

• フィナンシャルサービスフィナンシャルサービスフィナンシャルサービスフィナンシャルサービス: 松井証券松井証券松井証券松井証券– オンライン・トレーディングシステム全てをJavaで構築

www.coreservlets.com

ビジネスにおけるビジネスにおけるビジネスにおけるビジネスにおける Java の導入の導入の導入の導入

• フィナンシャルサービスフィナンシャルサービスフィナンシャルサービスフィナンシャルサービス:NASDAQ – 多くの市場分析ツールは Java Swing やアプレットで作成

Page 29: Java: ソフトウェア革 命 - Core Servletscourses.coreservlets.com/.../Java-for-Managers-Japanese.pdfAWT (Java 1.0 and 1.1) は力不足だったが、JFC/Swing (Java 2) はよ

www.coreservlets.com

ビジネスにおけるビジネスにおけるビジネスにおけるビジネスにおける Java の導入の導入の導入の導入

• WashingtonPost.com– カスタマイズ化されたオンライン新聞

www.coreservlets.com

ビジネスにおけるビジネスにおけるビジネスにおけるビジネスにおける Java の導入の導入の導入の導入

• ユナイテッド航空ユナイテッド航空ユナイテッド航空ユナイテッド航空– ユナイテッド航空にとって情報は命です。お客様、地上要員、ゲート要員、添乗員、操縦士、オペレーションチーム、管理チームなどがそれぞれの役割のニーズに合わせて、一刻を争うクリティカルなデータを、カスタマイズしています。Java アプリケーションサーバであるBEAにより、必要な情報が必要な時に正しい人に渡ります。技術革新は、ユナイテッド航空の成功の元であり、これからの成功の鍵でもあります

Page 30: Java: ソフトウェア革 命 - Core Servletscourses.coreservlets.com/.../Java-for-Managers-Japanese.pdfAWT (Java 1.0 and 1.1) は力不足だったが、JFC/Swing (Java 2) はよ

www.coreservlets.com

ビジネスにおけるビジネスにおけるビジネスにおけるビジネスにおける Java の導入の導入の導入の導入

• Visa– Java アプリケーションサーバ上にトランザクションシステムを構築

www.coreservlets.com

ビジネスにおけるビジネスにおけるビジネスにおけるビジネスにおける Java の導入の導入の導入の導入

• オンライン・バンキングオンライン・バンキングオンライン・バンキングオンライン・バンキング– 米国インターネット・バンキング・システム大手、世界中のその他のシステム

Page 31: Java: ソフトウェア革 命 - Core Servletscourses.coreservlets.com/.../Java-for-Managers-Japanese.pdfAWT (Java 1.0 and 1.1) は力不足だったが、JFC/Swing (Java 2) はよ

www.coreservlets.com

ビジネスにおけるビジネスにおけるビジネスにおけるビジネスにおける Java の導入の導入の導入の導入

• International Children's Digital Library– アプレットを使用するインタラクティブな本

www.coreservlets.com

ビジネスにおけるビジネスにおけるビジネスにおけるビジネスにおける Java の導入の導入の導入の導入

• Jeppesen/Boeing– 航空コミュニティーに対するリアルタイムなオンライン情報をサーブレットとJSP を使用して提供。

Page 32: Java: ソフトウェア革 命 - Core Servletscourses.coreservlets.com/.../Java-for-Managers-Japanese.pdfAWT (Java 1.0 and 1.1) は力不足だったが、JFC/Swing (Java 2) はよ

www.coreservlets.com

ビジネスにおけるビジネスにおけるビジネスにおけるビジネスにおける Java の導入の導入の導入の導入

• Nextel (およびその他多くの電話会社およびその他多くの電話会社およびその他多くの電話会社およびその他多くの電話会社)– Java 対応携帯電話

www.coreservlets.com

ビジネスにおけるビジネスにおけるビジネスにおけるビジネスにおける Java の導入の導入の導入の導入

• NexaWeb– システム管理コンソール:

Java GUI、サーバサイド Java, Java による XMLのパーシング

Page 33: Java: ソフトウェア革 命 - Core Servletscourses.coreservlets.com/.../Java-for-Managers-Japanese.pdfAWT (Java 1.0 and 1.1) は力不足だったが、JFC/Swing (Java 2) はよ

www.coreservlets.com

ビジネスにおけるビジネスにおけるビジネスにおけるビジネスにおける Java の導入の導入の導入の導入

• エンターテイメント業界エンターテイメント業界エンターテイメント業界エンターテイメント業界– Java を使用した Web サイト、ネットワーキング、ポータブル機器

www.coreservlets.com

ビジネスにおけるビジネスにおけるビジネスにおけるビジネスにおける Java の導入の導入の導入の導入

• ワイヤレスサービスワイヤレスサービスワイヤレスサービスワイヤレスサービス

Page 34: Java: ソフトウェア革 命 - Core Servletscourses.coreservlets.com/.../Java-for-Managers-Japanese.pdfAWT (Java 1.0 and 1.1) は力不足だったが、JFC/Swing (Java 2) はよ

www.coreservlets.com

ビジネスにおけるビジネスにおけるビジネスにおけるビジネスにおける Java の導入の導入の導入の導入

• 大学の統合システム大学の統合システム大学の統合システム大学の統合システム

www.coreservlets.com

まとめまとめまとめまとめ

• Java ((((Javaスクリプトではない!)は、以下スクリプトではない!)は、以下スクリプトではない!)は、以下スクリプトではない!)は、以下ををををサポートする完全な言語サポートする完全な言語サポートする完全な言語サポートする完全な言語:– Web で使用可能な Java プログラム (アプレット)

– デスクトップ Java プログラム– サーバサイドJavaプログラム (servlets, JSP)

• Java はバイトコードにコンパイルされ、はバイトコードにコンパイルされ、はバイトコードにコンパイルされ、はバイトコードにコンパイルされ、Java 仮想マシンをサポートするプラットフォームで仮想マシンをサポートするプラットフォームで仮想マシンをサポートするプラットフォームで仮想マシンをサポートするプラットフォームであればあればあればあればどこでも動作するどこでも動作するどこでも動作するどこでも動作する

• Java 2 Platform はははは3種類ある種類ある種類ある種類ある: – Standard Edition

Enterprise Edition

Page 35: Java: ソフトウェア革 命 - Core Servletscourses.coreservlets.com/.../Java-for-Managers-Japanese.pdfAWT (Java 1.0 and 1.1) は力不足だったが、JFC/Swing (Java 2) はよ

www.coreservlets.com

カサレアルカサレアルカサレアルカサレアル Server Side Java 実践講座実践講座実践講座実践講座

EJB、、、、Struts コース紹介コース紹介コース紹介コース紹介

現実的なカリキュラム、実践で即役立つ演習現実的なカリキュラム、実践で即役立つ演習現実的なカリキュラム、実践で即役立つ演習現実的なカリキュラム、実践で即役立つ演習詳細は詳細は詳細は詳細は www.casareal.co.jp !!!!

Struts コースコースコースコース•Strutsフレームワークのアーキテクチャー、動作原理、開発方フレームワークのアーキテクチャー、動作原理、開発方フレームワークのアーキテクチャー、動作原理、開発方フレームワークのアーキテクチャー、動作原理、開発方法についての解説。法についての解説。法についての解説。法についての解説。

•商用サイトでも多く利用されているオープンソースの商用サイトでも多く利用されているオープンソースの商用サイトでも多く利用されているオープンソースの商用サイトでも多く利用されているオープンソースのStruts、、、、Tomcat、、、、PostgreSQLを使用!を使用!を使用!を使用!

EJB コースコースコースコース•EJB を利用するを利用するを利用するを利用する Web サイト開発時に、サーブレット、サイト開発時に、サーブレット、サイト開発時に、サーブレット、サイト開発時に、サーブレット、JSP、、、、EJBを 適に活用するを 適に活用するを 適に活用するを 適に活用するWebサイトシステムの設計を解説。サイトシステムの設計を解説。サイトシステムの設計を解説。サイトシステムの設計を解説。

•実開発で必須のアプリケーションサーバ、実開発で必須のアプリケーションサーバ、実開発で必須のアプリケーションサーバ、実開発で必須のアプリケーションサーバ、DBを利用する演習を利用する演習を利用する演習を利用する演習!!!!

© 2003 Marty Hall, http://www.coreservlets.com

Q&A