[???] /
[Java FAQ] / [S000]
S000: Java とは何ですか?
[S000 Q-01]
Java とは何ですか ?
[S000 A-01]
Sun Microsystemsが提唱した汎用プログラミング言語です。
以下のような特徴を挙げることができます。
・プラットフォーム非依存
Windowsで作ったプログラムが携帯電話上で動きます。
・セキュリティ
例えばインターネットからダウンロードしたアプレットがローカルにあるファイルを
勝手に削除することなどを禁止する機能が用意されています。
・マルチスレッド
音をならしがら絵を動かすといったプログラムが比較的簡単に記述できます。
・ネットワーク
例えば、メールのクライアントプログラムなどを簡単に作成できます。
・国際化フレームワーク
例えば、日本語と英語など多国語に対応したプログラムを簡単に作成できます。
[S000 Q-02]
Java の由来は?
[S000 A-02]
謎につつまれています。
Java は当初 Green プロジェクトがビデオ、テレビ、照明、電話などを制御する
ユーザインタフェースのために開発した言語で、Oak と名付けられていました。
Oak というのはこの名前を付けた James Gosling 氏のオフィスの窓から見える
大きな樫の木が由来となっています。
ところが、公開間際になって Oak がすでに他のプログラミング言語に付けられた
名前であることが判明し、コーヒーに関係する Java という名前になりました。
なぜ、Java なのかについては、開発チームがよく行くカフェの店員が
"It's a jungle out there, So drink your Java" と書かれている T シャツを
着ていた、Sun Microsystems社の近くに Oak Street と Java Street があった、
後に Marimba を設立したキム・ポレーゼがマーケティング的に響きの良い
インパクトのある語句を選んだなど、さまざまな説があり謎につつまれています。
Java 誕生に至る経緯については以下の URL を参照してください。
http://www.hotwired.co.jp/wiredmagazine/2.03/java.html
[S000 Q-03]
JRE と JDK はどう違うのですか?
[S000 A-03]
JRE, JDK はそれぞれ Java Runtime Environment, Java Development Kit の略で、
前者は、JDK をベースに作られた Java のプログラムを実行する際に必要になる JVMと
クラスライブラリのパッケージで、後者は、開発者向けのコンパイラなどのツールと
クラスライブラリのパッケージです。
Java 2以降では、JDKをSDK(Software Development Kit)と呼ぶようになりました。
SDKにはJREが含まれているので、SDKを導入した開発者は別途JREを入手して導入する
必要はありません。
また、JRE は自分の作成したアプリケーションと共に再配布することが可能です。
[S000 Q-04]
Core API と Extension API とは何ですか?
[S000 A-04]
両方とも Java で標準的に規定されている API です。
Java 2 SDK (あるいは JDK, JRE) に標準で含まれている API を Core API と
言います。Core API に含まれていない API群 を Standard Extensions (一般に
Extension API) と呼びますが、通常 javax で始めるパッケージ名が付けら
れています。ただし、javax.swing、javax.accessibility などいくつかの
パッケージはCore APIに含まれています。Core APIに含まれる API は JDK(SDK) の
バージョンによって違いますので以下の URL を参照してください。また、
Extension API は Optional Packages と呼ばれるようになりました。これは、
Java 2 SDK (JDK, JRE) に含まれていませんので、使用するには別途ダウン
ロードしなくてはいけません。同じく、以下の URL を参照してください。
JDK1.2: http://java.sun.com/products/jdk/1.2/ja/docs/ja/api/index.html
JDK1.3: http://java.sun.com/j2se/1.3/ja/docs/ja/api/index.html
Extension: http://java.sun.com/products/OV_stdExt.html
[S000 Q-05]
J2SE、J2ME、J2EE とは?
[S000 A-05]
Java言語を用いたシステムで使用できるAPIセットなどを用途別に規定した規格の種類です。
Java 2 プラットフォームは、携帯機器などの組み込み向けの J2ME、
クライアントアプリケーション向けの J2SE、そしてサーバサイド向けの J2EE と
わかれています。
J2SE(Java 2 Platform, Standard Edition)は、Java Core API と Java RMI、CORBA API、
Java Accessibility API、Swing などで構成され、パソコンなどのデスクトップ環境向けです。
(参考)
http://java.sun.com/j2se/
J2ME(Java 2 Platform, Micro Edition)は、J2ME Core API をベースに、
ネットワーク常時接続向けのCDC(Connected Device Configuration)や、
携帯電話のような携帯型ネットワーク情報機器向けCLDC(Connected, Limited Device Configuration)で
構成され、パソコンに比べ、少ないメモリ、低速なCPU、小さな画面、といった
限られたリソース上で動くことが要求されます。
CDC には Personal Profile、CLDC には、携帯電話向けのMIDP(Mobile Information Device Profile)
などがあります。
(参考)
http://java.sun.com/j2me/
J2EE(Java 2 Enterprise Edition)は J2SE をベースに、Java Servlet、
JSP(JavaServer Pages)、EJB(Enterprise JavaBeans)などで構成され、
企業の基幹システムなど、いわゆるエンタープライズシステム環境向けです。
(参考)
http://java.sun.com/j2ee/
[S000 Q-06]
Java の Version の違いとは?
[S000 A-06]
Java の Version の変遷は以下のようになっています。
+----------+------------+
|HotJava |α 〜 beta2|
+----------+------------+
|JDK |1.0 〜 1.1.8|
+----------+------------+
|Java 2 SDK|1.2 〜 1.3 |
+----------+------------+
各バージョンの違いはJDK付属のドキュメントに記述されていますので一読してください。
制約がない限り最新のバージョンを使用しましょう。
ただし、ミドルウェアや OS により使用できるバージョンが異なるので、注意が必要です。
ブラウザ上でアプレットを動かす場合は、ブラウザがサポートしているバージョンや
APIに差がありますので注意してください。
アプレットを動かす JDK のバージョンを明確に決定したい場合には、Java Plug-in を
使う方法もあります。
Java Plug-in については S000-07 を参照してください。
[S000 Q-07]
Java Plug-in とは?
[S000 A-07]
ブラウザ外部の Java VM を利用して、Java プログラムをブラウザ上で実行するプラグインです。
ブラウザ組み込みの Java VM ではなく、外部の Java VM で実行されるため、プログラムの 挙動が
ブラウザの種類やバージョンに依存しません。詳しくはコラムを参照してください。
***コラム******************************************************************************
Internet ExplorerやNetscape Navigatorには、そのブラウザのベンダが開発したJava VMが
組み込まれていますが、残念なことに、様々な経緯によって、それらは大変古いバージョンの
Javaに準拠したもののままとなっています。
Internet Explorerに組み込まれている 「Microsoft VM for Java」はJDK 1.1.4相当ですし、
Netscape Navigatorに組み込まれているものはJDK 1.1相当です。
そのため、SwingなどJava 2の機能を使用したアプレットは、 これらのブラウザでは
そのままでは動作しません。
そこで考え出されたのがJava Plug-inです。FlashプラグインやQuickTimeプラグイン等と
同様に、Webブラウザのプラグイン機能を利用して、外部のJava VMをブラウザに組み込む
ものです。これによって、常に最新のJava VMをWebブラウザで使用できるようになります。
ただしJava Plug-inの普及には二つの障害がありました。一つは、アプレットのユーザが
Java VM を自分でダウンロードしてインストールしなくてはならないという点、もう一つは、
Java Plug-in版の Java VMでアプレットを起動させるには、<APPLET>タグではなく、
プラグイン用の<OBJECT>タグ(IEの場合) または<EMBED>タグ(Netscapeの場合)を
使ってHTMLを書いておかねばならない (「HTMLConverter」を使ってタグを置き換える必要がある)
という点です。
しかし最近この障害は取り除かれつつあります。Netscapeの最新版である「Netscape 6」では、
ブラウザのインストール時にJava Plug-in版のJava VMがインストールされるようになり、
<APPLET>タグでJava Plug-in版のJava VMを使用できるようになりました。
Mac OS版のInternet Explorerでは、既に数年前から、Apple Computerが提供するMRJ (Mac OS
Runtime for Java) を組み込んで使えるようになっており、ブラウザとJava VMは自由に組み
合わせられるのが主流となりつつあります。
ただ、Windows版のInterent Explorerについてだけはそうした改善の兆しがありません。
しかし、幸いなことに、木村昌俊氏によって開発された、「Java VM Selector for IE」(※)を
インストールすることで、通常の<APPLET>タグでJava Plug-inのJava VMを起動できるように
なります。
※: Java VM Selector for IE
http://homepage1.nifty.com/emk/vmselect.html
****************************************************************************************
[S000 Q-08]
クライアント側で動作する Java と、サーバ側で動作する Java は、どう違うのですか?
[S000 A-08]
利用する API が違うだけで、基本的には同じです。
ネットワークを介した通信が行われるときにクライアントとサーバの関係が
生じます。一般にサーバとは常時待機し、アクセス要求に対してなんらかの
サービスを提供するもので、クライアントはそのサービスの利用者です。
Java はネットワークや通信を扱う機能が充実した言語で、一般的なソケットに
よる通信(*注1) や Java 言語に特化された通信(*注2)方法が使えます。
クライアント側で動作する Java とはこれらの通信方法でサーバにアクセスする
もので、ブラウザ上で動作するコンポーネントであるアプレットの場合と、単独で
動作するJava アプリケーションの場合があります。
サーバ側で動作する Java は同様にこれらの通信方法でサービスを提供するもの
ですが、サーブレット、JSP(JavaServer Pages)、EJB(Enterprise JavaBeans)、
RMI サーバ、データベースやFTP などなんらかの従来型サービスを提供するJava
アプリケーションというように様々な種類があります。
J2EE(Java 2 Platform, Enterprise Edition) ではクライアント層、Web 層、
EJB層、EIS(Enterprise Information System:データベースや従来の
アプリケーション)層の 4層からなる多層モデルを設定していて、
中間層であるWeb, EJB とバックエンド層である EIS がサーバ側と位置付け
られます。"サーバサイド Java" という言い方をされるとき、 普通はWeb 層で動作
するサーブレットや、JSP、EJB 層で動作する EJB を指しています。
(*注1) TCP/IP や UDP/IP。 HTTP もここに含まれます。
(*注2) RMI (Remote Method Invocation), JMS (Java Message Service)や
CORBA(Common Object Request Broker Architecture) オブジェクトと
通信するための IIOP(Internet Inter-Orb Protocol)があります。
[S000 Q-09]
Java アプレット って何ですか?
[S000 A-09]
HTML に組み込まれる Java プログラムです。
アプレットはブラウザに組み込まれた JavaVM や Plug-in で起動される JavaVM もしく
は appletviewer などで実行されます。ネットワークからダウンロードして実行するのに
適した特徴を持っています。例えば、 すこしでも危険があると思われる動作はあらかじ
め制限されています。Signed Applet とよばれる証明書付のアプレットを作ることで制限
を緩めることもできます。
[S000 Q-10]
Java サーブレット って何ですか?
[S000 A-10]
Web サーバと連携して動作し、動的なコンテンツの作成や、データ処理を行う
Java プログラムです。
サーブレットはクライアントからの要求を受けて処理し、結果を返します。
乱暴な言い方をすると CGI のようなことができる Java プログラムですが、
CGI プログラムと異なり、以下のような特徴があります。
・サーブレットはサーブレットコンテナと呼ばれるプログラムの上で動作する
・複数のリクエストに対してプロセスを生成せず、スレッドを生成する
・サーブレットインスタンスをコンテナ内に常駐する
・セッション管理を行う機構がある
[S000 Q-11]
JSP(JavaServer Pages)って何ですか?
[S000 A-11]
HTMLにプログラムを埋めこむだけで、サーブレットとして動かすことができる機構です。
HTML に JSP タグや、スクリプトレットと言われる Java プログラムの断片を埋め込む
ことにより動的なページ生成を実現します。
HTML + JSP タグ + スクリプトレットは JSP ページと呼ばれ、ブラウザからのリクエスト時に
サーブレットコンテナにより自動的にサーブレットに変換され、実行されます。
HTML をベースにしているためWebデザインが容易に行えます。
JSP の仕様については以下の URL を参照してください。
JSP: http://java.sun.com/products/jsp/
[S000 Q-12]
EJB(Enterprise JavaBeans)って何ですか?
[S000 A-12]
サーバアプリケーションを構成する部品をどのように構築するかを定めた仕様を指します。
この仕様を満す部品は、多くの場合ビジネスロジックを記述するコンポーネントで、
Java 2 Platform, Enterprise Edition(J2EE) 準拠のアプリケーションサーバならば、
そのまま動作させることができます。現在の仕様はバージョン 1.1ですが、
既にバージョン 2.0の最終ドラフト版が公表されています。
以下のページを参照して下さい。
http://java.sun.com/products/ejb/2.0.html
[S000 Q-13]
JavaBeans って何ですか?
[S000 A-13]
Java言語を使って作成したソフトウエアコンポーネントの総称です。
JavaBeansの仕様に従って作成したコンポーネントをIDE(統合開発環境)
等のツールにインポートすることによって、部品を組み合わせる感覚で
ソフトウエアを作成することができます。
詳しくは以下のページを参照して下さい。
http://java.sun.com/beans/
[S000 Q-14]
JavaScript と Java は違うのですか?
[S000 A-14]
はい、違います。
JavaScript とは、本書の対象としている「Java」とは全く別のもので、HTML中に記述する
タイプのスクリプト言語です。ブラウザ上でちょっとしたデータ処理や、
イベントに対応する処理を自動的に行ったりするためのものです。
[S000 Q-15]
Java VM(JVM)って何ですか?
[S000 A-15]
Java のバイトコードを解釈し、実行するインタプリタです。
Java のソースコードはコンパイラによりバイトコードに変換されます。
バイトコードは OS に依存しませんがこれを実行するための
JavaVM は各 OS 専用のものが必要になります。
[S000 Q-16]
Java API って何ですか?
[S000 A-16]
アプリーションをプログラミングするときに利用可能な、クラスやインタフェースとそ
の仕様の総称です。
例えば、java.util.Vector などを含む CoreAPI や javax.servlet.http.HttpServlet な
どの ExtensionAPI があります。
CoreAPI や ExtensionAPI に関しては S000-04 を参照してください。
contributor: Yoko Kamei Harada, Tsuyoshi Tsuhtan Sato,
NISHIMOTO Keisuke, Ryuji Hattori, Mamo, miyazaki, markn
コメントの送り先 Java FAQ BBS