|
JSPとは、Microsoft社のアプリケーションサーバー(IIS)で用いるASP(ActiveServerPages)に対抗して作られた言語・環境です。当初はJavaServerPagesの頭文字を取ったものだといわれていましたがサンマイクロシステムズによると「JSP」という商標だそうです。JSPはHTMLとプログラムが混在した言語・環境です。まず下記のJSPによるHelloWorldを見て下さい。
|
例:JSPによるHelloWorld(HelloWorld.jsp)
|
| |
|
|
| |
<%@ page contentType="text/html;
charset=SJIS"%>
<html>
<head>
<title>HelloJSP!!</title>
</head>
<body>
<h1>HelloWorld,JSP!</h1>
</body>
</html>
|
|
| |
|
|
|
このJSPをコンテキストルートの直下(例:studyディレクトリの直下など)に配置してください。そしてTomcat4を起動している状態で
http://localhost:8080/study/HelloWorld.jsp
をブラウザで開いてみてください。少し時間がかかりますがHelloWorldが表示されたと思います。ちなみに、このJSPが行っていることをサーブレットで記述すると下記のようなコードになります。
|
例:サーブレットによるHelloWorld
|
| |
|
|
| |
import
java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet {
public void doGet(HttpServletRequest
request, HttpServletResponse response)
throws IOException, ServletException
{
response.setContentType("text/html");//配信する情報のコンテンツタイプを指定
PrintWriter out = response.getWriter();//レスポンスに対するWriterを取得
//HTMLを書き出し
out.println("<html>");
out.println("<body>");
out.println("<head>");
out.println("<title>HelloJSP!!</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>HelloWorld,JSP!</h1>");
out.println("</body>");
out.println("</html>");
}
}
|
|
| |
|
|
|
いかがでしょうか?サーブレットと見比べてみると、JSPは非常に簡便な方法でHTMLの出力が行えることがわかると思います。では、さらにfor文を利用したJSPを見てみましょう。
|
例:JSPによるHelloWorld2(HeeloWorld2.jsp)
|
| |
|
|
| |
<%@ page contentType="text/html;
charset=SJIS"%>
<html>
<head>
<title>HelloJSP!!</title>
</head>
<body>
<% for( int i=0;i<10;i++
){ %>
<h1>HelloWorld,JSP!</h1>
<% } %>
</body>
</html>
|
|
| |
|
|
|
同じくコンテキストルートの直下に配置してブラウザで開いてみてください。「HelloWorld,JSP!」が10行表示されていると思います。さらに何行目かを表示してみましょう。
|
例:JSPによるHelloWorld3(HeeloWorld3.jsp)
|
| |
|
|
| |
<%@ page contentType="text/html;
charset=SJIS"%>
<html>
<head>
<title>HelloJSP!!</title>
</head>
<body>
<% for( int i=0;i<10;i++
){ %>
<h1><%=i%>:HelloWorld,JSP!</h1>
<% } %>
</body>
</html>
|
|
| |
|
|
|
同じくコンテキストルートの直下に配置してブラウザで開いてみてください。すると「HelloWorld,JSP!」が10行表示され、さらに行数が0から記述されていると思います。つまりJSPでは <%〜%> の部分はJavaのコードと同様に扱われ、それ以外の部分はprintlnする部分として扱われます。サーブレットコンテナにおいてファイルがJSPとして扱われる条件としては「拡張子が.jspとなっている」ことだけです。ではJSPファイルにおいて特別な意味を持つタグを下表に示します。
|
例:JSPのタグ
|
| タグの形態 |
説明 |
| <%@ 〜 %> |
ディレクティブと呼び、主に静的な宣言として利用する。その種類にはページのコンテンツタイプやJSPで利用するパッケージのインポートを宣言するページディレクティブ、外部ファイルに分断されたJSPを取り込むインクルードディレクティブなどが存在する。
<%@ page contentType="text/html; charset=SJIS"
import="java.util.*"%>
<%@ include file="/test.jsp"%> |
| <%! 〜 %> |
メンバーの宣言、記述に利用する。フィールドやメソッドを定義するコードはこのタグの内部に記述する。
<%! String str = null; %>
<%! String getName(){ return "SampleName";
} %> |
| <%= 〜 %> |
〜で定義された文字列をタグの配置部分に挿入する。
<%= "牧野" %>
|
| <% 〜 %> |
〜に記述されたJavaコードを実行する。
<% for( int i=0;i<10;i++ ){ %>
test!<BR>
<% } %>
|
| <jsp:〜 /> |
JSP組み込みタグライブラリ、幾つかの便利な機能をカスタム化したタグ
<jsp:useBean id="test" class="jp.co.wownet.education.servlet.Goods"
scope="request"/> |
|
通常の<%〜%>タグに関しては問題ないと思います。注意して欲しいのは<jsp:〜 />の部分です。これはタグライブラリと呼ばれよく利用する機能をタグとして用意して、それをタグセットとして提供しています。またjspタグライブラリは標準で組み込まれており、Beansの呼び出しや操作に関して便利な機能を提供してくれます。またJSPでは暗黙の了解としてrequest(ServletRequest)、response(ServletResponse)、session(HttpSession)、application(ServletContext)、config(ServletConfig)という変数が括弧内のオブジェクトの型として宣言無しに利用できます。
ではJSPはどのようなプロセスでコンテナに配置されるのでしょうか?実はJSPは2段階のコンパイルを経てサーブレットコンテナへと配置されます。
JSP -(JSP翻訳エンジン)→
ソースコード -(コンパイラ)→
クラス
JSPの呼び出し時、JSPのインスタンスが存在しないかJSPファイルに変更があったとします。するとまずJSP翻訳エンジン(TomcatならJasperエンジン)が対象のJSPファイルをjavaコードへと翻訳します。そして翻訳されたJSPのソースコードをjavacなどによって動的にコンパイルし、そのインスタンスをコンテナへ配置しリクエストとレスポンスが引き渡されます。JSPはHTML自体にjavaコードを記述でき便利な反面でコードが煩雑になったり、JSP翻訳エンジンの実装形態が違うという注意すべき点もあります。
|