# MYSQL und APACHE ????

## barthi

Hi!

Irgendwie find ich keine Lösung für mein problem. Und zwar möchte ich meine JSP-Seiten mit einer MYSQL-Datenbank verbinden. MYSQL läuft und die JSP-Seiten können auch angezeigt werden. Aber wie stell ich denn jetzt die Verbindung her? 

Den Java-Code dafür kenn ich. Mein Problem ist, dass ich nicht weiß, wo zum Geier ich den Treiber "mm.mysql-2.0.13-bin.jar" hin kopieren muß, bzw. wie ich meinem Apache klarmache, das er diesen bitte benutzen soll.

Ich bin mir sicher, ihr könnt mir helfen.

Gruß,

barthi

----------

## swain

mmh wenn mich meine grauen Zellen nicht ganz trüben, müßte doch deine Applikation die Verbindung aufbauen und nicht der webserver...

Ich bin kein Coder _nur_ ein Admin...

----------

## lutzh

Was für eine JSP-Engine benutzt du denn? Tomcat?

Dann wahlweise in

$CATALINA_HOME/common/lib (für alle webapps) 

oder

$CATALINA_HOME/webapps/<deine applikation>/WEB-INF/lib

(nur für die eine webapp)

$CATALINA_HOME sollte das Installationsverzeichnis deines Tomcat sein, also das Verzeichnis, in dem sich z.B. auch das webapps - Verzeichnis befindet.

Weiß jetzt leider auch gerade nicht, wo das bei Gentoo ist, und kann auch gerade nicht gucken. 

Hoffe, das hilft dir trotzdem.

----------

## barthi

Also ich hag die Datei jetzt mal da hin kopiert. Aber es geht trotzdem nicht.

Wenn ich im Browser direkt den Port 3306 eingebe, bekomme ich folgende Meldung:

```
 + 4.0.13-logi=4,}UqZ, ÿBad handshake
```

Habt ihr vielleicht noch ein paar nähere Infos?

----------

## lutzh

Na, "es geht trotzdem nicht" ist ja ein bisschen vage...

Welche Fehlermeldung bekommst du denn in Java? Was sagt denn z.B. deine Tomcat-Logdatei $CATALINA_HOME/logs/catalina.out ?

----------

## barthi

Alles zu Posten wäre zu viel. Hier mal die letzten Einträge. Ich hoffe, dass hilft bei der Fehlersuche. Ich kann leider nichts damit anfangen. Scheint aber irgendwie an den Zugriffsrechten zu hängen, oder?

```

Oct 1, 2003 12:03:56 AM org.apache.tomcat.util.net.PoolTcpEndpoint closeServerSocket

SEVERE: Caught exception trying to unlock accept.

java.net.ConnectException: Connection refused

        at java.net.PlainSocketImpl.socketConnect(Native Method)

        at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305)

        at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:171)

        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:158)

        at java.net.Socket.connect(Socket.java:426)

        at java.net.Socket.connect(Socket.java:376)

        at java.net.Socket.<init>(Socket.java:291)

        at java.net.Socket.<init>(Socket.java:119)

        at org.apache.tomcat.util.net.PoolTcpEndpoint.closeServerSocket(PoolTcpEndpoint.java:326)

        at org.apache.tomcat.util.net.PoolTcpEndpoint.acceptSocket(PoolTcpEndpoint.java:397)

        at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:529)

        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)

        at java.lang.Thread.run(Thread.java:536)

Oct 1, 2003 12:03:56 AM org.apache.tomcat.util.net.PoolTcpEndpoint closeServerSocket

SEVERE: Caught exception trying to close socket.

java.lang.NullPointerException

        at org.apache.tomcat.util.net.PoolTcpEndpoint.closeServerSocket(PoolTcpEndpoint.java:338)

        at org.apache.tomcat.util.net.PoolTcpEndpoint.acceptSocket(PoolTcpEndpoint.java:397)

        at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:529)

        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)

        at java.lang.Thread.run(Thread.java:536)

Oct 1, 2003 12:03:56 AM org.apache.tomcat.util.net.PoolTcpEndpoint acceptSocket

WARNING: Reinitializing ServerSocket

Oct 1, 2003 12:06:10 AM org.apache.commons.modeler.Registry loadRegistry

INFO: Loading registry information

Oct 1, 2003 12:06:11 AM org.apache.commons.modeler.Registry getRegistry

INFO: Creating new Registry instance

Oct 1, 2003 12:06:14 AM org.apache.commons.modeler.Registry getServer

INFO: Creating MBeanServer

Oct 1, 2003 12:06:17 AM org.apache.coyote.http11.Http11Protocol init

INFO: Initializing Coyote HTTP/1.1 on port 8080

mod_jk location: /etc/apache/extra modules/mod_jk.so

Make sure it is installed corectly or  set the config location

Using <Listener className="org.apache.ajp.tomcat4.config.ApacheConfig"  modJk="PATH_TO_MOD_JK.SO_OR_DLL" />

Can't find workers.properties at /opt/jakarta/tomcat/conf/workers.properties

Please install it in the default location or  set the config location

Using <Listener className="org.apache.ajp.tomcat4.config.ApacheConfig"  workersConfig="FULL_PATH" />

Starting service Tomcat-Standalone

Apache Tomcat/4.1.24

Oct 1, 2003 12:06:38 AM org.apache.coyote.http11.Http11Protocol start

INFO: Starting Coyote HTTP/1.1 on port 8080

Oct 1, 2003 12:06:38 AM org.apache.jk.common.ChannelSocket init

INFO: JK2: ajp13 listening on /0.0.0.0:8009

Oct 1, 2003 12:06:38 AM org.apache.jk.server.JkMain start

INFO: Jk running ID=0 time=10/153  config=/opt/tomcat/conf/jk2.properties

Invalid authorization specification: Access denied for user: 'barthi@localhost' (Using password: YES)

Invalid authorization specification: Access denied for user: 'barthi@localhost' (Using password: YES)

Invalid authorization specification: Access denied for user: 'barthi@localhost' (Using password: YES)

Invalid authorization specification: Access denied for user: 'barthi@localhost' (Using password: YES)

Invalid authorization specification: Access denied for user: 'barthi@localhost' (Using password: YES)

Stopping service Tomcat-Standalone

Oct 1, 2003 11:31:32 AM org.apache.commons.modeler.Registry loadRegistry

INFO: Loading registry information

Oct 1, 2003 11:31:32 AM org.apache.commons.modeler.Registry getRegistry

INFO: Creating new Registry instance

Oct 1, 2003 11:31:36 AM org.apache.commons.modeler.Registry getServer

INFO: Creating MBeanServer

Oct 1, 2003 11:31:39 AM org.apache.coyote.http11.Http11Protocol init

INFO: Initializing Coyote HTTP/1.1 on port 8080

mod_jk location: /etc/apache/extra modules/mod_jk.so

Make sure it is installed corectly or  set the config location

Using <Listener className="org.apache.ajp.tomcat4.config.ApacheConfig"  modJk="PATH_TO_MOD_JK.SO_OR_DLL" />

Can't find workers.properties at /opt/jakarta/tomcat/conf/workers.properties

Please install it in the default location or  set the config location

Using <Listener className="org.apache.ajp.tomcat4.config.ApacheConfig"  workersConfig="FULL_PATH" />

Starting service Tomcat-Standalone

Apache Tomcat/4.1.24

Oct 1, 2003 11:32:00 AM org.apache.coyote.http11.Http11Protocol start

INFO: Starting Coyote HTTP/1.1 on port 8080

Oct 1, 2003 11:32:00 AM org.apache.jk.common.ChannelSocket init

INFO: JK2: ajp13 listening on /0.0.0.0:8009

Oct 1, 2003 11:32:00 AM org.apache.jk.server.JkMain start

INFO: Jk running ID=0 time=10/153  config=/opt/tomcat/conf/jk2.properties

Cannot connect to MySQL server on localhost:3306. Is there a MySQL server running on the machine/port you are trying t

Invalid authorization specification: Access denied for user: 'barthi@localhost' (Using password: YES)

Invalid authorization specification: Access denied for user: 'barthi@localhost' (Using password: YES)

WebappClassLoader:     Additional JARs have been added : 'mm.mysql-2.0.13-bin.jar'

Invalid authorization specification: Access denied for user: 'barthi@localhost' (Using password: YES)

Invalid authorization specification: Access denied for user: 'barthi@localhost' (Using password: YES)

```

----------

## Miggi

Ich glaube du bringst da grundsätzlich ein paar Sachen durcheinander...

Ich zeige dir einmal einen typischen Apache, Tomcat, MySql Aufbau auf:

Apache und Tomcat werden am Besten mit mod_jk2 verbunden. Dazu musst du den Ajp1.3 Connector in Tomcats Server.xml auskommentieren:

```

<Connector className="org.apache.ajp.tomcat4.Ajp13Connector" port="8009" ....... />

```

Der PoolTcpConnector wird eigentlich in Tomcat 3.x eingesetzt.

Dannach musst du den Worker im Propertiy-File unter $CATALINA_HOME/conf/jk/worker.properties definieren:

```

workers.tomcat_home=/opt/tomcat

workers.java_home=/opt/sun-jdk-1.4.2.01

worker.list = tomcat1

worker.tomcat1.port=8009

worker.tomcat1.host=localhost

worker.tomcat1.type=ajp13

```

Das ganze geht natürlich auch mit einem Round-Robin Loadbalancing à la:

```

workers.tomcat_home=/opt/tomcat

workers.java_home=/opt/sun-jdk-1.4.2.01

worker.list = loadbalancer

worker.tomcat1.port=8009

worker.tomcat1.host=localhost

worker.tomcat1.type=ajp13

worker.tomcat1.lbfactor=10

worker.tomcat2.port=8010

worker.tomcat2.host=localhost

worker.tomcat2.type=ajp13

worker.tomcat2.lbfactor=10

worker.loadbalancer.type=lb

worker.loadbalancer.balanced_workers=tomcat1,tomcat2

```

Somit wäre eigentlich Tomcat konfiguriert, jetzt kommt Apache dran.

Zum lernen empfehle ich dir ApacheConf (hast du ja schon). Diesen gleich nach dem <Server> Tag definieren:

```

<Listener className="org.apache.ajp.tomcat4.config.ApacheConfig" modJk="/usr/apache2/modules/mod_jk.so" workersConfig="/opt/tomcat/conf/jk/workers.properties" jkLog="/opt/tomcat/logs/mod_jk.log" jkDebug="info" />

```

und ausserdem noch nach dem <Host> Tag:

```

<Listener className="org.apache.ajp.tomcat4.config.ApacheConfig"  append="true" />

```

ApacheConfig generiert ja $CATALINA_HOME/conf/auto/mod_jk.conf bei jedem Tomcat Start.

Im httpd.conf von Apache machst du jetzt einen Include:

```

Include $CATALINA_HOME/conf/auto/mod_jk.conf

```

Wenn du jetzt zuerst Tomcat startest und dannach den Apache, solltest du

bei einem Request auf http://localhost/ die Apache Startseite sehen, und bei http://localhost/index.jsp die von Tomcat.

Alles geklappt? Gut, dann gehts jetzt weiter mit Tomcat und MySQL. Voraussetzung ist natürlich, dass MySQL läuft und der User eingerichtet ist, sprich du dich mit dem MySQL Command-Line Client einloggen kannst. Auch muss der User dann die richtigen Privilegien um auf die Tabelle zuzugreifen haben.

Als graphischer Client kann ich dir TOra empfehlen. Ist zwar ursprünglich für Oracle, aber du kannst ihn auch für MySQL brauchen.

Den Zugriff auf MySQL definierst du am Besten via JNDI im server.xml:

```

<Resource name="jdbc/dsTC" auth="Container" type="javax.sql.DataSource" />

<ResourceParams name="jdbc/dsTC">

  <parameter>

    <name>driverClassName</name>

    <value>org.gjt.mm.mysql.Driver</value>

  <parameter>

    <name>url</name>

    <value>jdbc:mysql://localhost/deineDatenbank</value>

  </parameter>

  <parameter>

    <name>username</name>

    <value>mysqluser</value>

  </parameter>

  <parameter>

    <name>password</name>

    <value>mysqlpass</value>

  </parameter>

  <parameter>

    <name>maxActive</name>

    <value>20</value>

  </parameter>

  <parameter>

    <name>maxIdle</name>

    <value>3000</value>

  </parameter>

  <parameter>

    <name>maxWait</name>

    <value>100</value>

  </parameter>

</ResourceParams>

```

Somit ist der Zugriff auf die DB schön ausgelagert und bei einem Umzug auf ein anderes RDBMs kannst du das schon anpassen ohne den Code nue kompilieren zu müssen.

Vor Tomcat 4.1.3 musst du zusätzlich noch den DataSource Pool angeben:

```

   ...

  <parameter>

    <name>factory</name>

    <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>

  </parameter>

   ...

```

und bei Tomcat < 4.1.3 das commons_dbcp.jar, commons-collection.jar und commons-pool-jar nach $CATALINA_HOME/common/lib kopieren. Dorhin gehört auch MySQL Treiber.

Nun musst du die Ressource noch deiner Applikation zur Verfügung stellen, und zwar im web.xml:

```

<resource-ref>

  <res-ref-name>jdbc/dsTC</res-ref-name>

  <res-type>javax.sql.DataSource</res-type>

  <res-auth>Container</res-auth>

</resource-ref>

```

Nun ist eigentlich alles bereit, du kannst in einem Servlet oder auf einer JSP Seite auf MySQL zugreifen:

```

import java.sql.*;

import javax.sql.*;

import java.io.*;

import java.naming.InitialContext;

import java.naming.Context;

InitialContext initCtx = new InitialContext();

Datasource ds = (DataSource)initCtx.lookup("java:comp/env/jdbc/dsTC");

Connection conn = ds.getConnection();

Statement stmt = conn.createStatement();

ResultSet rset = stmt.executeQuery("select * from deineTabelle");

while (rset.next()) {

  //mach was mit deinen Daten:

  System.out.println(rset.getString(1));

}

conn.close();

initCtx.close();

```

Ich hoffe das hilft dir weiter, viel Spass...

Gruss

MichiLast edited by Miggi on Thu Oct 02, 2003 10:40 pm; edited 1 time in total

----------

## barthi

WOW!!!

Das nen ich mal eine brilliante Antwort!

(Sorry übrigens für das 4-fach-Posting)

Edit ian!: Kein Problem. Habe es eben beseitigt.  :Wink: 

Also, ich werd das gleich mal testen. Hab nur gleich zu dem letzten Teil mal ne Frage. Unter Windows hab folgendermaßen die Datenbankverbindung hergestellt:

```

Class.forName("org.gjt.mm.mysql.Driver");

String sDBURL = "jdbc:mysql://christians.homedns.org:3306/OOM2_963875";

connection = DriverManager.getConnection(sDBURL, "user", "pass");

return connection;

```

Funktioniert das jetzt immernoch?

Auf jeden FAll schon mal ein riesengroßes Danke Schön.   :Razz: 

Ich melde mich

----------

## lutzh

Na, jetzt geht's ja hier richtig um grundsätzliches... da muss ich doch auch mal meinen Senf dazugeben. Eigentlich solltest du aus der JSP ("Presentation Layer") gar keine Datenbankverbindungen aufbauen. Wenn du mit deinem Kram fertig bist, überleg doch mal, ein Framework wie Struts o.ä. zu verwenden, um ein bißchen Struktur in die Sache zu bringen.

Wenn du es so machst, wie miggi es vorschlägt, hättest du mit dem DriverManager und DB-URL in deinem Code nichts mehr zu tun. Schreibt er ja. Probier's mal aus. Funktionieren müsste es allerdings eigentlich schon, insbesondere, wenn es unter Windows schon funktioniert hat.

Wenn ich das mit meinen verquollenen Augen richtig sehe, sieht aber auf jeden Fall das 

```

Invalid authorization specification: Access denied for user: 'barthi@localhost' (Using password: YES) 

```

irgendwie nicht gut aus. Was sagt denn der mysql-command-line-client, wenn du mir dem User und dem Passwort reingehst? Klappt das? 

http://www.mysql.com/doc/de/GRANT.html

Viel Erfolg,

Lutz

----------

## barthi

Also zuerst mal: es geht immernoch nicht!

Zur Struktur kann ich nur sagen, das ich die Verbindung nicht in der JSP aufrufe, sondern in einer Tool-Class, wo auch alle anderen Datenbankfunktionen deklariert sind. Diese Klasse binde ich dann als Bean in der JSP ein.

Ich nutze auch noch andere Klasse, die sich zusammen mit der Tool-Class in einem Package befinden.

Ich finde das eigentlich strukturiert genug.

Aber nochmal zu meinem Problem:

Die Sache mit dem Invalid User hab ich behoben. Aber trotzdem kann ich keine Datenbankverbindung herstellen. Zu der Anleitung hab ich auch nochmal ne Frage:

Wo genau soll ich diesen Teil hinschreiben?

 *Quote:*   

> 
> 
> Vor Tomcat 4.1.3 musst du zusätzlich noch den DataSource Pool angeben: 
> 
> ```
> ...

 

Achja, was muß ich denn bei den Paramtern für die URL eingeben?

```

jdbc:mysql://localhost/OOM2_963875

```

oder

```

jdbc:mysql://meine.dyndns.org:3306/OOM2_963875

```

[/code]

----------

## lutzh

imho:

Struktur - war nur eine Anregung. Das mit der Datenbankverbindung sollte sowieso klappen, ob mit Struktur oder ohne.

Wo hinschreiben: $CATALINA_HOME/conf/server.xml. Ein Tutorial dazu findest du unter http://jakarta.apache.org/tomcat/tomcat-4.1-doc/jndi-datasource-examples-howto.html

DB-URL: Wenn die DB auf dem gleichen Server läuft, benutze ich die erste (localhost-) Variante. Funktioniert wunderbar.

Wenn es nach wie vor nicht klappt, poste doch nochmal die aktuelle Java-Fehlermeldung.

----------

## barthi

Also, es geht immernoch nicht. Aber ich hab mich geirrt. Das mit dem Benutzer geht doch nicht. Die Meldung ist noch die gleiche (siehe catalina.log). Aber in der Shell kann ich mich mit diesem User anmelden. da ist doch irgendwas faul.

Das steht in der Catalina.log:

```

Oct 2, 2003 3:57:12 PM org.apache.commons.modeler.Registry loadRegistry

INFO: Loading registry information

Oct 2, 2003 3:57:12 PM org.apache.commons.modeler.Registry getRegistry

INFO: Creating new Registry instance

Oct 2, 2003 3:57:15 PM org.apache.commons.modeler.Registry getServer

INFO: Creating MBeanServer

Oct 2, 2003 3:57:18 PM org.apache.coyote.http11.Http11Protocol init

INFO: Initializing Coyote HTTP/1.1 on port 8080

mod_jk location: /etc/apache/extra modules/mod_jk.so

Make sure it is installed corectly or  set the config location

Using <Listener className="org.apache.ajp.tomcat4.config.ApacheConfig"  modJk="PATH_TO_MOD_JK.SO_OR_DL

Can't find workers.properties at /opt/jakarta/tomcat/conf/workers.properties

Please install it in the default location or  set the config location

Using <Listener className="org.apache.ajp.tomcat4.config.ApacheConfig"  workersConfig="FULL_PATH" />

Starting service Tomcat-Standalone

Apache Tomcat/4.1.24

Oct 2, 2003 3:57:38 PM org.apache.coyote.http11.Http11Protocol start

INFO: Starting Coyote HTTP/1.1 on port 8080

Oct 2, 2003 3:57:38 PM org.apache.jk.common.ChannelSocket init

INFO: JK2: ajp13 listening on /0.0.0.0:8009

Oct 2, 2003 3:57:38 PM org.apache.jk.server.JkMain start

INFO: Jk running ID=0 time=6/153  config=/opt/tomcat/conf/jk2.properties

Invalid authorization specification: Access denied for user: 'barthi@localhost' (Using password: YES)

```

Die Java-Fehlermeldung ist nach wie vor eine NullPointerException. Ist ja auch logisch, wenn er nicht auf die Datenbank zugreifen kann. Falls du sie trotzdem braucht, kann ich sie ja posten!

----------

## lutzh

Puh, schade.

Ich weiß im Moment auch nicht recht weiter.

Wenn du noch ein bißchen Zeit hast, mach dochmal folgendes:

In mysql, guck dir mal die Tabelle "user" an (in der Datenbank "mysql"). Da müsste eine Zeile sein wo als host "localhost" steht und als user "barthi". Oder wie er halt heißt. Wenn es die Zeile nicht gibt, liegt's daran.

Ansonsten - bei dem Link, den ich weiter oben gepostet habe, zum Tutorial, gibt es ein mySQL-Beispiel zum Schritt-für-Schritt nachmachen. Mach das doch mal, guck, ob das funktioniert.

Zu guter letzt gibt es bei mysql.com auch noch einen Troubleshooting Guide zu dem Thema. Ob das hilft, kann ich nicht sagen, ich habe ihn zum Glück noch nicht gebraucht. Ist allerdings nicht Java-spezifisch. Der Link: 

http://www.mysql.com/doc/de/Access_denied.html

Ich denke auch nochmal ein bißchen drüber nach,

Lutz

----------

## Miggi

Das mit der Datasourcefactory brauchst du gar nicht, du hast ja Tomcat 4.1.24. Das ist nur bei tomcat <4.0.3 nötig, da dort ein anderer Pool bzw. kein Pool verwendet wird.

Hast du wirklich Zugriff auf die Datenbank? Bei einer Standartinstallation sieht das etwa so aus:

```

shell>mysql -u root -p mysql

Enter Password:

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 5 to server version: 4.0.13-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>SHOW DATABASES;

+-------------+

| Database    |

+-------------+

| mysql       |

| test        |

+-------------+

mysql> USE test;

Database changed

mysql> SHOW TABLES;

Empty set (0.00 sec)

```

Du hast ja bei dir die Datenbank OOM2_963875, also mach

```

mysql> USE OOM2_963875;

Database changed

mysql> SHOW TABLES;

...

```

Achtung: Ich hab bei meinem letzten Posting einen Fehler gemacht:

```

  <parameter>

    <name>url</name>

    <value>jdbc:mysql://localhost/deineTabelle</value>

  </parameter>

```

Ich habs im vorigen Posting korrigiert, jetzt siehts so aus:

```

  <parameter>

    <name>url</name>

    <value>jdbc:mysql://localhost/deineDatenbank</value>

  </parameter>

```

Sorry...

Du solltes vieleicht auch mal die User checken:

```

mysql> USE mysql;

Database changed

mysql> SHOW TABLES;

+-----------------+

| Tables_in_mysql |

+-----------------+

| columns_priv    |

| db              |

| func            |

| host            |

| tables_priv     |

| user            |

+-----------------+

6 rows in set (0.00 sec)

mysql>SELECT * FROM user;

```

Ist dein User wirklich erfasst?

```

...

| localhost | barthi | 18cf36000cae8138 | Y | Y | ....

| % | barthi | 18cf36000cae8138 | Y | Y | ....

...

```

So solltest du deinen Benutzer erstellt haben:

```

mysql> INSERT INTO user (Host,User,Password) VALUES('%',barthi',PASSWORD('password'));

```

Du musst das Passwort mit der Funktion PASSWORD() verschlüssel, es darf also nicht im Klartext erkennbar sein, wenn du ein SELECT * FROM user; machst!!

Ausserdem musst du dir Privilegien für den Zugriff auf die Datenbanken erstellen. Folgender Code richtet ein Superuser ein, welcher von überall Zugriff auf alle Datenbanken und Tabellen hat:

```

mysql> GRANT ALL PRIVILEGES ON *.* TO barthi@localhost IDENTIFIED BY 'passwort' WITH GRANT OPTION;

mysql> GRANT ALL PRIVILEGES ON *.* TO barthi@"%" IDENTIFIED BY 'passwort' WITH GRANT OPTION;

mysql> FLUSH PRIVILEGES;

```

Du findest viel genauere Beschreibungen aller Befehle und Vorgänge in der MySQL Doku unter: http://www.mysql.de/doc/de/index.html

Ich würde mich da mal durchlesen bis mit der Kommandozeile alles klappt und du die gewünschten Daten lesen und schreiben kannst. Erst dann macht es Sinn einen Schritt weiter zu gehen...

----------

## barthi

Also, in der Catalina.log steht jetzt nicht mehr von wegen Access Denied.

Ich kann mich auch in der Shell mit folgenden Befehlen bei MYSQL anmelden:

```

mysql -u barthi -h christians.homedns.org -p

mysql -u barthi -p

```

Ich denke also, es hängt jetzt nicht mehr an der Berechtigung.

Vielleicht liegt es daran, das meine Applikation im flaschen Verzeichnis liegt. Zur Zeit befindet es sich in folgendem:

```

/opt/tomcat/webapps/lohn

```

Im lohn-Verzeichnis sind dann die ganzen JSP-Seiten und der Unterordner WEB-INF.

Vielleicht könnt ihr mir nochmal genau sagen, ob die Dateien da richtig stehen, oder ob ich sie woandern hin kopieren muß oder irgendwo einen Verweis angeben muß.

Ach ja, wenn ich folgende URL aufrufe 

```

http://christians.homedns.org:3306/index.jsp

```

bekomm ich immernoch folgende Meldung im Browser dargestellt:

```

+ 4.0.13-log%Zzxj,<&K, ÿBad handshake

```

Danke,

barthi

----------

## DaFire

 *barthi wrote:*   

> 
> 
> Ach ja, wenn ich folgende URL aufrufe 
> 
> ```
> ...

 

Der Port 3306 ist vom MySQL Server. Ein Browser kann damit überhaupt nichts anfangen.

----------

## DaFire

 *barthi wrote:*   

> 
> 
> Ach ja, wenn ich folgende URL aufrufe 
> 
> ```
> ...

 

Der Port 3306 ist vom MySQL Server. Ein Browser kann damit überhaupt nichts anfangen.

----------

## Miggi

Wie DaFire  schon gesagt hat, der Browser kann nichts mit den Daten von Port 3306 anfangen, das macht der jdbc treiber!

Tomcat hat standartmässig den Coyote http Connector eingeschaltet:

```

    <Connector className="org.apache.coyote.tomcat4.CoyoteConnector"

               port="8080" minProcessors="5" maxProcessors="75"

               enableLookups="true" redirectPort="8443"

               acceptCount="100" debug="0" connectionTimeout="20000"

               useURIValidationHack="false" disableUploadTimeout="true" />

```

Du kannst also tomcat's Willkommensseite direkt mit: http://localhost:8080/index.jsp aufrufen, und wenn mod_jk2 läuft, auch mit http://localhost/index.jsp

Der Request kann mit mit deinem Setup auf zwei Arten Seiten aufrufen:

```
1) Browser <--- Port 8080 ---> Tomcat Coyote Connector

2) Browser <--- Port 80 --> Apache mod_jk <--- Port 8009 --> Tomcat Ajp Connector
```

----------

## lutzh

 *barthi wrote:*   

> 
> 
> Ich denke also, es hängt jetzt nicht mehr an der Berechtigung.
> 
> Vielleicht liegt es daran, das meine Applikation im flaschen Verzeichnis liegt. Zur Zeit befindet es sich in folgendem:
> ...

 

Nö, die Seiten kannst du da lassen, das Verzeichnis ist völlig in Ordnung. Unter der Voraussetzung, dass du Tomcat nach /opt installiert hast, also dein CATALINA_HOME müsste /opt/tomcat lauten.

 *Quote:*   

> 
> 
> Ach ja, wenn ich folgende URL aufrufe 
> 
> ```
> ...

 

Das ist doch schonmal gut, zeigt es doch, dass dein mySQL auf port 3306 horcht, was ja auch so sein soll. Deine Seiten müsstest du allerdings anders aufrufen, z.B. mit http://localhost:8080/lohn/index.jsp, s. miggis post.

Wenn im catalina.out nichts mehr von access denied steht, es aber trotzdem nicht geht, da frage ich mich doch, was steht denn nun also im catalina.out?

----------

## barthi

Also, ich glaub ich mach da was grundsätzliches falsch.

Wenn ich in meinem Browser

```

http://christians.homedns.org:8080/lohn/index.jsp

```

eingebe, kommt ne Fehlermeldung, "Resource is not available"

Die Dateien sind aber in diesem Verzeichnis:

```

/opt/tomcat/webapps/lohn

```

Ich glaube aber, er holt sich die Seiten von

```

/home/httpd/htdocs

```

Da hab ich nämlich noch ne Kopie liegen von damals, als ich noch keine MySQL-Verknüpfung wollte.

Also irgendwo muss stehen, das der Tomcat nicht in seinem wepapps-Verzeichnis gucken soll, sondern unter den htdocs. Wenn ich das ändere geht's vielleicht.

Aber wie??

----------

## lutzh

Also, das glaube ich nicht... da hättest du ja in der server.xml die appBase ändern müssen, aber wenn du gar nicht weißt, wo man das macht, hast du das ja wohl nicht.

Das würde ich auch nicht machen, lass das Tomcat-Webapps-Verzeichnis mal so, wie es ist. Wenn du das dann später über Apache und mod_jk machst, kannst du an den URLs ja noch beliebig rumschrauben, über die Apache-Konfiguration. 

Ich hoffe, du hast deinen Apache nicht so konfiguriert, dass der auf Port 8080 hört... dann kam Tomcat gar nicht hoch, und die Fehlermeldung kommt vom Apache... mach mal den Apache erstmal aus, bis das mit Tomcat funktioniert, der kommt dann später wieder ins Spiel.

Aber erstmal weiter mit Tomcat direkt: Resource is not available ist ja wohl glaube ich ein 404er HTTP-Code, er findet also einfach deine Datei nicht. Checken:

- gibt es lohn/index.jsp wirklich?

- sind die Leseberechtigungen so, dass der Tomcat-User die Datei lesen darf?

Schieb auch mal eine einfache HTML-Datei, also nicht JSP, sondern statisch, in das Verzeichnis, und guck, ob du dir die ansehen kannst.

Ist ja echt spannend bei dir. War mir gar nicht klar, was es da so für Probleme geben kann.

----------

## barthi

Also, ich hab den Apache jetzt mal gestoppt. Aber ich dachte, den brauch man um den Tomcat benutzen zu können?!?

Naja, auf jeden Fall bekomm ich noch den gleichen Fehler, wenn ich

christians.homedns.org:8080/lohn/index.jsp eingebe.

Wenn ich allerdings christians.homedns.org:8080/index.jsp eingebe, dann bekomm ich die Seite angezeigt. Der SQL-Zugriff funktioniert aber trotzdem nicht. Das mit der HTLM-seite hab ich auch getestet. Leider ohne Erfolg!

Ich denke an den Usern hängt's nicht, obwohl ich das noch nicht so ganz durchschaut hab (bin erst seit kurzem mit Linux unterwegs).

Ich find's echt super, das ihr mir helft. Ist aber bestimmt wieder ein gaaanz dummes Problem. Von denen hat ich nämlich schon einige seit meiner Gentoo-Installation.   :Confused: 

----------

## lutzh

ja, unter der URL kann ich es auch sehen :) Vielleicht solltest du die erlaubten IPs für Tomcat einschränken...

Ich gehe mal davon aus, dass du nicht jede Menge Kohle vom "IIB" kassierst für die Anwendung - sonst will ich was abhaben für den Support!

Also, zu deinem Post:

Apache -  nö, braucht man nicht, um Tomcat benutzen zu können, da ist ein HTTP-Server eingebaut (Tomcat-Doku lesen!). Man macht es aber trotzdem in Produktivumgebungen, aus verschiedenen Gründen. Für die Entwicklung reicht aber erstmal Tomcat alleine. 

Seite wird nicht angezeigt: kurz gefasst: die, die dir angezeigt wird, ist nicht die aus dem Verzeichnis lohn, sondern aus dem Verzeichnis "ROOT" (zumindest in einer default-Konfiguration). Die aus dem Verzeichnis lohn müsstest du mit der anderen URL sehen, wenn das nicht geht, stimmt da was nicht. Wenn du dir auch keine HTML-Seite in dem Verzeichnis ansehen kannst, obwohl die Berechtigungen stimmen, wurde die webapp beim Hochfahren wohl gar nicht erkannt. Vielleicht ein Fehler in der web.xml oder so. Mal in den Tomcat-Manager gucken, und ins log-file!

SQL-Zugriff geht nicht: Stimmt. Ich sag mal

```

class lohn.Tool : java.lang.NullPointerException

```

du hast eine NullPointerException in der Klasse lohn.Tool. Viel Spaß beim Java-Debugging.

Also, ich glaube, du hast da noch einige Hausaufgaben zu machen.

----------

