# Servlet kann Funktion nicht aufrufen



## leo476 (6. Jul 2007)

hallo,
ich habe ein problem mit dem ich mich jetz schon seit tagen rumärger. ich weiss einfach nicht woher es kommt. ich möchte lediglich eine funktion in einem servlet aufrufen. bei älteren projekten hat dies auch immer geklappt. ich weiss nicht woran es liegt. ich hoffe das ihr mir helfen könnt !!!

Servlet:

```
package controller;

import java.io.PrintWriter;
import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.sql.DataSource;
import com.mysql.jdbc.ResultSet;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.*;
import model.Kunde;
import model.SqlData;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

public class GetSQ extends HttpServlet {
	
	public void doGet (HttpServletRequest rq,
            HttpServletResponse rs)
	throws ServletException, IOException
	{
		rs.setContentType("text/html");
		PrintWriter out = rs.getWriter();
		
	    SqlData.getSqlData();
	
		//out.println("test");

	}
}
```



normale Java-Klasse:

```
package model;

import java.net.InetAddress;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import javax.sql.DataSource;
import com.mysql.jdbc.ResultSet;
import com.mysql.jdbc.ResultSetMetaData;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

public class SqlData{
	
    static MysqlDataSource mdatasource = new MysqlDataSource();
    static DataSource datasource;
	static Statement statement; 
	static Connection connection;
	static ResultSet  ResultSet;
	
		
//	public static void main(String[] args) throws SQLException{
//		getSqlData();
//	}
	
	public static void getSqlData()  {
	
		mdatasource.setURL("jdbc:mysql://localhost:3306/syslog");
		mdatasource.setUser("syslog");
		mdatasource.setPassword("syslog");
		datasource = (DataSource)mdatasource;

   try {
	    connection = datasource.getConnection();
		connection.setAutoCommit(false);
		statement = connection.createStatement();
		
		ResultSet =  (ResultSet) statement.executeQuery( "select * from exception");
		ResultSetMetaData rsmd = (ResultSetMetaData) ResultSet.getMetaData();
		int i = 0, n = rsmd.getColumnCount();
		
	        while( ResultSet.next() ) {
	        for( i=1; i<=n; i++ ) 
	            System.out.print(   ResultSet.getString( i )  );
	        }
        }
   catch (SQLException e) {
		    System.out.println("Abfrage fehlgeschlagen.");
			e.printStackTrace();
	}
	     
		System.out.println("hallo");
	}
}
```


Fehlermeldung:

java.lang.NoClassDefFoundError: com/mysql/jdbc/ResultSetMetaData
	controller.GetSQ.doGet(GetSQ.java:27)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

________

ich hoffe ihr könnt mir helfen.
vielen dank schonmal !!!!!

lg


----------



## HLX (6. Jul 2007)

Hallo Leo,

deine Anwendung findet die Klasse ResultSetMetaData nicht. Dem Package-Namen nach zu Urteilen scheint sie Bestandteil des JDBC-Treibers deiner Datenbank zu sein. Du musst diesen Treiber entweder in deine Anwendung einbinden oder noch besser: deinem Servlet Container (oder Application-Server) bekannt machen. Beim Tomcat kannst du das entsprechende JAR in ein bestimmtes Verzeichnis (ich glaube "common\lib") kopieren, so dass es gefunden wird.


----------



## leo476 (6. Jul 2007)

vielen dank jetzt läufts.

ich habe die jar datei ins common/lib verzeichnis kopiert. ich habe es im projekt aber auch eingebunden und im projektordner unter lib gespeichert.

kann ich mich nicht irgednwie darauf beziehen ? ich möchte das programm sppäter protierbar machen. und da wäre es schon besser wenn man nicht jedes mal die jar datei ins serververzeichnins kopieren muss.

vielen dank !!


----------



## HLX (6. Jul 2007)

Das kommt immer auf den Hintergrund an. Wenn du von vornherein weist, dass du nur MySQL-Datenbanken unterstützen wirst, kannst du das JAR natürlich im Lib-Verzeichnis deiner Web-Anwendung einbinden. Sollte das nicht klar sein, würde ich es dem Betreiber überlassen.

Dem Code nach zu Urteilen ist ersteres der Fall also brauchst du es nicht ins common\lib zu kopieren sondern nur an deine Anwendung zu hängen.


----------

