転職を繰り返したサラリーマンの多趣味ブログ

30才未経験でSEに転職した人の多趣味ブログ

【技術書メモ】基礎からのサーブレット⑦

クラスのインポート

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