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

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

ただいまの
回答率

90.12%

サーブレットクラスを初期化中にエラーが発生する

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 5,183

RyoM

score 83

前提・実現したいこと

お世話になります。
ログインページを作っているのですが、
login.jspからLoginDb.javaから移行する時に
HTTPステータス 500 - サーブレットクラス login.LoginDb を初期化中にエラーが発生しました
と表示されてしまします。
考え得る原因を教えていただけると大変ありがたいです。
何卒、よろしくお願いいたします。

発生している問題・エラーメッセージ

HTTPステータス 500 - サーブレットクラス login.LoginDb を初期化中にエラーが発生しました

type 例外レポート

メッセージ サーブレットクラス login.LoginDb を初期化中にエラーが発生しました

説明 The server encountered an internal error that prevented it from fulfilling this request.

例外

javax.servlet.ServletException: サーブレットクラス login.LoginDb を初期化中にエラーが発生しました
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.lang.Thread.run(Thread.java:745)

原因

java.lang.ClassNotFoundException: login.LoginDb
    org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1332)
    org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1166)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.lang.Thread.run(Thread.java:745)

注意 原因のすべてのスタックトレースは、Apache Tomcat/8.0.36のログに記録されています
Apache Tomcat/8.0.36
重大: サーブレット login.LoginDb に例外を割り当てます
java.lang.ClassNotFoundException: login.LoginDb
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1332)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1166)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:518)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:499)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:118)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1102)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:828)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

該当のソースコード

package login;

import java.io.IOException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

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

import com.mysql.jdbc.Connection;

import connect.MySql;

@WebServlet("/LoginDb")
public class LoginDb extends HttpServlet 
{
    private static final long serialVersionUID = 1L;

    protected PreparedStatement ps = null;
    protected Connection con = null;

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException
    {
    //    response.setContentType("text/html; charset=UTF-8");
    //  PrintWriter out = response.getWriter();

        String username = request.getParameter("user");
        String pass = request.getParameter("pass");

        int password =Integer.parseInt(pass); //データベースはINT型で入っている

           HttpSession session = request.getSession(true);

           boolean check = member(username, password);
        if (check)
        {
            /* 認証済みにセット */
            //session.setAttribute("login", "OK");
            /* 本来のアクセス先へ飛ばす */
            //String target = (String)session.getAttribute("target");
            request.getRequestDispatcher("/dbjsp/test.jsp")
            .forward(request, response);
        }
        else
        {
            /* 認証に失敗したら、ログイン画面に戻す */
            session.setAttribute("status", "Not Auth");
            //String login = (String)session.getAttribute("login");
            request.getRequestDispatcher("/dbjsp/login.jsp")
            .forward(request, response);
        }




    }
    protected boolean member(String username, int password) 
    {
        try 
        {
            con= MySql.getConnection();
            String sql = "SELECT * FROM PERSONALS WHERE user = ? && pass = ?";
            PreparedStatement ps = con.prepareStatement(sql);

            ps.setString(1, username);
            ps.setInt(2, password);
            ResultSet rs = ps.executeQuery();

            if (rs.next())
            {
              return true;
            }
            else
            {
              return false;
            }
        }
        catch (SQLException e)
        {
              log("SQLException:" + e.getMessage());
              return false;
        }
    }
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page session="true" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ログインページ</title>
<link rel="stylesheet" type="text/css" href="css/basic.css">
</head>
<body>
<%
    String login = request.getRequestURI();
    session.setAttribute("login", login);
    //out.println(login);
    /* 認証失敗から呼び出されたのかどうか */
    Object status = session.getAttribute("status");
    /*最初のページではnullが設定されている*/
    if(status != null)
    {
        out.println("<p>認証に失敗しました</p>");
        out.println("<p>再度ユーザー名とパスワードを入力して下さい</p>");
        session.setAttribute("status", null);
    }
%>
<FORM ACTION="../LoginDb" method="post">
    <P>ユーザーID</P>
    <INPUT type="text" name="user">
    <P>パスワード</P>
    <INPUT type="password" name="pass" maxlength="8">
    <INPUT type="submit">
<INPUT type="reset">
</FORM>
</body>
</html>
package connect;

import java.sql.DriverManager;

import com.mysql.jdbc.Connection;

public class MySql
{
    protected static String url="jdbc:mysql://localhost:3306/membership";
    protected static String user= "root";
    protected static String pass= "";

    public static Connection getConnection()
    {
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = (Connection) DriverManager.getConnection(url,user,pass);
            return con;
        }
        catch(Exception e)
        {
            throw new IllegalStateException(e);
        }
    }

    public static void main(String[] args) throws Exception
    {
        Connection con = getConnection();
        System.out.println("con="+con);
        con.close();
    }
}

試したこと

tommcat8.0のservlet-api.jarを外部jarで登録した

補足情報(言語/FW/ツール等のバージョンなど)

eclips 4.6 neon
tomcat8.0
jdk1.8

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

LoginDbなどでインポートしている Connection クラスは、java.sql.Connection を指定してください。

なお、mysqlのJDBCドライバである 5系の最新バージョン 5.1.39 は 正しく動作しません
5.1.38を利用してください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/08/23 05:44

    回答ありがとうございます。
    Connection クラスを、java.sql.Connectionに変更し、5.1.38に変更しましたがまだ同じエラーが発生してしまいます、、、

    キャンセル

  • 2016/08/23 11:42

    > tommcat8.0のservlet-api.jarを外部jarで登録した

    このservlet-api.jarの登録も不要です。サーバランタイムでTomcat8を指定していれば自動的に参照します。ビルドパス変更後は必ずEclipseプロジェクトのクリーン→再ビルドを実行しましょう。

    キャンセル

  • 2016/08/27 19:02

    遅くなり申し訳ありません。
    それも、外してはみましたがうまくいきませんでした。
    もう一度自分で考え直してみて、新たに質問させていただきたいと思います。

    キャンセル

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

  • ただいまの回答率 90.12%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる