質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

5回答

10203閲覧

javaプログラムを途中で終了させる方法について

kumakumatan

総合スコア213

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

1クリップ

投稿2016/07/29 02:01

編集2016/08/09 08:58

java

1 2public class ABC { 3 4public boolean ABC1() { 567} 8 9public boolean ABC2() { 101112} 13 14public boolean ABC3() { 151617} 18 19} 20

java

1 2345 6if(インスタンス変数.ABC1() == true && インスタンス変数.ABC2() == true && インスタンス変数.ABC3() == true) { 7 8 out.println("正常メッセージ"); 9 10} else{ 11 12 out.println("エラーメッセージ"); 13} 14 15

java側で処理をして、エラーの場合は「return false 」、正常の場合は「return true」
を返して、JSP側で判定をしてメッセージを返す処理をしています。
public boolean ABC1()にて「return false 」が発生してその後、ABC2()、ABC3()に
処理がいかないでJavaプログラム自体を終了させて、JSPに移り判定処理をさせるには
どのようにしたらいいでしょうか?
というのも、jsp側で「HTTPステータス 500 ・・・」と表示され、原因メッセージを確認すると、
インスタンス変数.ABC3()でエラーが発生して、戻り値が返されず、JSP側でエラーが発生しているように
見受けられます(原因 java.lang.ArrayIndexOutOfBoundsException: 3)。

説明 The server encountered an internal error that prevented it from fulfilling this request.
例外 org.apache.jasper.JasperException: An exception occurred processing JSP page

例外

org.apache.jasper.JasperException: An exception occurred processing JSP page /xxx.jsp at line 75

これを回避する為、ABC3()まで処理をいかないようにしたく思います。
宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

条件式の&&演算子の左側で評価がfalseの場合、右側は評価されないはずなので、
ABC1()およびABC2()はtrueが返ってきているはずです。

そもそも「java.lang.ArrayIndexOutOfBoundsException」は配列の範囲を超えてアクセスした場合に発生する例外ですから、配列の範囲を超えてアクセスするようなコードになっていないか、あるいは超える可能性があるのであれば、事前にチェックするようにロジックを見直すべきです。

投稿2016/07/29 02:20

MasafumiOkamoto

総合スコア254

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kumakumatan

2016/08/02 07:36

ご回答ありがとうございます。 配列の範囲を事前にチェックするにはどのようにしたらよろしいでしょうか? 便利なメソッドなどがありますでしょうか? よろしくお願いします。
guest

0

書き方はあってます。期待通り、途中で終了できてます。

なにかがおかしいですね。ABC1()が期待どおりfalseを返していることを再確認してみてはいかがでしょうか。

java

1class Main { 2 public boolean ABC1() { 3 System.out.println("ABC1"); 4 return false; 5 } 6 7 public boolean ABC2() { 8 System.out.println("ABC2"); 9 return false; 10 } 11 12 public boolean ABC3() { 13 System.out.println("ABC3"); 14 return false; 15 } 16 17 public static void main(String args[]) { 18 Main me = new Main(); 19 if(me.ABC1() == true && me.ABC2() == true && me.ABC3() == true) { 20 System.out.println("正常メッセージ"); 21 } else{ 22 System.out.println("エラーメッセージ"); 23 } 24 } 25}

ABC1
エラーメッセージ

投稿2016/07/29 02:16

matobaa

総合スコア2493

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

まさかとは思いますが…
ArrayIndexOutOfBoundsExceptionの後の数字「3」をメソッド名ABC3の事だと思っていませんか?

原因を正確に把握するためには、例外の原因以外に、その後に続くスタックトレースの情報が重要です。質問に追記して下さい。

投稿2016/07/30 13:35

編集2016/08/02 14:45
swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kumakumatan

2016/08/09 08:59

ご回答ありがとうございます。 質問に追記しました。「例外・・・」 ArrayIndexOutOfBoundsExceptionの後の数字「3」は例外番号と認識しています。 宜しくお願いします。
swordone

2016/08/09 15:12 編集

その「3」は、配列のインデックス3番にアクセスしようとしたことを意味しています。長さ3以下の配列に3番は存在しないため、例外を発します。 メッセージを読む限りJSPの75行目で問題が発生しているようですが… とにかく、どこかで配列にアクセスする際に範囲外を参照していないか調べて下さい。
kumakumatan

2016/08/10 05:59

ご回答ありがとうございます。 指定の列にデータがない場合に、エラーが起こってしまいます。配列にアクセスする際に範囲外を参照していますので、例外が発生した場合を考え、try{ }catch (ArrayIndexOutOfBoundsException e) { return false; } としてもうまくいきません。 宜しくお願いします。
swordone

2016/08/10 12:37

tryブロックに何も入れてなければ全く意味ありませんよ? それをするのなら、その例外が起こるであろう部分をtryで囲まないといけません。
kumakumatan

2016/08/12 02:34

ご回答ありがとうございます。 ArrayIndexOutOfBoundsExceptionの例外が起こりうるであろうすべての処理で 「return false」を返すようにしたら解決できました。ありがとうございます。
swordone

2016/08/12 12:40

本来、ArrayIndexOutOfBoundsExceptionが起きるということはプログラムの不備です。発生しないようにプログラムを見直すことを強くおすすめします。
guest

0

一人目の回答に同意ですが、実際に動作させて確認して納得したい場合も考えました。

以下がプログラム等を終了させる方法です。

java

1System.exit(1);//単純にプログラムを終了させる。終了ステータスを呼び出し側に返す 2break;//ループを終了させる 3return;//void型メソッドを終了させる 4throw new Exception("エラー");//エラーメッセージを表示させてエラーを発生させる

といろいろと方法があります。

throwは例外クラス(Exceptionをスーパークラスに持つクラス)なら何でもOKです。
true/falseチェックの結果だったら
throw new AssertionError("検査エラー");
みたいな。

投稿2016/07/29 05:53

intelf___

総合スコア868

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/07/30 09:19

質問に沿っていない回答です。 System.exit()はJSPコンテナでは使うのを極力避けるべきです。 Exceptionの派生クラス(チェック例外)でなくても、例外スローによって当該スレッドを終了させられることは可能ですが、それを教えたところで何も解決になりません。
guest

0

月なみな方法

java

1boolean error = true; 2if(m1()) { 3 if(m2()) { 4 if(m3()) { 5 error = false; 6 out.println("正常メッセージ"); 7 } 8 } 9} 10 11if (error) { 12 out.println("エラーメッセージ"); 13}

投稿2016/07/29 02:06

asahina_dev

総合スコア610

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問