今回はCGIとかサーブレット、JSPとかの話です。
どれもWebアプリケーションを成立させている仕組みのはなしです。

こういったことを聞きなれない人は単語一杯出てきると思いますが、裏側をちょっとのぞく的な意味で眺めてくれるとうれしいです


■CGIの誕生
前回までは、とりあえず
WWWができたよ!とかハイパーリンクってすごい!見たいな内容を書きました。

とはいえ、まだ今のところできることは固定されたHTMLを返すということだけでした。

もちろん十分すごいんですが、「アクセスするたび情報が書き換わったらおしゃれじゃない?」みたいなことを思いつく人がでてきました。
そこから誕生したのが「ちょっと動的な内容が表示できる仕組み」CGIでした。

昔よくあったのはアクセスカウンターですよね。
キリ番踏んだら~~文化は今ではもう廃れてしまいましたが懐かしい文化です。

アクセスカウンターとかだったら、トップページのHTTPリクエストがあったらサーバー側でカウントを増やして、戻してあげるHTMLにそのカウント数を埋め込んであげてHTMLを返してあげればいいわけです。


こんなイメージ

数は文字列だったり数字画像だったり色々な種類がありました。奇抜に光ってたり。。。

画期的に画面が変わるわけではないですが、結構あらかじめ作成したHTMLを返すだけの静的コンテンツと今回みたいに内容に応じて画面が変わる動的コンテンツでは難易度がだいぶ変わります。

プログラミングが必要になりますからね。
このときにはC言語とかPerlが使われることが多かったみたいです。
どちらも今でも有名なプログラミング言語ですね(Perlはたまに書いたりします)

さっきのはアクセスカウンターの例でしたが、
画面上部に昼だったら「こんにちは○○さん」、夜だったら「こんばんわ○○さん」見たく表示ができたりとか
簡単なチャットとかだったら多分CGIでかけますね。

簡単にチャット作るとこんな感じ

 

こんな感じで検索結果の表示とか色々動的になったことでWebブラウザ上に表示できることがひろがりました。


■サーブレットの誕生
こんな感じでCGIによって動的コンテンツが作成されるようになりましたが、ちょっと壁が出てきました。
・処理速度の問題
・大規模開発への問題

・処理速度の問題
速度に関しては、Requestが来るたびにプログラムを起動しているため、10人とかだと問題ないですがもっと複数アクセスが発生した場合に問題になったようです。


・大規模開発への問題
これは使っている言語の問題です。
まぁかけないこともないんですが、Perlって言語は大人数で開発するのに向いていない言語なわけです。
でも、ちょっと動的になるとあれもしたいこれもしたい!ということでだんだんと開発が大規模になってきます。

そんな流れで大規模開発に向いているオブジェクト指向型言語のJavaでWebアプリケーションを作成する流れになって行きます。

もともとJavaはWebアプリケーション用に作成された言語ではなかったのですが、サーブレットというWebアプリケーションをサポートする機能が提供されました。

このサーブレットが結構いけていてHTMLを作成するプログラム上でさっきの動的にHTMLを作成するということも行っていたり、CGIのようにプロセスを都度立ち上げる必要もありません。
大規模開発に向いているJavaがこんなサーブレットを手に入れたため主流がサーブレットになりました。


■JSPの誕生
時代は流れて、動的コンテンツができる様になって、大規模での開発も進んできました。

でもサーブレットは「Javaで全部HTMLを作成する」という流れです。
大げさに言うとJavaがかけないと画面のレイアウト変更とかできません。

とはいえだんだんと「かっこいいレイアウト」というのも求められてきます。Webデザイナーとか呼ばれる人たちですね。
この人たちはHTML(とCSS)のプロ(CGIとか、まぁJavaかけるひともいるとは思いますがメインはということで)です。
レイアウトのHTMLを変更したいのにJavaファイルを開かないといけません。

またソースコードでレイアウトも処理も書いているため、レイアウトを変更したい人と処理を修正したい人が居た場合2人で同じファイルをいじくることになり効率が悪いです。

そのため「Javaで全部HTMLを作成」するのではなく、「HTMLに一部Javaの値を埋め込む」というJSPが誕生しました。
こうすればデザインする人はHTMLだけいじればいいし、処理を書く人は思う存分Javaを書くという体制がとれるようになりました。

■現在の作成方法について
ココまで3パターン書きました。
ではどれが主流なのでしょうか。

といっても場合によりますよね。
CGIは大規模では向かないけど、ちょっとしたWebサイト作るのには向いています。
CGIは大抵のレンタルサーバーでサクッと動かすことができるので。

サーブレットやJSPもケースバイケースです。

純粋に「サーブレットでかくぞー」っていうよりもフレームワークを利用することが多いです。

開発者って楽したい勢のあつまりです。
似たようなコードは書きたくありません。

例えばログイン画面なんて大抵似たり寄ったりです。

-------------------------------------------------------
name    [         ]
password[         ]
に入力してログインボタンを押す。

既に登録されているユーザーであればログインが完了して登録されていない文字列だったらログインエラーになって「入力されたnameとpasswordの組み合わせが間違ってる」的な内容を表示します。
-------------------------------------------------------

こんな例がいたるところでありますよね。

こういった決まりきったことは共通にしちゃって、本当に書きたいコンテンツだけかけるようにするってのがフレームワークの主な目的です。

例えば自分がやった例だと
Ruby on Railsを利用した場合、Rubyという言語をインストールしてちょっとコマンドプロンプトをたたけば完了です。
初心者が手順書とかみながらやっても半日で(1行もコードをかかずに)ログイン画面つくってログインできるWebアプリケーションが作成できます(勿論そこからはロジックとかプログラミングをしていくわけですが。あとscaffoldってコマンドとすぐ仲良くなります)。

これを自分で0から作成するとなると結構面倒です。

Ruby on RailsはRubyって言語向けのフレームワークでしたが、Javaだったら Spring Frameworkが有名人ですね。
最近(まだ最近?)はReact+Reduxの組み合わせが流行っています

React+Reduxについては最近さわる機会があるので、ちょっと自分でもなんとなく理解できたら書いてみます。

今回はちょっと小難しい内容でした。

次回はHTTPとかクッキーとかの内容について書いてみます。

いよいよ初心者バイバイかもしれないですね、、、どうしても、、、内容が内容だけに、、、、

ではではー