MENU

【VPS】VPSサーバーにJavaアプリをデプロイしようとしたら「javax.servlet.ServletException: Error instantiating servlet class」エラーが出た

もうタイトルの通りです。

知識ゼロの状態から勉強したり調べたりして、なんとかApacheTomcatを連携させるところまできました。「Hello World」レベルのjspファイルを表示させることにも成功。
で、同時進行でEclipseJavaアプリを作成していたので、warファイルにして、VPS上に移行してみました。
「index.jsp」ページを表示させるのは成功したのですが・・・
「ログイン」ボタンを押したら出たのが以下のエラー。
 
 

f:id:kumaGoro_95:20200927151104p:plain
エラー

 
 
まさかの例外報告・・・
しかも、メッセージの「Error instantiating servlet class」って、「サーブレットインスタンス化できない」ってことですよね?今までのエラーに比べるとふんわりしすぎてて何が起こってるのか全然わかりませんでした(-"-)

しばらくこのメッセージでググったりしてたんですが、よくよく見たら答えはちゃんと書いてありました。

根本原因
 
java.lang.UnsupportedClassVersionError: servlet/LoginServlet has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0 (unable to load class [servlet.LoginServlet])
 
~以下略~

 
なんか、EclipseJDKバージョンと、TomcatJREバージョンが合ってなかったみたいです。「このサーブレットはversion55.0でコンパイルされてるけど、うちで実行できるのは52.0までだよ」という感じ。
そっか、開発環境と実行環境が違うとこんなことも起こるのか・・・


<解決策>
〇 Tomcat側のバージョンを最新にするか、Eclipse側のバージョンを下げる。(今回はEclipseの設定をいじることにしました。)
※ ちなみに、「version52.0」は「Java1.8」、「55.0」は「Java11」なので、Eclipse側のバージョンを1.8に下げればいいみたい。
 
<手順>
〇 Eclipseウインドウのから「ウィンドウ→設定」と遷移すると設定画面が表示されます。「Java>コンパイラー」ページへ遷移すると、JDKの「コンパイラー準拠レベル」という項目があるので、こちらを「1.8」に変更します。
 

f:id:kumaGoro_95:20200927152557p:plain
設定画面

 
※ ただし、既に作成しているプロジェクトにこの設定変更は適用されません。作成済みのプロジェクトのバージョンを落としたい場合は、「プロジェクト名右クリック→プロパティ」で同じ画面が表示されるので、そちらで変更してください。