0

Я использую Eclipse Java EE IDE для Java Web Developers и Tomcat v7.0. Я настроил сервер и связал динамический веб-проект с tomcat. Я работаю локально (localhost).Подключение к MySQL с использованием JBDC с Java EE с использованием шаблона проектирования MVC

У меня есть класс Connection, который заключается в следующем:

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 

public class Conexion { 

    private static Connection conexion = null; 

    private Conexion() { 

    } 

    public static Connection getInstancia() { 
     if (conexion == null) { 
      try { 
       Class.forName("com.mysql.jdbc.Driver"); 
       conexion = DriverManager.getConnection(
         "jdbc:mysql://localhost/Esquema_VentaLibros","gustavo", "123581321"); 

      } catch (SQLException sqlex) { 
       sqlex.printStackTrace(); 
      } catch(ClassNotFoundException cnfex) { 
       cnfex.printStackTrace(); 
      } 
      return conexion; 
     } 
     else { 
      return conexion; 
     } 
    } 

} 

В моем файле index.jsp У меня есть форма для пользователей могут войти в систему. В зависимости от того, правильно или нет журнала, я хочу, чтобы перенаправить на один просмотр (welcome.jsp) или другой View (Denegate.jsp) через контроллер называется ControladorLogin

Итак, в моем ListaDeQueries классе у меня есть логин метод, который этот

public class ListaDeQueries { 

    private static PreparedStatement pst; 
    private static String query = ""; 

    public static boolean loguear(String usr, String pass) { 
     query = "select * from Usuario where username = ? and password = ?"; 

     try { 
      pst = Conexion.getInstancia().prepareStatement(query); 
      pst.setString(1, usr); 
      pst.setString(2, pass); 
      pst.executeQuery(); 
      return true; 
     } catch (SQLException e) { 
      e.printStackTrace(); 
      return false; 
     } 

    } 

} 

Тогда в моем Servlet ControladorLogin я называю такой метод, как это:

protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     if(ListaDeQueries.loguear(request.getParameter("usuario"), request.getParameter("clave"))) { 
      request.getRequestDispatcher("Welcome.jsp").forward(request, response); 
     } 
     else { 
      request.getRequestDispatcher("Denegate.jsp").forward(request, response); 
     } 
    } 

Это моя маленькая форма в index.jsp:

<form method="post" action="ControladorLogin"> 
     Usuario: <input type="text" name="usuario"/> <br/> 
     Clave: <input type="password" name="clave"/> <br/> 
     <input type="submit" value="Entrar"/> 
    </form> 

Проблема заключается в том, что я получаю ClassNotFoundException для драйвера MySQL: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver, но я добавил библиотеку correctrly. В свойствах проекта> Java сборки Path> Библиотеки> Add External JARs, а затем добавили банку, который приходит в этом файле: http://www.mysql.com/downloads/connector/j/

Это полный StackTrace:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521) 
    at java.lang.ClassLoader.loadClassInternal(Unknown Source) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Unknown Source) 
    at edu.itla.diaz.modelo.Conexion.getInstancia(Conexion.java:18) 
    at edu.itla.diaz.modelo.ListaDeQueries.loguear(ListaDeQueries.java:15) 
    at edu.itla.diaz.controladores.ControladorLogin.doPost(ControladorLogin.java:30) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:641) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
04/12/2012 01:04:45 PM org.apache.catalina.core.StandardWrapperValve invoke 
GRAVE: Servlet.service() para servlet edu.itla.diaz.controladores.ControladorLogin lanzó excepción 
java.lang.NullPointerException 
    at edu.itla.diaz.modelo.ListaDeQueries.loguear(ListaDeQueries.java:15) 
    at edu.itla.diaz.controladores.ControladorLogin.doPost(ControladorLogin.java:30) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:641) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
+0

У вас есть проблема с потоками безопасности и ресурсом, связанная с переносом 'Connection' как переменной' static'. Я предлагаю повторить учебники JDBC. – BalusC

ответ

1

Хотя вы уже упоминали о добавлении баночки. Но много раз в прошлом я испытал java.lang.ClassNotFoundException, если jar не находится в физическом месте.

Я бы предложил разместить mysql-jdbc.jar в физическом месте до каталога /WEB-INF/lib вашего проекта. После этого затмение позаботится обо всем остальном.

Это также хорошая практика для сторонних зависимостей в каталоге /WEB-INF/lib.

+1

Абсолютно не возитесь со свойствами пути построения. Просто отпустите JAR в '/ WEB-INF/lib'. Это все. Eclipse будет делать магию. – BalusC

+0

@BalusC: Да, я знаю это ... :) Позвольте мне отредактировать ответ. –