クラスのインポート
pageディレクティブのimport属性を使えば、Javaクラスをインポートできる。
<%@page import="java.util.Date" %> <p><%=new Date() %></p>
宣言
JSPでは、メソッドや変数を定義することができる。これを宣言という。
<%-- メソッドの宣言 --%> <%! int add(int a, int b) { return a + b; } %> <%-- 式で、宣言したメソッドの呼び出し --%> <p>1+2=<%= add(1,2) %></p>
変数の宣言
変数の宣言には2通りある。
「スクリプトレット」と「宣言」を使う方法。両者は、JSPからサーブレットに生成した際、違いが生じる。
スクリプトレット:doGetなどのメソッドのローカル変数(JSPファイルが画面表示されたら破棄される)
宣言:サーブレットクラスのメンバ変数(Tomcat再起動まで破棄されない)
<%-- 宣言による変数宣言 --%> <%! int countA = 0; %> <%-- スクリプトレットによる変数宣言 --%> <% int countB = 0; countA++; countB++; %>
画面表示後、F5で更新をかけるとスクリプトレットによる変数は変わらずだが、宣言による変数は値がインクリメントされる。
エラーページの生成
PageディレクティブのisErrorPage属性を利用すると、エラーページ内の暗黙オブジェクトのexceptionが使用できる。
<%-- errorPage = エラーページのURL --%> <%@page errorPage="total-error.jsp" %> <%-- スクリプトレットで記述 --%> <% request.setCharacterEncoding("UTF-8"); int price = Integer.parseInt(request.getParameter("price")); int count = Integer.parseInt(request.getParameter("count"));
<%-- isErrorPage属性を記述することで、暗黙オブジェクトexceptionを利用可能にする --%> <%@ page isErrorPage="true" %> <p>数値を入力してください。</p> <%-- 例外メッセージの出力 --%> <p><%=exception %></p>
ここでめっちゃハマったことが一つ。。
EclipseからTomcatを立ち上げて実行しているのだが、本来ならtotal-error.jspに記載している「数値を入力してください。」とexceptionの内容が表示されるはずが、HTTP 500のエラーページだけが表示される。
ちなみに、isErrorPage = "true"の記述と、exceptionの記述を外せば、「数値を入力してください」とは表示される。
原因が分からなかったのだが、EclipseからTomcatを立ち上げなければ上手く表示ができた。何となく、以下のようなことが関連してるのかな。
ameblo.jp