EclipseのサーバーとしてTomcatを使っているけどうまく起動しない時がある。
対処法が知りたい。
今回はTomcatで停止状態から治らない時の対処法を細かく紹介していきます。
こんな方におすすめ
- Tomcatの復旧方法がわからない方
- Tomcatが何回も停止する方
Tomcatの停止状態を回復させる鍵はコンソールです
Tomcatが動かないんですけどどうしたらいいですか
コンソール見てみた?
結論から言うとTomcatがうまく動かない時はコンソールを確認してみましょう。
コンソールにはエラーがあると 重大 とうまくいっていない段階で表示されます。
その部分を詳しく見ることで原因を探ることができるのです。
まとめ
Tomcatがうまく起動しない時はコンソールを確認する。
具体例:起動時で失敗していた時
今回、僕がうまくTomcatがうまく起動しなかった原因は、コンソールの表示から発見しました。
その表示がこちら
重大: A Child Cotainer failed during start [日 5 05 09:47:08 JUST 2019 ]
この場合は failed during start と表示されているので起動時に問題があることがわかります。
このあたりの表記の意味については英語ですが、短く端的に書かれています。
自分で調べてなんとなく意味はわかります。
今回は起動に関するエラーでした。
コンパイルエラー(この後詳しく書いています)はなかったのでプロジェクトの起動時に関係しそうなとこを探る流れになります。
もちろん他のエラーもあります。
コンソールに書かれているエラーをみて何の種類のエラーなのか理解しましょう。
まとめ
・何のエラーなのかコンソールから認識する
・英語は調べて訳す
具体的な解決までの流れ
重大: A Child Cotainer failed during start [日 5 05 09:47:08 JUST 2019 ]
このメッセージは、コンテナ(つまり、WEBアプリ)起動時に問題が出ているため、起動に失敗した、と言う意味です。
ということはプロジェクトのコード上に何かしら問題があるという判断になります。
ただ、コンパイルエラーはなかったので設定に関わるところに問題がありそう、と予想して
アノテーションを中心にコードを1つづつ見ていった、と言う流れです。
そうしたところ、アノテーションにおける本来1つしか使えないはずのサーブレットパスが、異なるサーブレットでも使われてしまっていたというミスでした。
まとめ
エラーの内容から該当場所を発見しました。
問題箇所を発見する基本的な流れ
プログラミングをする中でサーバーやプロジェクトがうまく機能しない時があります。
しかし大抵の場合は、どこかに不具合の理由が表示されています。
プログラムを組む中でうまくいかない時は原因を探すようにしましょう。
今回のTomcatの不具合を探す手順は以下です。
ちなみにTomcatのエラーに限らず、開発ツールを使う時はどのようなエラーに対しても同じ手順で不具合を解決できます。
・コンパイルエラーから探る
・コンパイルエラーに表示されない場合はコンソールから問題を探る
・コンパイルエラーにもコンソールにも表示されないエラーの場合は一回プロジェクトをクリーンしてみる
コンパイルエラーが出ている場合は問題解決は簡単
コンパイルエラーはソースコード上に文法上のエラーがある場合発生します。
コンパイルエラーが起きたときはeclipse上で問題箇所に赤いバツが付きます。
そして、クラスファイルにも赤いバツが付加されるのでどのソースコードでコンパイルエラーが出ているかはそれで判断ができます。
コンパイルエラーが発生しているとプロジェクトエクスプローラでもどのソースコードで問題が出ているのかわかるようになっています。
例としてHTMLの編集でわざとエラーを起こしてコンパイルエラーを表示させてみました。
また、マーカータブにもエラーの詳細が表示されます
コンパイルエラーに表示されないエラーの代表例
コンパイルエラーとして表示されてないのにうまくいきません。
どこにエラーの原因があるのですか?
実はコンパイルエラーに表示されないエラーも存在します。
そのような例が
・実行時エラー
・データベースへのアクセスエラー
・文字列を数値に変換する際に数値に変換出来ない文字列を指定した場合のエラー
です。
ちなみに今回のTomcatのエラーは「実行時エラー」でした。
それでは各エラーの具体的な内容とエラーが起きる原因を紹介していきます。
①実行時エラー
実行時エラーは特に文法としては間違っていないのですが、実行した際に実行出来なくて例外が発生するものです。
例としては
・設定に関わるコードミス(アノテーションなど)
・データベースにアクセスする際にパスワードが違っていてログイン出来ない
などがあります。
後者の場合はプログラムの文法は間違っていないので、実際にデータベースへのログインが実行されるまでパスワードが違うのかが分かりません。
②文字列を数値に変換する際に数値に変換出来ない文字列を指定した場合のエラー
文字列を数値に変換する際に数値に変換出来ない文字列を指定した場合もそうですね。
次のコードはエラーが発生しないケースです。
String s = "123";
int num = Integer.parseInt(s);
この場合は ”123” が 123 に変換されます。
次が実行時エラーのケースです。
String s = "abc";
int num = Integer.parseInt(s);
この場合は ”abc” は数値に変換出来ないので例外が発生しまいます。
どうしても不具合が治らないときはプロジェクトのクリーンを試そう
自分がプログラムのミスしていなくても正常に動かない時があります。
エラーの原因がわからず、表記もされていない場合は一回プロジェクト自体のクリーンを試してみましょう。
また、まだ例外が発生する場合は良いのですが、エラーが発生せず自分の思い通りに実行されないケースがあります。
この場合はどこに原因があるのかの判断が難しくなります。
実際の動いている処理から何故思い通りに動かないのかをコードから判断する必要があります。
この辺りは慣れも必要ですので詳しい人に聞きながら地道にエラーを探しましょう。
今回はTomcatが停止状態からなおらない時の対処法を紹介していきました。
エラーを見つけて、解決する作業はTomcatに限らず、プログラミングにおいてとても重要なことなのでこの機会にしっかり定着させておくといいと思います。