2017-05-17 12 views
0

私はIntelliJ IDEA UltimateでJava Webプロジェクトを作成しています。 2つの文字列を入力とし、データベースを照会してint値を返すメソッドを持つクラスがあります。 (これはログインメソッドです。ユーザー名とパスワードを受け取ります。有効な場合は、ユーザーIDのintを返します。それ以外の場合は0)。メインメソッドからではなく、JSPページからメソッドを実行しているときにエラーが発生するのはなぜですか?

私はこのメソッドをmainメソッドで "Tester"クラスから呼び出すことでテストし、期待値を返しました。しかし、このメソッドをJSPページから呼び出すと、SQLドライバ(com.sql.jdbc.Driver)に対してClassNotFound例外が発生します。 (私はそれが私にエラーを与えるこのメソッドを知っているので、私はそれをデバッグするSystem.out.printlnを追加しました)

私のJSPページからメソッドを呼び出すときにのみ、このエラーが発生しますか?これをどうすれば解決できますか?

私はコンソールに入る正確なエラー:

LogIn method error java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 

私に苦痛を与えるのログイン方法:

public static int logIn(String username, String password) { 
     try { 

      Class.forName("com.mysql.jdbc.Driver"); 

      Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/my_database", "root", 
        "password12345"); 
      Statement stmt = con.createStatement(); 
      ResultSet users = stmt.executeQuery("SELECT * FROM users"); 

      ArrayList<User> userList = new ArrayList<User>(); 
      while (users.next()) { 
       userList.add(
         new User(users.getInt("id"), users.getString("username"), users.getString("password"), 
           users.getString("full_name"), 
           users.getString("email"), users.getInt("admin") == 1)); 
      } 
      for (int i = userList.size() - 1; i >= 0; i--) { 
       if (username.equals(userList.get(i).getUserName()) && userList.get(i).testPassword(password)) { 
        System.out.println(userList.get(i).getId()); 
        return userList.get(i).getId(); 
       } 
      } 
      return 0; 
     } catch (Exception e) { 
      System.out.println("LogIn method error " + e); 
      return 0; 
     } 
    } 

JSPページ:

<%@ page import="com.neilbanerjee.SupportMeLogic,java.sql.*" %> 
<%@ page contentType="text/html;charset=UTF-8" language="java" %> 
<% 
    int loggedInID = MyOtherClass.logIn(request.getParameter("username"), request.getParameter("password")); 
    com.neilbanerjee.User loggedIn; 
    if (loggedInID == 0) { 
     loggedIn = null; %> 
     <%--<jsp:forward page="index.jsp"></jsp:forward>--%> 
<% 
    } else { 
     loggedIn = MyOtherClass.loggedInUser(loggedInID); 
    } 
%> 
<html> 
<head> 
    <title>SupportMeDevices</title> 
</head> 
<body> 

Welcome, <% out.print(loggedIn.getFullName());%>! 

</body> 
</html> 
+1

JDBSドライバのjarファイルは、デプロイされたwarファイルのWEB-INF/libのunerではないため、webappのランタイムクラスパスではありません。 –

答えて

0

ウェブアプリをサーバーに展開されています。サーバのlibフォルダとjarファイルを使用しています。WEB-INF/libフォルダー。

javax.servlet.jsp.jstl-1.2.4.jarjavax.servlet.jsp.jstl-api-1.2.1.jarWEB-INF/libに入れると、jspページでjstlを使用できるようになります。

+0

私は 'WEB-INF'の中に' lib'フォルダを持っていないようです。また、これは、SQLドライバのClassNotFound例外を助けるでしょうか? –

+0

はい、もちろんjdbcドライバjarも入れてください –

+0

あなたは伝説です。ありがとうございました! –

0

メインメソッドから呼び出すと、JDBCドライバクラスがクラスパスにあり、Javaはエラーなしでアプリケーションを実行できます。

しかし、これらのクラスにJSPからアクセスしようとすると、デプロイされたwarにはJDBCドライバクラスが含まれている必要があります。展開されたwarファイルにすべての必要なクラスがあるためには、アプリケーションに必要なすべてのライブラリを 'WEB-INF/lib'に含める必要があります。それらを追加してwarファイルを再デプロイしてみてください。