MySQL ClassNotFoundException bei JSP

LXUS

Mitglied
Hallo zusammen,

ich habe eine Datenbankanbindung in einer Klasse geschrieben, die ein ResultSet zurückliefert.
getResultSet(strQuery)

Rufe ich diese Funktion aus einer anderen Klasse auf (bspw. aus der main) funktioniert das tadellos.
Der gleiche Aufruf in einer JSP meldet mir eine ClassNotFoundException.

Muss ich bei einer JSP irgendetwas spezielles beachten?

Danke!

VG

LXUS
 

LXUS

Mitglied
Hallo,

danke für den Tip, aber dort ist die Klasse eingebunden... :bahnhof:

Java:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1" import="myUtils.dbUtils, java.sql.*"%>

in der dbUtils steht die getResultSet. Der Aufruf erfolgt mittels

Java:
ResultSet rs = dbUtils.getResultSet(strQueryString);

...wie gesagt in der Testklasse funktionierts. Ich hab nen try/catch-Block drum und
ein Fehler wird auch nicht angezeigt... :bahnhof:

Viele Grüße

LXUS
 

LXUS

Mitglied
bin mir nicht sicher, hier mal die komplette Fehlermeldung

Java:
type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

org.apache.jasper.JasperException: An exception occurred processing JSP page /tst.jsp at line 59

59: ResultSet rs = dbUtils.getResultSet(strQueryString);



Stacktrace:
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:510)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:419)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


root cause 

java.lang.NullPointerException
	myUtils.dbUtils.getResultSet(dbUtils.java:85)
	org.apache.jsp.tst_jsp._jspService(tst_jsp.java:115)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


note The full stack trace of the root cause is available in the Apache Tomcat/6.0.29 logs.
 

LXUS

Mitglied
ok, und was muss mach ich nu? Der Fehler wird immer beim Aufruf der getResultSet geworfen - und nur bei der JSP.
In einer Standard-Klasse kann ich das erhaltene ResultSet auslesen.
 
M

maki

Gast
Sieh dir doch mla den Stacktrace genau an:

Code:
..
root cause 
 
java.lang.NullPointerException
    myUtils.dbUtils.getResultSet(dbUtils.java:85)
...
In Zeile 58 in deiner dbUtils Klasse (schlechter Name btw.) fliegt eine NPE, da wird versucht eine Nullreferenz zu dereferenzieren.
 

LXUS

Mitglied
Die NPE fliegt aber nur in der JSP - und genau das wundert mich - in einer "normalen" Klasse mit ner Main-Methode funktioniert der Aufruf tadelos und ich kann das ResultSet auslesen.

Das heißt der Fehler muss über die JSP verursacht werden.

oder nicht?
 

Michael...

Top Contributor
Vielleicht wird ja eine andere Exception geworfen, die abgefangen aber nicht ausgegeben wird, dadurch wird eine Variable nicht initialisiert --> NPE
Für genaueres müsste man den Code kennen speziell Zeile 85 von dbUtils und was vorher so passiert.
 

LXUS

Mitglied
hier mal die getResultSet

Java:
	public static ResultSet getResultSet(String strQueryString){	
		try {
			Connection con = getDBConn();			
			Statement stmt = con.createStatement();
			System.out.println("Statement erzeugt");
			ResultSet rs = stmt.executeQuery(strQueryString);	
			System.out.println("ResultSet erzeugt");
			return rs;
		} catch (SQLException ex){			
			return null;
		}		
	}


und der Aufruf in der Testklasse


Java:
	public static void main(String[] args) {

		try{
		 String strQuery = "SELECT * FROM tblTest";
		 ResultSet rs = dbUtils.getResultSet(strQuery);
         while (rs.next()){
        	System.out.println(rs.getString(2));
         }
		} catch (SQLException ex) {
			ex.printStackTrace();
		}


	}
 

Michael...

Top Contributor
hier mal die getResultSet

[JAVA=9] } catch (SQLException ex){
return null;
}[/code]
<eigenlob>Man so langsam scheine ich hellseherische Fähigkeiten zu entwickeln. Hab die letzten Tage schon ein paar mal in die Glaskugel geschaut und ins Schwarze getroffen ;-) Das könnte wieder sowas werden</eigenlob>

Vermutlich wird in der Methode getResultSet eine Exception geworfen, die liefert dann null zurück welches vom Aufrufer der Methode nicht überprüft wird. --> NPE
Die NPE könnte also nur ein Folgefehler sein.

In ein catch Block gehört (rundsätzlich) ex.printStackTrace()
 

LXUS

Mitglied
Aber wie kann es denn sein, die getResultSet einmal funktioniert und einmal nicht.
Die Abfrage ist exakt die gleiche, die Fehlerbehandlung ist die gleiche. Einziger Unterschied:
Der Aufruf erfolgt einmal in einer Klasse (funktioniert) und einmal in einer JSP (funktioniert nicht).

Ich kann es nicht nachvollziehen.
 

LXUS

Mitglied
Hier mal noch der StakTrace:

Java:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:169)
	at myUtils.dbUtils.getDBConn(dbUtils.java:36)
	at myUtils.dbUtils.getResultSet(dbUtils.java:84)
	at org.apache.jsp.Log_jsp._jspService(Log_jsp.java:117)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Thread.java:619)
17.08.2010 16:44:29 org.apache.catalina.core.StandardWrapperValve invoke
SCHWERWIEGEND: Servlet.service() for servlet jsp threw exception
java.lang.NullPointerException
	at myUtils.dbUtils.getResultSet(dbUtils.java:85)
	at org.apache.jsp.Log_jsp._jspService(Log_jsp.java:117)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Thread.java:619)
 
M

maki

Gast
Die mySQL Jar ist nicht im classpath der WebApp ;)
Sollte unter WEB-INF/lib landen, je nach IDE löst man das anders.
 

Michael...

Top Contributor
siehst da fliegt ja bereits in der
Code:
getDBConn()
eine Exception:
Du hast das mySQL jar nicht/nicht korrekt in Dein JSP Projekt eingebunden oder auf dem Server bereit gestellt:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

Und die Antwort hättest Du schon letzte Woche haben können, wenn Du die Exception gleich ausgegeben hättest ;-)
 

LXUS

Mitglied
erstmal wissen, was man ausgibt - soooo viel Überblick habe ich noch nicht in Java, dass
ich sofort weis was ich wo wie auslesen und posten muss... :rtfm:

Habets doch a bisserle Geduld mit mir.... :oops:
 

LXUS

Mitglied
bin heute auf einem Auge blöd :bloed::idea:
habe versucht aus eclipse raus zu kopieren, heijajei :oops:

naja, jedenfalls geht das jetzt! :applaus::toll:

Vielen herzlichen Dank!

btw: wo kann ich denn einstellen, dass die JSP extern aufgerufen wird und nicht über den internen Browser?
 

Ähnliche Java Themen


Oben