今までも度々やらかしたけど、今回はほぼ全編、他サイトからの抜粋ダギャー。
1.Tomcat
・JSPやJavaサーブレットを処理するアプリケーションサーバ
http://open-groove.net/tomcat/difference-tomcat-jboss/
・サーブレットは、「サーブレットコンテナ」または「サーブレットエンジン」と呼ばれる特殊なWebサーバ上で動作する。またHTMLの中にサーブレットを埋め込む技術であるJSPも、サーブレットコンテナが無ければ実行できない。Tomcatもこのサーブレットコンテナの中の1つ。
http://thinkit.co.jp/free/article/0708/2/1/
・Tomcatは単独でWebサーバとして動作することも可能だが、ApacheやIISのプラグインとして動作できるようになっており、実際にはプラグインとしての利用が主流
http://open-groove.net/tomcat/difference-tomcat-jboss/
2.ASP.NET
Windowsサーバにおける標準的なサーバ・サイド技術
http://www.atmarkit.co.jp/fdotnet/aspmigrt/aspmigrt01/aspmigrt01_01.html
3.PHP
JavaやC++と比べ、簡易でコンパクトなコードを書くことができ、軽量Webアプリケーション開発に適する
http://www-06.ibm.com/software/jp/websphere/smash/php.html
4.EJB (Enterprise JavaBeans)
・J2EEで定義されたエンタープライズ向けの機能を備えたBean管理のための仕組み。
・プログラムをコンポーネント化し、効率良く大規模なWebアプリケーションを構築するためのアーキテクチャ。
http://www.itmedia.co.jp/enterprise/0401/30/epn11.html#1
8.LAMP
人気の高いオープンソースソフトの組み合わせ。OSにLinux、WebサーバにApache、データベースにMySQL、プログラミングにPHPかPerlかPythonを用いたシステムのこと。それぞれの分野での定番といえるソフトの組み合わせである。データベースにPostgreSQLを使う組み合わせはLAPPという。
参照元:e-word
→就職求人情報でもLAMP案件は多いのでメジャーかも。サーブレットより手軽、同じくらい軽快らしい?
(6)サーブレットの注意点
(1)サーブレットコンテナの役割
11.国内シェア上位のWebアプリケーションサーバ
(1)WebSphere(IBM)
Java(J2EE)アプリケーションサーバーであるWASと、周辺のサーバー群(Commerce、Portal、ESBなど)。
(2)Interstage(富士通)
Java、Java EE、SOAP、UDDI、RosettaNet、ebXML、UMLといった各種標準技術に準じている。 製品内に、Apache HTTP Server、Tomcat、Eclipseといった標準的なオープンソースソフトウェアをライセンスに基づき企業用途向けに修正して利用している。
(3)Cosminexus(日立)
(4)WebLogic(BEA)
12.なんちゃって総括
Tomcatはサーブレット用アプリケーションサーバ。サーブレットはエンタープライズなWebサービス用。 小規模公開サーバはLAMPサーバで建てる。
LAMPサーバは手軽で動作も軽い。
1.Tomcat
・JSPやJavaサーブレットを処理するアプリケーションサーバ
http://open-groove.net/tomcat/difference-tomcat-jboss/
・サーブレットは、「サーブレットコンテナ」または「サーブレットエンジン」と呼ばれる特殊なWebサーバ上で動作する。またHTMLの中にサーブレットを埋め込む技術であるJSPも、サーブレットコンテナが無ければ実行できない。Tomcatもこのサーブレットコンテナの中の1つ。
http://thinkit.co.jp/free/article/0708/2/1/
・Tomcatは単独でWebサーバとして動作することも可能だが、ApacheやIISのプラグインとして動作できるようになっており、実際にはプラグインとしての利用が主流
http://open-groove.net/tomcat/difference-tomcat-jboss/
2.ASP.NET
Windowsサーバにおける標準的なサーバ・サイド技術
http://www.atmarkit.co.jp/fdotnet/aspmigrt/aspmigrt01/aspmigrt01_01.html
3.PHP
JavaやC++と比べ、簡易でコンパクトなコードを書くことができ、軽量Webアプリケーション開発に適する
http://www-06.ibm.com/software/jp/websphere/smash/php.html
4.EJB (Enterprise JavaBeans)
・J2EEで定義されたエンタープライズ向けの機能を備えたBean管理のための仕組み。
・プログラムをコンポーネント化し、効率良く大規模なWebアプリケーションを構築するためのアーキテクチャ。
http://www.itmedia.co.jp/enterprise/0401/30/epn11.html#1
5.JavaEE (Java Platform, Enterprise Edition)
・JavaはエンタープライズでミッションクリティカルなWebアプリケーション開発に利用される。
・Javaの企業用機能セット。JavaSEの拡張機能の形で提供される。1998年に発表され、 主に大規模システム(サーバ用途)向けに、Javaサーブレット、JSP、EJB、JNDI、JTA、JMS、JavaMail、J2CA、およびXML関連のAPI (JAXP等)などの機能をセットにして提供するもの。
6.サーブレットとApatchのmod_PHPモジュールの比較
・サーブレットの方がmod_PHPよりも堅牢なWebアプリケーションを作成できる。
・サーブレットはmod_PHPやCGIと比較してメモリの消費量が大きい。(だからレンタルサーバの多くはServletをサポートしていない)
・サーブレットは、社内で使用する業務システムで、mod_PHPは、一般向けに公開するシステムという位置づけ?
7.Struts
・オープンソースのJava Webアプリケーションフレームワーク。
・当初はJakarta Projectに位置しており、Jakarta Strutsと呼ばれていた。
・2005年頃にはJava Webフレームワークのデファクトスタンダードと呼ばれるほどの普及したが、ソフトウェア技術の進歩とともに欠点も多く指摘されるようになり、2007年にリリースされたStruts2ではそれまでの仕組みを捨て、WebWork2として開発されていた別のフレームワークをベースとしたものへと置き換えられた。
参照元:Wikipedia"Struts"
・MVCというソフトウェア設計モデルに基づいており、JavaサーブレットやJSPを組み合わせてアプリケーションを構築する際に必要となる諸機能を提供する。
・一人で作ってしまうような小規模システムでは不要?
・JavaはエンタープライズでミッションクリティカルなWebアプリケーション開発に利用される。
・Javaの企業用機能セット。JavaSEの拡張機能の形で提供される。1998年に発表され、 主に大規模システム(サーバ用途)向けに、Javaサーブレット、JSP、EJB、JNDI、JTA、JMS、JavaMail、J2CA、およびXML関連のAPI (JAXP等)などの機能をセットにして提供するもの。
(Wikipedia"Java EE")
6.サーブレットとApatchのmod_PHPモジュールの比較
・サーブレットの方がmod_PHPよりも堅牢なWebアプリケーションを作成できる。
・サーブレットはmod_PHPやCGIと比較してメモリの消費量が大きい。(だからレンタルサーバの多くはServletをサポートしていない)
・Javaは結構しっかり書かないと動かないが、PHPはちょっと適当なところがあっても動いたりする?
・サーブレットの場合は、商用で使用するときは、データベースにOracleを使用する案件が多い?一方、mod_PHPの方は、MySQLが多い。レンタルサーバでデータベースにOracleを使用しているところはほとんどない?←調査中 ・サーブレットは、社内で使用する業務システムで、mod_PHPは、一般向けに公開するシステムという位置づけ?
・サーブレットは、classファイルを作成してwarやearファイルにしてアプリケーションサーバーにデプロイしないと実行でキないので
手間がかかる。一方、mod_PHPは、テキストエディタなどで編集すれば、ブラウザにアクセスして実行してすぐに確かめることができる手軽。
・サーブレットの方がmod_PHPよりが勉強することが多い
http://okwave.jp/qa/q5457318.html・サーブレットの方がmod_PHPよりが勉強することが多い
7.Struts
・オープンソースのJava Webアプリケーションフレームワーク。
・当初はJakarta Projectに位置しており、Jakarta Strutsと呼ばれていた。
・2005年頃にはJava Webフレームワークのデファクトスタンダードと呼ばれるほどの普及したが、ソフトウェア技術の進歩とともに欠点も多く指摘されるようになり、2007年にリリースされたStruts2ではそれまでの仕組みを捨て、WebWork2として開発されていた別のフレームワークをベースとしたものへと置き換えられた。
参照元:Wikipedia"Struts"
・MVCというソフトウェア設計モデルに基づいており、JavaサーブレットやJSPを組み合わせてアプリケーションを構築する際に必要となる諸機能を提供する。
・一人で作ってしまうような小規模システムでは不要?
8.LAMP
人気の高いオープンソースソフトの組み合わせ。OSにLinux、WebサーバにApache、データベースにMySQL、プログラミングにPHPかPerlかPythonを用いたシステムのこと。それぞれの分野での定番といえるソフトの組み合わせである。データベースにPostgreSQLを使う組み合わせはLAPPという。
参照元:e-word
→就職求人情報でもLAMP案件は多いのでメジャーかも。サーブレットより手軽、同じくらい軽快らしい?
(1)CGI
HTMLだけで情報がやり取りされていたインターネットに最初に登場したサーバサイド技術はCGI(Common Gateway Interface)。
BBS(掲示板)やアクセスカウンタなどはCGIで動くアプリケーション。
BBS(掲示板)やアクセスカウンタなどはCGIで動くアプリケーション。
CGIはリクエストを受け取ったWebサーバが他のプログラムを起動させ、そこで処理をさせた結果をクライアント(Webブラウザ)に返す仕組みの総称。
CGIは、正規表現を用いた文字列処理が得意なPerlやCなどで書かれることが多い。Javaでも書いてCGIの仕組みを使うことも可能。
CGI はいまや、サーバサイド技術の古典とも言える
CGI はいまや、サーバサイド技術の古典とも言える
(2)CGIの問題点
①大量のリクエストによりレスポンスが鈍化する
CGIではリクエストがあるたびに対応する外部プログラムが起動される。プロセスの起動は負荷が大きいため、大量のリクエストが発生した場合、極端に性能が落ちる場合がある。このような問題をスケーラビリティの難点という。
②セッション管理機能を持たない
HTTPには、リクエストとレスポンスという単位を超えて接続を維持する仕組みが存在しない。クライアントにレスポンスが返ればそれで終わ。HTTPでは、その後で同じクライアントが別のリクエストを出してもそれが同じクライアントのものからだと判別することができない。
そのため、HTTPのリクエストを外部プログラムに橋渡ししているCGIの仕組みでは、ユーザのログイン状態を管理するといった、一定時間の接続を同じクラインアントからのものと認識して、その状態(セッション)を保持する処理が行えない。
(3)ポストCGI技術
①CGIのスケーラビリティの難点の解決策
・ISAPI(Microsoft)
・ASP(Microsoft)
・NSAPI(Netscape Communications)
・FastCGI
・Apacheのmodモジュール ←PHPやRubyと組み合わせて開発されるやつ
・ISAPI(Microsoft)
・ASP(Microsoft)
・NSAPI(Netscape Communications)
・FastCGI
・Apacheのmodモジュール ←PHPやRubyと組み合わせて開発されるやつ
②セッション管理の解決策
・Cookie(Netscape Communicationsが始めたが今では業界標準)
CookieはWebサイトを訪れた際に、クライアント側に情報を保存させておき、次回接続時にそれを参照してクライアントを認識させる仕組み。Cookieを用いることで、CGIやその他のポストCGI技術でもセッション管理が可能となった。
・Cookie(Netscape Communicationsが始めたが今では業界標準)
CookieはWebサイトを訪れた際に、クライアント側に情報を保存させておき、次回接続時にそれを参照してクライアントを認識させる仕組み。Cookieを用いることで、CGIやその他のポストCGI技術でもセッション管理が可能となった。
※Cookieの問題点:Cookieはクライアント側でON/OFFを設定、または削除が可能な上に、現在新たなWebブラウジングの標準になりつつある携帯電話のWebブラウザによってはサポートされていない場合がある。
(4)サーブレット
SunはこれらポストCGI技術の展開を踏まえつつ、Webサーバ上で動作するJavaプログラムであるサーブレットを開発した。サーブレットを利用したWebアプリケーションの強みは、オブジェクト指向による効率的なシステム構築を行うことができること。Javaの部品化技術や再利用性の高いプログラムは、大規模システムの開発や、修正を繰り返しながら長期間使い続けられるシステムの開発に特に効果を発揮する。
サーブレットでは先に述べたCGIの課題を下記のように対処している。
サーブレットでは先に述べたCGIの課題を下記のように対処している。
①スケーラビリティの改善
起動負荷の大きいプロセスは1つだけ起動しておき、リクエストはプロセス内部のスレッドというプロセスよりも負荷の小さい単位で処理する。複数のリクエストには複数のスレッドを起動させて対処し、プロセスは常に1つで、このプロセスのリソースをスレッド間で共有することで、パフォーマンスの改善がはかられている。(マルチスレッドモデル)
マルチスレッドモデルにより、CGIと比べて処理効率を大幅に上げた。サーブレットは一度サーバーでロードされると、プログラムがスレッドとして起動する。CGIのようにリクエストのたびにプロセスを起動する必要がないため動作が高速となる。
②セッション管理が可能
サーブレットはCookieを利用したセッション管理を行うことができる。さらに、Cookieが利用できない場合には、URLにセッションIDを埋め込むことによってよってセッション管理を行いう。サーブレットは、通常のWebアプリケーションだけでなく、携帯電話向けのWebアプリケーション開発でも威力を発揮する。
(5)JSP
サーブレットは、処理のパフォーマンスではCGIより進歩しているが、Webページを実際に構築するHTMLの記述に不向。
サーブレットはJavaのソースコードに直接HTMLのタグを組み込むため、開発効率が悪いこと。ざっと挙げても以下のような問題点がある。
・画面のレイアウトを確認しながらの開発ができない
・HTML処理がソースコードに組み込まれているため、ページのテキストを書き換える度に再コンパイルが必要となり、簡単なHTMLの修正も容易にできなくなる
・HTML処理がソースコードに組み込まれているため、ページのテキストを書き換える度に再コンパイルが必要となり、簡単なHTMLの修正も容易にできなくなる
・本来デザイナーの仕事である画面デザインの役割をプログラマが担うことになる
上記の問題点を解決するための技術がJSP。JSPではHTMLの中に"サーブレットなJavaプログラム"を埋め込むことができる。
JSPは逐一コンパイルする必要がなく、開発者は自分が書いたコードを簡単にビジュアルとして確かめることができる。
(6)サーブレットの注意点
①サーバのリソースを常に消費する
サーブレットはCGIと違い、リクエストに対する処理が終了した後も、プロセスを起動し続けながらリクエストを待つので、サーバのリソースを無駄に消費しているともいえる。これはサーバのリソースが限られる環境では問題になる。←だから、Apatchとは別のアプリケーションサーバ機を一台建てる?
②複数のスレッドが競合する可能性がある
1つのリクエストに対して1つのプロセスが起動されるCGIでは、メモリ空間やファイルといったリソースも別々に確保されます。しかしサーブレットでは1つのプロセスが持つリソースを複数のスレッドで共有している。そのため複数のスレッドでリソースの競合や干渉が起きてしまう危険性をはらむ。サーブレットプログラムでは、スレッドセーフなコードを書くように注意する必要がある。
※サーブレットには上記ような注意点も存在するが、それを補って余りある利点が認められ、特に大中規模Webアプリケーションの開発に広く利用されている。
10.サーブレットの実行環境であるサーブレットコンテナ (参照元:http://thinkit.co.jp/free/article/0708/2/1/)
(1)サーブレットコンテナの役割
サーブレットの仕組みの特徴は、Webサーバ外部のプログラムとして呼び出されるのではなく、Webサーバと連携して動作するサーブレットコンテナというモジュール上で実行される点にある。
①サーブレットの実行環境を提供
通常のWebサーバにサーブレットプログラムを配置しただけでは、動作させることはできない。サーブレットコンテナは、サーブレットを動作させるために必要なモジュールである「Java Servlet API」を提供するとともに、サーブレットが動作するようにWebサーバを拡張する。
②ライフサイクルの管理
サーブレットコンテナは、サーブレットのインスタンスを作成してコンテナ上にロードした際、init()というメソッドを呼び出し、サーブレットの初期化を行う。サーブレットがコンテナ上にロードされるタイミングは、サーブレットがはじめて呼び出された時ロードする、あらかじめロードしておくなどサーブレットコンテナの設定によって異なる。
サーブレットでは初期化・破棄を一度しか行わないことで、複数のリクエストに対しても必要な処理だけを繰り返し実行させることができるため、パフォーマンス向上がはかられている。
サーブレットでは初期化・破棄を一度しか行わないことで、複数のリクエストに対しても必要な処理だけを繰り返し実行させることができるため、パフォーマンス向上がはかられている。
・サーブレットのロードと初期化:init()メソッド
サーブレットコンテナの主な役割に「サーブレットのライフサイクル管理」がある。サーブレットはjavax.servlet.Servletインターフェースを継承したJavaクラスでなければならない。Servletインターフェースはサーブレットのライフサイクルを定義してる。すなわちサーブレットが呼び出されてから破棄されるまでの動作があらかじめ決められている。
・サーブレットの実行:service()メソッド
サーブレットの初期化以降は、クライアントからリクエストがある度に「service()というメソッドを呼び出す。service()メソッドは、HTTPリクエストのタイプ(GET、POSTなど)を判別し、doGet()、doPost()といった適切なメソッドに渡す。これらのメソッドの実行が終了した後も、サーブレットはコンテナに常駐し、繰り返しリクエストを処理する。
・サーブレットの破棄:destroy()メソッド
管理ツールから指示があった場合など「destroy()」メソッドが呼び出されてインスタンスを破棄する。これによってinit()メソッドで取得したリソースなども開放される。その後、ガーベジコレクションされファイナライズされる。そのServletのインスタンスのservice()メソッドが再び実行されることはない。destroy()メソッドが呼び出されるタイミングはサーブレットコンテナの種類によって異なる場合がある。
③セッション管理
コンテナはCookieを通じてクライアントの識別を管理するが、クライアントのWebブラウザでCookieが無効なっていた場合は、URLを書き直してセッションを維持する。このCookieがONかOFFかの判別もコンテナは自動で行ってくれる。
④Webアプリケーションに必要なサービスの提供
コンテナは「初期化のパラメータを用意する」「データベースへの接続を可能にする」「多言語に対応したリソースをサーブレットが見つけて参照できるようにする」といった各種のサービスも提供する。
⑤JSPのコンパイル
コンテナはJSPが最初に呼ばれたときに、これを自動的にコンパイルしてサーブレットクラスに変換する。これはJSP APIによるものなので、厳密にはサーブレット技術とは区別されるが、一般にサーブレットコンテナの機能として扱われる。
11.国内シェア上位のWebアプリケーションサーバ
(1)WebSphere(IBM)
Java(J2EE)アプリケーションサーバーであるWASと、周辺のサーバー群(Commerce、Portal、ESBなど)。
(2)Interstage(富士通)
Java、Java EE、SOAP、UDDI、RosettaNet、ebXML、UMLといった各種標準技術に準じている。 製品内に、Apache HTTP Server、Tomcat、Eclipseといった標準的なオープンソースソフトウェアをライセンスに基づき企業用途向けに修正して利用している。
(3)Cosminexus(日立)
Apache HTTP Server、Tomcatといったオープンソースソフトウェアを元に独自の修正・制限や機能拡張を行い提供している また、これらの各種環境すべてに対して日立独自の拡張を施したJava仮想マシンを提供している。
(4)WebLogic(BEA)
J2EEアプリケーションサーバ
※シェア上位は全部サーブレットみたい
※シェア上位は全部サーブレットみたい
12.なんちゃって総括
Tomcatはサーブレット用アプリケーションサーバ。サーブレットはエンタープライズなWebサービス用。 小規模公開サーバはLAMPサーバで建てる。
LAMPサーバは手軽で動作も軽い。