Avatar billede jacobve Nybegynder
03. august 2002 - 15:38 Der er 5 kommentarer og
1 løsning

NoClassDefFoundError i runtime, selv den er i classparth??

Jeg er lige startet på noget jsp/servlet osv. og er løbet ind i et problem.

Jeg bruger Tomcat som webserver og mysql som db.

Jeg har "stjålet" og tilpasset et eksempel fra disky (http://www.eksperten.dk/spm/136550) om hvordan jeg laver en databaseconnection og jeg har fået den til at fungere når jeg laver en main-driver og eksekvere lidt sql mod databasen.
Nu vil jeg så forsøge at bruge denne database connection i en servlet der ser således ud:

***************************************************

package dbcon;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.*;
import database.*; //egen pakke: connection til mysql

import javax.servlet.ServletException;

public class DatabaseServlet extends HttpServlet
{
    private Database conn;
   
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException
    {
        conn = new Database();
        conn.open();

        conn.close();

        response.setContentType("text/html");
        //response.setContentType("text/plain");
       
        PrintWriter out = response.getWriter();

//        ResultSet result = conn.doQuery("SELECT * FROM test");
       
        out.println("<html>");
        out.println("<body>");
        out.println("<head>");
        out.println("<title>Database Connection</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Test af DB connection</h1>");
        out.println("en connection er åben... hvordan skal den bruges?<br>");
/*
        try
        {
            //flytter igennem resultsættet
            while(result.next())
            {
                String temp = result.getString(1);
                out.println(temp+"<br>");
            }
        }
        catch (SQLException e)
        {
            System.err.print("SQLException: ");
            System.err.println(e.getMessage());
        }
*/

//        conn.close();
        out.println("Connection er lukket igen...");
        out.println("</body>");
        out.println("</html>");
    }

};

***********************************************
Selve servletten compilere fint men når den skal afvikles får jeg fejlen:

javax.servlet.ServletException: Invoker service() exception
..osv...

root cause
java.lang.NoClassDefFoundError: database/Database
at dbcon.DatabaseServlet.doGet(DatabaseServlet.java:21)
...osv...

Det tyder på at den ikke kan finde min klasse Database, men den er altså i min classpath (hvorfor den godt kan compile).
Spørgsmålet er så:
men mangler jeg at gøre noget så tomcat kan finde Database.class?

(det skal sige at hvis jeg udkommentere alt hvor Database klassen indgår, kører servletten fint)
Avatar billede r9 Nybegynder
03. august 2002 - 15:52 #1
smid tomcat væk, og brug istedet en ordenlig jsp engine:
Brug resin, og dine problemmer forvinder :-)
http://www.caucho.com/download/index.xtp
Avatar billede =maddog= Nybegynder
03. august 2002 - 16:00 #2
Ofte skal man loade en database klasse dynamisk v.h.a. classloaderen istedet for a instatiate den
Class.forName("classpath");
hvor classpath er klassestien til din database driver.
I øvrigt har r9 ret, har du knasterne så få Resin. Jeg ville ønske jeg selv havde råd-
Avatar billede =maddog= Nybegynder
03. august 2002 - 16:00 #3
a instatiate -->  at instantiate
sorry
Avatar billede jacobve Nybegynder
03. august 2002 - 16:10 #4
r9 << ja, det er nok ikke muligt :-)

=maddog= << Jeg prøver lige det du foreslår.
Avatar billede jacobve Nybegynder
03. august 2002 - 16:37 #5
Jeg gik en anden vej og fandt en løsning til problemet. Nemlig at lade Tomcat finde den Database.class.

Løsningen var at ligge min .jar fil indeholdende Database i webapps/lib, det er et af de steder som Tomcat kigger efter classes, når den loader. Fandt svaret i professional JSP 2nd edition, s. 736 (fra wrox)
Avatar billede r9 Nybegynder
03. august 2002 - 16:39 #6
jacobve og =maddog=:

Resin er gratis under udvikling
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester