- PR -

jspの処理終了コマンド

1
投稿者投稿内容
Dee
常連さん
会議室デビュー日: 2002/03/05
投稿数: 28
投稿日時: 2002-03-07 10:47
TOMCATでセッションを使うWebアプリを組んでます。
アクセスごとにセッションがタイムアウトしたかどうかをチェックしようと思い、各ページで次のようなjspをインクルードしています。

checksession.jsp
-----------------------------------------
<%
if(session.getAttribute("appobj") == null){
//セッションに共通で使うオブジェクトがなければ(=セッションが切れていれば)
//メッセージとログイン画面へのリンクを出力
%>
Session time out
<A HREF="login.jsp">Login画面へ</A>
<%
out.close(); //出力ストリームを閉じる 本当はこの時点でJSP処理を終了したい
}
%>

このファイルを各ファイルの先頭で
<jsp:include page='<%=response.encodeURL("checksession.jsp")%>' flush="true"/>
<%
//hogehoge
%>
のようにインクルードしています。

実際にセッションが切れた場合、クライアントでは正しく表示されるのですが、サーバでinclude以降のコードがそのまま実行されてしまい、セッションから消えたオブジェクトを使おうとしてNullPointerExceptionが出てしまいます。

任意の時点でjspの処理を終わらせることはできるのでしょうか?
ちなみにSystem.exit()を呼ぶと案の定TOMCATが昇天しました;-)
よろしくお願いいたします。
miki
大ベテラン
会議室デビュー日: 2001/09/21
投稿数: 174
お住まい・勤務地: 東京都八王子市
投稿日時: 2002-03-07 11:12
checksession.jspでは例外をスローするだけにして、例外をキャッチしたところで「Login画面へ」を表示させるようにすれば良いと思います。
Dee
常連さん
会議室デビュー日: 2002/03/05
投稿数: 28
投稿日時: 2002-03-07 21:13
なるほど、参考になりました。
これまではif〜elseで無理やり囲っていましたので。

ASPのResponse.End(即座にスクリプト処理終了)のようなメソッドはやはりないのですかね。
#J2EEのJavaDocには該当しそうなものありませんし。
しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2002-03-08 03:11
コード:
<% if (なんちゃら) %>
もげもげ
<% return; } %>



とかどうでしょう :b
JSP がどう Servlet に展開されるかわかってれば。

いちど、.jsp から生成される .java のソースをのぞいてみればいかがでしょうか。
tomcat なら TOMCAT_HOME/work の下の方に転がってます。
Dee
常連さん
会議室デビュー日: 2002/03/05
投稿数: 28
投稿日時: 2002-03-08 09:24
あ、なるほど、returnすればよかったんですね・・・
デバッグ時に生成されたjavaは読んでたのですが、returnは思い当たりませんでした。
_jspService()を単純に抜ければいいのですね

ということで

checksession.jsp
-----------------------
<%
if(session.getAttribute("appobj") == null){
%>
<A HREF="login.jsp">Login画面へ</A>
<%
out.close();
return;
}
%>
-----------------------
としたものを、ページの先頭で
<%@ include file="checksession.jsp"%>
とすることで本体コードに入る前に処理を終わらせることができました。
#<jsp:include>と<%@include%>を間違えてました

ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)