JSPとは
JSPは、Java Server Pages の頭文字を取った単語で、<% %> タグを使用してHTMLの中に Javaのプログラムを埋め込むことができます。 HTMLにプログラムを埋め込むというと、Microsoftの IISで利用される ASP ( Active Server Page ) がありますが、記述方法は非常に良く似ています。
JSP もクライアントからの要求を解析して要求に応じた動的なページを生成することが可能です。 実は初回呼び出し時に JSPプロセッサは指定された JSPを解析して、これを、同じ動作をする Servletのソースコードへ変換してコンパイルし、そのクラスファイルをロードして実行します。(予めコンパイルしておくことも可能です)
HTMLの中に Javaプログラムを埋め込むといっても、ASPと同じで、処理した結果をクライアントへ出力するものなので、記述してあるJavaプログラムがクライアントへ出力されたりすることはありません。
JSPとServlet
Webサーバ側でJavaプログラムを実行して、結果を HTMLとしてクライアントへ出力するというと先述している Servletとの違いが見えてきませんね、、、 実際に「出来ること」で考えると、ServletでできることとJSPでできますし、逆に JSPに出来ることは Servletに出来てしまいます。
実現できる機能に違いが無いわけですから、両者の使い分けの方法は記述方法になります。 具体的に言うと、Servletを記述する場合、HttpServletをインポートして、HTML出力のためにアウトプットストリームを取得して、、、と単純な HTMLを出力するにもとても手間がかかり、Javaの知識が無ければ Servletの記述はおまじないのように見えてしまいます。
それに比べ JSPは HTMLに Javaプログラムを埋め込むわけですから、大抵の JSPは HTMLの知識があれば、どんな画面が出力されるかはイメージしやすいですし、記述も Servletほど複雑にはなりません。
Servletのコード
package com.sitecooler.servlet;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class SamplePrintWriter extends HttpServlet {
protected void doGet(
HttpServletRequest req,
HttpServletResponse res)
throws ServletException, java.io.IOException {
res.setContentType("text/html;charset=Windows-31J");
PrintWriter out = res.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Hello World</title>");
out.println("</head>");
out.println("<body>");
out.println("Hello World");
out.println("</body>");
out.println("</html>");
}
}
JSPのコード
<%@ page language="java" contentType="text/html; charset=Windows-31J" %>
<html>
<body>
Hello World
</body>
</html>
JSPを使う理由
サーバーサイド Javaの説明の際に MVCモデルについて若干説明をしました。簡単に言うと、システムのビジネスロジックを定義するモデル(Model)と、画面遷移などのシステム動作を制御するコントローラ(Controller)、それに表示を担当するビュー(View)で役割分担するというものでした。
Servletが表示(View)を担当することも出来ますが、上記のように単純なHTMLを出力するにも多くのコードを必要としますし、Servletでは表示のイメージもなかなか出来ません。そして何より Servletの記述には Javaの知識がそれなりに必要になってきます。
しかし表示を HTMLに近い構造で記述できる JSPで行うことによって、表示部分は Javaの知識が余りされない 専門のWebデザイナーが担当すると言ったことも可能になります。 MVCのように役割分担が出来れば、表示部分はデザイン性を持たせるため 専門のWebデザイナーが担当し、Javaの知識があまり要求されなくて記述できるようになるわけです。
JSPで HelloWorld
それでは単純な「Hello World」をJSPで出力してみます。 使用した環境は Tomcatがインストールされている状態で、eclipse上から「wtomcat」というTomcatプロジェクトを作成してあります。ディレクトリ構成、server.xmlの設定、JSPソースについては以下の通りです。
ディレクトリ構成
server.xml ( 抜粋 )
<Context path="/wtomcat"
reloadable="true"
docBase="C:\eclipse\workspace\wtomcat"
workDir="C:\eclipse\workspace\wtomcat\work\org\apache\jsp" />
JSPソース ( helloworld.jsp )
<%@ page language="java" contentType="text/html; charset=Windows-31J" %>
<html>
<body>
Hello World
</body>
</html>
上記の準備が整ったらブラウザから作成したJSPを表示してみます。
JSPのソースにはJavaらしき構文はありませんね。HTMLを違う部分といえば、一行目にある「 pageディレクティブ 」と呼ばれる部分です。 pageディレクティブではJSPプログラムの特性を定義できます。まず language属性でプログラム言語がjavaであること、contentType属性で Content-Typeがtext/html(HTML文章であること)、そして文字エンコード方式がWindows-31Jであることを定義しています。
このようにJSPはHTML文章に近く記述することが出来ます。( 書き方によっては思いっきりJavaプログラムにすることも可能です )この JSPソースをサーブレットエンジンがサーブレットへ変換して、サーブレットを実行することでこのように出力がされます。
|