2013-10-14 4 views
0

Я пытаюсь сделать систему Войти с помощью JSP и подключиться к базе данных MySQL, и получить следующее сообщение об ошибке: Error messagecom.mysql.jdbc.Driver не удается скомпилировать для JSP

Мой код:

<%@ page language="java" contentType="text/html; charset=UTF-8" 
pageEncoding="UTF-8" 
import="com.core.bibit.service.Security" 
import="javax.servlet.*" 
import="java.util.*" 
import="com.mysql.jdbc.Driver" 
%> 
<% 
String username = request.getParameter("username"); 
String password = request.getParameter("password"); 

boolean test = new Security().validateUser(username, password); 
System.out.println("Authen: " + test); 
if(test){ 
    response.sendRedirect("test.jsp"); 
}else{ 
    response.sendRedirect("about.jsp"); 
} 
%> 

и

package com.core.bibit.service; 
import com.mysql.jdbc.Driver; 

import java.io.IOException; 
import java.io.UnsupportedEncodingException; 
import java.security.MessageDigest; 
import java.security.NoSuchAlgorithmException; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.util.Arrays; 

import sun.misc.BASE64Decoder; 
import sun.misc.BASE64Encoder; 

public class Security { 

    private final static int ITERATION_NUMBER = 1000; 

    public Security(){ 

    } 

    ... 

    public boolean validateUser(String userName, String password){ 

     boolean valid = false; 

     Connection con = null; 
     PreparedStatement ps = null; 
     ResultSet rs = null; 

     try{ 
      Class.forName("com.mysql.jdbc.Driver"); 
      con = DriverManager.getConnection("jdbc:mysql://localhost:8889/bibit?" 
                  + "user=root&password=root");     

      String query = "SELECT * FROM bibit.User WHERE username = ?"; 

      ps = con.prepareStatement(query); 
      ps.setString(1, userName); 

      rs = ps.executeQuery(); 

      String digest, salt; 

      if(rs.next()){ 
       digest = rs.getString("PASSWORD"); 
       salt = rs.getString("SALT"); 

       System.out.println("Digest: " + digest); 
       System.out.println("Salt: " + salt); 

       if(digest == null || salt == null){ 
        System.out.println("IF1"); 
        throw new SQLException("Database inconsistant Salt or Digested Password altered"); 
       } 
       if(rs.next()){ 
        System.out.println("IF2"); 
        throw new SQLException("Database inconsistent two CREDENTIALS with the same LOGIN"); 
       } 
       /*else{ 
        System.out.println("IF3"); 
        digest = "000000000000000000000000000="; 
        salt = "00000000000="; 
       }*/ 

       byte[] bDigest = base64ToByte(digest); 
       byte[] bSalt = base64ToByte(salt); 

       //compute digest 
       byte[] proposedDigest = getHash(ITERATION_NUMBER, password, bSalt); 
       System.out.println("bDigest: " + bDigest); 
       System.out.println("proDigest: " + proposedDigest); 

       System.out.println("Response: " +  Arrays.equals(proposedDigest, bDigest)); // && valid) 
       valid = Arrays.equals(proposedDigest, bDigest); 
      } 




     }catch(Exception e){ 
      e.printStackTrace(); 
     }finally{ 
      try { 
      // rs.close(); 
       //ps.close(); 
       //con.close(); 
      } catch (Exception e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

      return valid; 

     } 
    } 

} 

Я использую TomEE/Tomcat 7.0 и моя библиотека MySQL является: MySQL-разъем-Java-5,1, и я пытался добавить его в файл server.xml:

<Resource name="jdbc/DATABASENAME" type="javax.sql.DataSource" maxActive="4" maxIdle="2" username="root" password="" maxWait="23000" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:8889/bibit"></Resource> 

Может кто-нибудь объяснить, что не так, и, возможно, как это исправить или просто нажать в правильном направлении?

РЕШЕНИЕ: добавить коннектор MySQL через Eclipse, если один запустить Sever через него и импорт файлов в одной строке, как показано ниже

+0

Скорее всего, JDBC-драйвер jar не находится в classpath веб-приложения; начните с проверки там. – chrylis

+0

Вы скопировали файл накопителя в папку /lib ?! –

+1

, кстати, почему вы не используете пул соединений ?! а также вы не закрываете соединение! это будет неприятный чувак. –

ответ

0

Ваш код JSP не нуждается во всех импорте, кроме Security класс, удалите все остальные

<%@ page language="java" contentType="text/html; charset=UTF-8" 
pageEncoding="UTF-8" import="com.core.bibit.service.Security" %> //only Security class is needed 

Проверьте метод getConnection

public static Connection getConnection(String url, 
             String user, 
             String password) throws SQLException 

Попытки установить соединение с данным URL базы данных. DriverManager пытается выбрать подходящий драйвер из набора зарегистрированных JDBC-драйверов.

Параметры:

  • URL - база данных URL вида JDBC: подпротокол: подимени
  • пользователь - пользователь базы данных, от имени которого соединение делается
  • пароль - действие пользователя пароль

Убедитесь, что все необходимые банки находятся в пути к классам

+0

Ну, оба ответа немного помогли, но я получаю эту ошибку сейчас: java.sql.SQLException: Не найдено подходящего драйвера для jdbc : mysql: // localhost: 8889/bibit –

+0

@LarsNielsen: изменить url 'jdbc: mysql: // localhost: 3306/bibit'. 3306 - это порт по умолчанию mysql –

+0

, но мой сервер работает на 8889 –

2

Вы должны использовать разделенный запятыми список импорта, например

<%@ page language="java" contentType="text/html; charset=UTF-8" 
pageEncoding="UTF-8" import="com.core.bibit.service.Security, javax.servlet.*,java.util.*, com.mysql.jdbc.Driver"%> 

и убедитесь, что у вас есть необходимые баночки/классы в пути класса (также во время работы)

+0

спасибо фиксированной части проблемы –

Смежные вопросы