JSPを使うことのメリットとデメリット


サーブレットは、サーバーサイドJavaの最も基本的な技術として知られている。Tomcatなどのサーブレットコンテナは、WEBブラウザなどのクライアントからHTTPプロトコルで送信されてくるメッセージをオブジェクトとして受け取り、必要な処理を行い、結果をクライアントにオブジェクトとして返す。これがサーブレットの基本的な仕組みになる。

JSPは、HTMLの中にプログラムを埋め込んで使うための仕組みといえる。クライアントからの最初のアクセスがあったとき、サーブレットコンテナによってJSPのソースはサーブレットのプログラムに変換後コンパイルされる。2回目以降のアクセスでは、予めコンパイル済みのコードが高速実行され、結果をブラウザに送信する。

JSPとサーブレットは実行結果としては同じものをブラウザに送信する。JSPの根本的な役割りは「サーブレットから表示ロジックを分離すること」にある。JSP側に表示ロジックが分離されることで、サーブレットにはサーバーサイドの制御処理を専ら記述することになる。

JSPについては、デザイナーとプログラマの分業に問題を発生させるという意見もある。JSPを使わない場合、デザイナーが納品するファイルは、HTMLとCSSの組み合わせになる。JSPを使う場合、HTMLとCSSのデザインを一切変更せずにJSPに変換する作業がデザイナーやプログラマに要求される。JSPを使うことのメリットとデメリットを管理者が見極めなければ、デザイナーやプログラマの負担が増えることになる。

 


Javaによるスレッドのスケジューリング


CPUの数がスレッドの数よりも少ない環境では、スレッドを切り替えながら処理を進めることになる。CPUが1つでスレッドが3本あるときは、3本のスレッドのうちの1本が選ばれて実行されることになる。スレッドのスケジューリングについて、Javaの仕様では細かく規定されておらず、プログラムからも細かく指定することは出来ない。スレッドがどのようにスケジューリングされても正常に動くようにコーディングする必要がある。

プログラムからスケジューリングに関して指定できるのは、「優先度」と「切り替え」の2つになる。用意されている関数と定数は次のようになる。

Thread.MIN_PRIORITY: 最低の優先度

Thread.NORM_PRIORITY: 通常の優先度

Thread.MAX_PRIORITY: 最高の優先度

getPriority() : 優先度の取得

setPriority(): 優先度の設定

yield(): スレッドの切り替え

優先度の高いスレッドは、他のスレッドよりも多く実行される一方、同じ優先度のスレッドがそれぞれ同じ程度に実行される保障はない。yield()は、他に実行可能なスレッドがある場合のみ、実行スレッドを切り替える。同じ優先度のスレッドがそれぞれ同じ程度に実行されるようにするためには、プログラムでyield()を呼び出してスレッドを切り替えなければならない。

 


オブジェクト指向言語、JavaとC++を比較する


オブジェクト指向言語といわれる、JavaとC++を比較すると次のようになる。

1:Javaは、C++の構文を流用しているため、括弧やセミコロンの使用など言語構造がよく似ている。

2:Javaは、「言語仕様を小さくまとめて、ライブラリで機能を拡張する」というC++の思想を継承している。

3:Javaは、セキュリティを重視している。一方、C++はセキュリティに配慮していない。

4:Javaは、実行スピードを犠牲にして、マルチプラットフォームに対応している。一方、C++は、実行スピードは高速ながら、マルチプラットフォームに対応していない(Javaは、初回実行時はバイトコードをネイティブコードにコンパイルしているため遅いが、2回目以降は直接ネイティブコードを高速実行する)。

Javaのセキュリティや保守に関する機能は次のようになる。

1:Javaは、危険で悪質なコード、ウィルス、トロイの木馬を防御するために幾重もの保護層を構築している。Javaの仮想マシンは、コードを実行するまえに、コードの安全性を検証する。

2:Javaでは、例外が発生すると、あらかじめ指定されたキャッチャーに制御が移る。例外情報を含んだオブジェクトは、引数やリターン値と同じ重要度で扱われる。プログラマが正確な例外処理を実装することにより、システムの保守性が向上する。

 


オブジェクト指向言語の便利な特性、多相性(ポリモーフィズム)


オブジェクト指向言語の便利な特性に多相性(ポリモーフィズム)がある。ポリモーフィズムとは、オブジェクトが複数の型に所属可能な性質のことをいう。例えば、インターフェース型の配列に各種実装クラスのオブジェクトを代入することによって、各オブジェクト特有の振舞いを簡単に選択できるようになる。

JAVAコードで実例をしめすと次のようになる。

public class Polymorphism{

public static void main(String[] args){

Robot[] robotArray = new Robot[5];
robotArray[0] = new Gundam();
robotArray[1] = new MazingerZ();
robotArray[2] = new Reideen();
robotArray[3] = new GetterRobo();
robotArray[4] = new SteelJeeg();

while(true){
try{
Thread.sleep(3000); //3秒Sleep
}catch(Exception e){
e.printStackTrace();
}
int randomInt = (int)(Math.random()*5);
System.out.println(robotArray[randomInt].attack());
}
}
}

interface Robot{
public String attack();
}

class Gundam implements Robot{

public String attack(){
return “Beam rifle”;
}

}

class MazingerZ implements Robot{

public String attack(){
return “Rocket punch”;
}

}

class Reideen implements Robot{

public String attack(){
return “God bird”;
}

}

class GetterRobo implements Robot{

public String attack(){
return “Getter Beam”;
}

}

class SteelJeeg implements Robot{

public String attack(){
return “Jeeg crusher”;
}

}

Polymorphismresult