JSP/サーブレット緊急学習記 1日目
以前作成した記事を公開するのを忘れていたので公開します。(ごめんなさい…)
LAMPを勉強しながら連載記事を書いていたのですが…
急遽JSP/サーブレットを学ぶことになったので、またまた日報がてら書いていきます。
webの簡単な仕組みについてはこちらで御確認ください。
JSPとサーブレットを使用する利点
JSPとサーブレットを使用する利点として以下の点が挙げられます。
- 環境を選ばない
- 処理が速い
- ユーザ数の増加に対応
原則windows,Mac,LINUXどのOS上でも動作可能
JSPとサーブレットは所謂コンパイル言語であり、コンパイルした状態でサーバ上に配置するため即実行可能です。
それ故、処理速度が圧倒的に高速です。
さらに一旦呼び出されたプログラムはメモリ上に残るので、次回以降の呼び出しも高速です。
例えばCGIを使用する場合は、ユーザの増加(=リクエストの増加)に伴い、個別にプロセスが立ち上がります。
JSPとサーブレットを使用した場合は、プロセスは一つしか立ち上がりません。
そのプロセスの中でリクエストに数だけ、JSPやサーブレットが実行されます。
JSPとサーブレットの使い方
JSPとサーブレットって何故2つ併せて使用することが多いのでしょうか。
そしてこの2つはどのように違うのでしょうか?
結論から言うと、できることはほとんど同じですが少しだけ異なります。
- JSPで実現できることは、すべてサーブレットで実現できます。
- サーブレットで実現できることは、ほとんどJSPで実現できます。
実はサーブレットの方が少しだけ多いです。
また「見た目」が異なります。
- JSP
- サーブレット
HTMLの中にjavaプログラムを埋め込む。
1 2 3 4 5 6 7 8 9 | < html > < head > < title >さんぷる1</ title > </ head > < body > <% out.print("< p >てすと1</ p >"); %> </ body > </ html > |
javaプログラムの中からHTMLを出力。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class test extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) { throws IOException, ServletException { response.setContentType( "text/html; charset=Shift_JIS" ); PrintWriter out = response.getWriter(); out.println(createHTML( "<html>" )); out.println(createHTML( "<head>" )); out.println(createHTML( "<title>さんぷる1</title>" )); out.println(createHTML( "</head>" )); out.println(createHTML( "<body>" )); out.println(createHTML( "<p>てすと1</p>" )); out.println(createHTML( "</body>" )); out.println(createHTML( "</html>" )); } } } |
上記を比較すると一目瞭然ですが、これらは用途によって使い分けます。
例えば、静的なHTMLをたくさん作りたい(出力)させたいのであれば、JSPの方が向いていることはわかりますよね?
javaで記述してしまうとコード量が増加し、複雑化することによりメンテナンス性が落ちるからです。
逆にwebページの骨組み以外の事をHTML内に記述してしまうと、構造を確認しにくくなるためサーブレットの方が向いています。
つまり、表示関係の機能はJSPで行い、処理関係の機能はサーブレットで行うということになります。
だから2つセットで扱われることが多いのですね。
コンパイル
JSPとサーブレットは各々どのようにコンパイルを行うのか確認しましょう。
- JSP
- サーブレット
作成したファイルを直接サーバ上に置く
作成したソースコードを手動でコンパイルし、実行ファイルをサーバに置く
サーブレットの方がJSPよりも作業が少ないのですが、2回目以降のレスポンスの速度はほとんど変わりません。
それでは初日はここまでで。