- PR -

JSPにて終了処理をしたい

投稿者投稿内容
きよっち
会議室デビュー日: 2004/06/24
投稿数: 6
投稿日時: 2004-06-24 10:07
お世話になっています。

JSPにて、ユーザ認証を行い、エラーなら
メッセージを表示して、その後の処理を終了させようと
しているのですが、いまいち良い方法が見つかりません。

試した方法としては、強制的に例外を発生させて終了しようと
考えたのですが、仕様上例外処理時には、エラーページを表示するように
しているので、この技が使えない状態です。

PHPだと、「exit()」で終了させられたりしますが、
JSPには、同じような処理を行うものがありませんでしょうか?

参考までに、簡略化したソースを記しました。
<%@ page errorPage="error.jsp" %>
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%
// ユーザID取得
String uid = request.getParameter("uid");

if(!uid.equals("manager")){
 out.print("<html>");
out.print("<body>");
out.print("権限がありません。");
out.print("</body>");
out.print("</html>");
←ここで、処理を終了したい。
}
%>
<html>
<body>
(通常、表示処理)
</body>
</html>

以上、何か情報をお持ちの方がいらっしゃいましたら、
ご教授頂ければと、思います。
よろしくお願いいたします。

環境
Apache(バージョン不明)
Interstage Ver.4
JDK1.3
t-wata
大ベテラン
会議室デビュー日: 2002/07/12
投稿数: 209
お住まい・勤務地: 東京
投稿日時: 2004-06-24 10:22
> ←ここで、処理を終了したい。

そこに、
return;
といれればOKです。
きよっち
会議室デビュー日: 2004/06/24
投稿数: 6
投稿日時: 2004-06-24 10:43
t-wata様、ありがとうございます。

>return;
にて早速、終了することを確認いたしました。
ありがとうございました。

しかし、現状ではout.printで出力されるべきテキストが
表示されずに、真っ白な状態になってしまいます。

こちらに関しては、テキストの出力方法をいろいろ試して
みたいと思います。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-06-24 10:47
その処理に失敗したときの例外を定義して、別途エラーページを設定すれば良いのではないでしょうか?
きよっち
会議室デビュー日: 2004/06/24
投稿数: 6
投稿日時: 2004-06-24 11:13
インギ様、ありがとうございます。

>その処理に失敗したときの例外を定義して、別途エラーページを設定すれば良いのではないでしょうか?
不勉強な為、ご意見を参考に、errorPage属性以外で、
エラーページへの遷移させる方法を調査中です。

助言、ありがとうございました。
Cluster
ぬし
会議室デビュー日: 2003/03/06
投稿数: 289
お住まい・勤務地: 大阪
投稿日時: 2004-06-24 12:02
引用:

きよっちさんの書き込み (2004-06-24 10:43) より:

>return;
にて早速、終了することを確認いたしました。
ありがとうございました。

しかし、現状ではout.printで出力されるべきテキストが
表示されずに、真っ白な状態になってしまいます。



returnする直前で、flushBuffer() すればいいような気がします。
試してないので、間違えてたらごめんなさい。
きよっち
会議室デビュー日: 2004/06/24
投稿数: 6
投稿日時: 2004-06-24 13:54
Cluster様、ありがとうございます。

>flushBuffer
というのは、
response.flushBuffer();
を指していますでしょうか?
もし、それであれば、残念ながら現象は変わりませんでした。

また、returnの直前に、out.flush(); を行った場合は、
「java.io.IOException: Illegal to flush within a custom tag」
と言うような、エラーが表示されます。
最初のソースに書き忘れていたのですが、カスタムタグを使用して
DBとのやりとりもしています。
上記のエラーからだと、どうも、カスタムタグ内のflushの使い方が
マズイと言っているようなのですが、
カスタムタグとして、flushが定義できてしまうのでしょうか?

カスタムタグの定義は、以下の通りです。
<%@ taglib prefix="sol" uri="/test_sol" %>

つくづく、勉強不足を実感しております。
皆さんの助言をもとに、調査を続けたいと思います。

[ メッセージ編集済み 編集者: きよっち 編集日時 2004-06-24 14:05 ]
キルシェ
常連さん
会議室デビュー日: 2004/03/25
投稿数: 26
投稿日時: 2004-06-24 16:29
白い画面が表示される理由はよくわかりませんが、
認証OKのHTMLと認証NGのHTMLをセットで書いて、
認証結果で切り替える様にすればどうでしょうか?

こんな感じで。
コード:
<HTML>
<BODY>
<% if(/* 認証判定(!uid.equals...) */){ %>
認証に失敗しました。
(以下、エラーメッセージ)
<% } else { %>
認証に成功しました。
(以下、通常表示)
<% } %>
</BODY>
</HTML>



べたな方法なので、他の方法としては・・・

  • 認証結果に応じて、表示したい内容(JSP)をincludeする
  • 認証結果に応じて、通常処理JSPかエラーJSPにdispatchする(forwardだったかも)
  • 認証失敗時は適当な例外をスローし、エラーページで例外に応じてメッセージを制御


実はJSPはよく覚えていないので、細かいところは自信ないです(^_^;;

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