SUMMER_WARSの日記

趣味や、仕事のこと、日々のことを徒然なるままに書き残すブログ

動的Webプロジェクトでサーバー実行すると「サーバー ローカル・ホスト の Tomcat v8.0 サーバー は始動に失敗しました。」が発生する

Servletを作っていて結構発生する人が多い。このエラーが来たらこれやろ!っていうやつ。まずはここ確認しよう。


目次

1)現象

 Servletを実行するとエラーが発生してしまう。↓こんな感じ。※詳細を見ると、「サーバー ローカル・ホスト の Tomcat v8.0 サーバー は始動に失敗しました。」ってでます。

f:id:SUMMER_WARS:20170621091126p:plain

2)環境

 Java8(動的Webプロジェクトを作成)

 Apach Tomcat 8.0.44

 MySQL 5.7.17

3)原因

 サーブレットアノテーションを使って、リクエストのURLでどのサーブレットが動くかを設定できる(※web.xml設定ファイルが不要)んやけど、そのアノテーションの文字列が被っちゃってるよ!Hey!you!っていう話。

package jp.sample;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/**
 * Servlet implementation class LoginServlet
 */
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;


この @WebServlet("/login") を他のサーブレットでも設定してたりすると発生する。
※1つサーブレット作って、他のサーブレットもこれをコピペして作ってたりすると発生する可能性大だよ~

4)対策

 アノテーションの文字列が被っているかサーブレットを確認し、別の名前に修正する。基本的にServletのクラス名から取ろう。

【追記】

2017/06/28 そもそもコンパイルが通っていない場合も同様のエラーが発生。