Martin Jung: Class.forName() findet die Klasse nicht

Beitrag lesen

Hi,

So sieht die Zeile in meinem Java Code aus:
Class ActionClass = Class.forName(nameOfClass);

und die Klasse, die ich verusche aufzurufen, liegt im selben Verzeichnis (und Package), wie das aufrufende Servlet.

Hat jemand einen Tipp, wie ich rausfinden kann, wieso die Klasse nicht gefunden wird?

Dein Servlet liegt unter WEB-INF/classes oder 'gejared' unter WEB-INF/lib, richtig?

Wenn die Klasse im selben Verzeichnis liegt wie Dein Servlet, dann muss sie auch zum selben package gehören, sonst funktioniert das nicht.

Beispiel: voll-qualifizierter Name Deines Servlets:
de.cruz.servlet.MeinServlet (das package statement im Source code lautet dann: package de.cruz.servlet;)

dann sieht die Verzeichnisstruktur in Tomcat wie folgt aus:
WEB-INF/classes/de/cruz/servlet/MeinServlet.class (analog dazu im jar-file)

Angenommen, die Klasse MyActionClass heisst voll-qualifiziert:
com.anywhere.mypackage.MyActionClass (package com.anywhere.mypackage;)

dann sucht der ClassLoader in folgendem Verzeichnis nach der Klasse:
WEB-INF/com/anywhere/mypackage

Fehlt dieses (was ich vermute), bekommst Du obige Exception.

Das bedeutet, Du musst die Package-Struktur auf Dateisystemebene nachbilden. Wenn du Zugriff auf den Quellcode der ActionClass hast, entferne mal das package statement und schaue, ob es dann funktioniert, wenn das class file im selben Verzeichnis wie Deine Servlet-Klasse liegt (_muss_ funktionieren).

Viele Grüße,
Martin