Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Problema driver connessione

    Salve ho creato una pagina jsp ma ho problemi di connessione:

    ecco la classe che uso :

    codice:
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.sql.*;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    
    public class Db{
           private Connection connect;
    
           public Connection connettialdatabase(String server,String nomedb,String username,String password){
                try { 
                    try {
                        Class.forName("com.mysql.jdbc.Driver")  ;  	// Imposta la connessione al server e al database
                    } catch (ClassNotFoundException ex) {
                        Logger.getLogger(Db.class.getName()).log(Level.SEVERE, null, ex);
                    }
             //       prova="jdbc:mysql://"+server+"/"+nomedb+",\""+username+"\",\""+password+"\"";
                   connect = DriverManager.getConnection("jdbc:mysql://"+server+"/"+nomedb,username,password);
                } catch (SQLException ex) {
                   Logger.getLogger(Db.class.getName()).log(Level.SEVERE, null, ex);
               }
               return connect;
           }
        
    
    }
    e la pagina jsp:

    codice:
      <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    
    <%@ page import="java.sql.*" %>
    -
    <!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=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
    
        <jsp:useBean id="db" scope="page" class="classi.Db" ></jsp:useBean>
        
        
        
            <% 
            
            Connection connect= db.connettialdatabase("localhost","java_db","root","root");
       	
    	out.println(connect);
            
    
            %>
    	Torna a index
    </body>
    </html>
    La classe e la pagina sarebbero più lunghe ma tutto è commentetao per testarle , inoltre ho fatto una classe test per provare la classe Db e questa mi rende la connessione perfettamente:

    codice:
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.sql.Connection;
    
    
    public class Test {
    
    	/**
    	 * @param args
    	 * @throws IOException 
    	 * @throws FileNotFoundException 
    	 */
    	public static void main(String[] args) throws FileNotFoundException, IOException {
    		// TODO Auto-generated method stub
    		Db d =new Db();
    		Connection connect =d.connettialdatabase("localhost", "java_db", "root", "root");
    		System.out.println(connect);
    	}
    
    }
    La pagina jsp mi rende invece null e un bel java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

    Quale potrebbe essere il problema?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    L'unica possibilità è che il driver non è nel ClassPath dell'applicazione, quindi non è disponibile tra le librerie della WebApp.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    La classe test è nello stesso progetto ,quindi se la classe test funziona , avendo le stesse librerie della pagina jsp anche questa dovrebbe funzionare

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Non direi.
    La classe Test è un'applicazione stand-alone e funziona con il classpath eventualmente impostato nel JAR o nel sistema. Quella classe non ha alcun senso in questo contesto.

    Una pagina JSP fa parte di una WebApplication: essa funziona all'interno di un context (generato dal Servlet Container, come Tomcat, o un Application Server, come GlassFish), che se ne fregano delle impostazioni di ClassPath di un eventuale JAR (che nulla ha a che vedere con questo tipo di applicazioni) o del sistema.

    Credo che tu stia facendo un po' di confusione fra JSE (i JAR e la classe Test) e JEE (tutto un altro mondo).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Scusami come imposto le librerie esterne di una web application ? Clicco sul progetto col destro proprietà>java build path e da lì add external jar e seleziono il jar (nel mio caso mysql-connector) , Questa libreria diventa utilizzabile da tutte le pagine jsp del progetto che dalle classi java presenti nel progetto o mi sbaglio io?

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Purtroppo io non uso Eclipse, ma ad occhio la procedura mi sembra corretta.
    L'impacchettamento dovrebbe produrre un file WAR contenente tutto il necessario.

    Non so che Servlet Container / Application Server usi, ma se usi Tomcat, verifica che al'interno della cartella "webapps" vi sia la cartella del tuo progetto. All'interno di questa deve esserci una cartella "WEB-INF" e, all'interno di quest'ultima, una cartella "lib" con dentro tutte le librerie necessarie (compreso il Connector-J).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Come diceva il buon Lele, il classpath di un progetto web si divede in 2 parti :
    Il classpath di compilazione (nel tuo caso classpath eclipse) e il classpath di runtime (classpath del server). Dato che non è detto che i due classpath debbano essere uguali quando aggiungi un jar (soprattutto se esterno) in eclipse lui te lo aggiunge al primo classpath cioè a quello di compilazione e tale jar non ti verrà esportato all'interno del war che poi andrai a deployare sul server.
    Per far si che eclipse ti inserisca questo/i jar all'interno della cartella web-inf/lib devi specificarglielo; per farlo ci sono diversi modi di solito io uso la voce "Deployment Assembly" che trovi tra le proprietà del progetto, per poi selezionare "Java Build Path Entry" per aggiugere i jar che vorrò inserire all'interno dell'applicazione.
    (Anzi per dirla tutto io di solito non faccio deployare eclipse e mi faccio il mio bel war con "Ant" o Maven...)

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da francesco.muia
    Come diceva il buon Lele, il classpath di un progetto web si divede in 2 parti :
    Il classpath di compilazione (nel tuo caso classpath eclipse) e il classpath di runtime (classpath del server). Dato che non è detto che i due classpath debbano essere uguali quando aggiungi un jar (soprattutto se esterno) in eclipse lui te lo aggiunge al primo classpath cioè a quello di compilazione e tale jar non ti verrà esportato all'interno del war che poi andrai a deployare sul server.
    Per far si che eclipse ti inserisca questo/i jar all'interno della cartella web-inf/lib devi specificarglielo; per farlo ci sono diversi modi di solito io uso la voce "Deployment Assembly" che trovi tra le proprietà del progetto, per poi selezionare "Java Build Path Entry" per aggiugere i jar che vorrò inserire all'interno dell'applicazione.
    (Anzi per dirla tutto io di solito non faccio deployare eclipse e mi faccio il mio bel war con "Ant" o Maven...)
    Ecco. Non usando Eclipse non potevo sapere che funzionava in questo modo.

    Io uso NetBeans che, quando vengono aggiunte librerie esterne ad un progetto, le aggiunge automaticamente all'impacchettamento (all'interno di una directory "lib" nella "dist" assieme al JAR o direttamente dentro al WAR se si tratta di un progetto Web).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Con il metodo di francesco.muia funziona , ti ringrazio perchè non sapevo venirne fuori.Ciao e Grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.