Warning: Constant ABSPATH already defined in /customers/e/7/0/florian-oeser.de/httpd.www/wordpress/wp-config.php on line 28 Development-Blog von Florian Oeser » Blog Archive » HowTo: BlazeDS/FDS-Tomcat + Servlets + MySQL

HowTo: BlazeDS/FDS-Tomcat + Servlets + MySQL

8. Juni 2008 – 13:36

Einleitung

In dem HowTo-Reihe möchte ich euch kurz zeigen wie einfach es ist, Daten mit Hilfe eines Servlets zu lesen und zu schreiben. Ich werde nicht alles in Detail erklären. Deshalb wäre es sinnvoll, wenn ihr schonmal mit einem der beiden Server gearbeitet habt, ein Servlet geschrieben habt und ein klein wenig Ahnung von SQL habt 😉

Als kleines Beispiel haben wir in Anlehnung an Projekt radioSiTY eine Datenbank, in der es eine Tabelle User gibt. Ich zeige zuerst wie man die einzelnen Felder ausliest und wie man anschließent einen neuen Benutzer hinzufügt.

servlets_tbluser

Für die Entwicklung der Servlets kann ich übrigens Eclipse for JEE empfehlen. Dort kann man dann ein Dynamic Web Project anlegen und kann direkt Servlets erstellen. Zum Einen hat man so ein fertiges Codegerüst und zum Anderen braucht man sich nicht mehr um die Servlet jar’s kümmern. Und man kann zusätzlich Server anlegen auf dennen kompiliert wird.

Umsetzung

Auslesen der Datenbank

Um überhaupt mit Java bzw. einem Servlet und einer Datenbank zu kommunizieren, sind die sogenannten JDBC Treiber erforderlich. Diesen Treiber gibt es für viele Datenbanken egal ob PostgreSQL, HSQL oder MySQL. Die Treiber nennt MySQL den Connector/J. Zum Download gibt es den natürlich auf der Homepage von MySQL. Diese *jar muss jetzt in das JDK Verzeichniss unter jre/lib/ext kopiert werden.

Die Umsetzung ist relativ trivial. Um eine Spalte einer Tabelle auszulesen ist nicht mehr erforderlich als eine Verbindung zur Datenbank aufzubauen, den Query zu übergeben und das Ergebnis in einer Schleife auszugeben. Folgendes Servlet realisiert genau das:

import java.io.IOException;
import javax.servlet.*;
import java.io.*;
import java.sql.*;

import javax.servlet.*;
import javax.servlet.http.*;

public class FirstExample extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {

		Connection con = null;
		Statement stmt = null;
		ResultSet rs = null;

		try {
			res.setContentType("text/html");
			PrintWriter out = res.getWriter();

			Class.forName("com.mysql.jdbc.Driver").newInstance();
			con = DriverManager.getConnection("jdbc:mysql:///radiositiy_db1",
					"root", "root");

			stmt = con.createStatement();
			rs = stmt.executeQuery("SELECT * FROM tbl_user");

			while (rs.next()) {

				out.println(rs.getString(2) + "<br>");

			}
			out.close();

			if (!con.isClosed())
				System.out.println("Successfully connected to "
						+ "MySQL server using TCP/IP...");

		} catch (Exception e) {
			System.err.println("Exception: " + e.getMessage());
		} finally {
			try {
				if (con != null)
					con.close();
			} catch (SQLException e) {
			}
		}

	}
}

Um eine Datenbankverbindung herzustellen brauchen wir eine Connection und ein Statement welches das Query ausführt und in ein Resultset zurückgibt. Um eine Verbindung aufzubauen sind die Angaben des Treibers, der Datenbank selbst, des Benutzernames und des Passwortes nötig. Bis auf Ersteres muss natürlich alles entsprechend angepasst werden.

Als Query übergeben wir ein einfaches SELECT Statement. In dem ResultSet steht jetzt das komplette Ergebniss der Abfrage. Dieses wird dann in einer Schleife ausgeben. Das Argument bei rs.getString() gibt dabei den Spaltenname an. Da der ResultSet wie gesagt alles speichert, ist es problemlos möglich auch noch zum Beispiel die id sich ausgeben zu lassen. Unabhänig davon ob es zu Fehler kam oder nicht, muss natürlich die Verbindung wieder geschlossen werden.

Noch ein paar Worte zum kompilieren. Für den BlazeDS kann man in Eclipse einen neuen Server analog zu einem normalen Tomcat anlegen. Angegeben werden muss hier nur der Tomcat Ordner im BlazeDS Verzeichnis.

servlets_serverconf

Der FDS-Tomcat hat dieses Verzeichniss nicht und arbeitet aus dem /bin Ordner herraus. Leider erkennt das Eclipse nicht an und kann somit auch nicht für den FDS-Tomcat kompilieren. Alles was ich noch in der Richtung probiert hatte, endete mit mit Fehlern wie das der Server nicht die 2.5 J2EE Module unterstützt. Naja vielleicht liegt es auch daran das der FDS nur Version 5.5 benutzt. Oder ich hab mich einfach zu dusselig angestellt 😀 Über Lösungen von euch würde ich mich freuen…Es gibt trotzdem eine Möglichkeit für den FDS-Tomcat zu kompileren. Einfach die gewohnte main() einfügen und fertig. So lässt sich nämlich wieder in der nomalen Java Perspektive von Eclipse kompilieren.

Nun kopiert ihr das kompilierte Servlet direkt nach WEB-INF/classes auf den Server. Damit der Server weiß wo euer Servlet liegt, gibt es die sogenannte web.xml. In der fügen wir einfach folgendes unten an:

<servlet>
<servlet-name>FirstExample</servlet-name>
<servlet-class>FirstExample</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstExample</servlet-name>
<url-pattern>/FirstExample</url-pattern>
</servlet-mapping>

Nun braucht ihr noch noch den Server zu starten und das Servlet so aufrufen: http://localhost:8400/samples/FirstExample . Ich habe mich dabei wie ihr seht für den BlazeDS entschieden und den WEB-INF unter samples benutzt. Wenn alles geklappt hat seht ihr jetzt die Benutznamen in einer Spalte ausgegeben. Im Übrigen seht ihr jetzt auch in der Konsole das erfolgreich zur MySQL Datenbank verbunden wurde. Alle Ausgaben die über System.out normalerweise in der IDE-Konsole ausgeben werden, sind jetzt in der Serverkonsole zu sehen.

So kommen wir zum zweiten Teil. Nämlich dem Schreiben in die Datenbank. Das ist ebenfalls ziemlich einfach:

import java.io.IOException;
import javax.servlet.*;
import java.io.*;
import java.sql.*;


import javax.servlet.*;
import javax.servlet.http.*;



public class FirstExample extends HttpServlet {
	
	private String name = new String("second");
	private String username= new String("example");
	private String password = new String("geheim");
	private String mail = new String("test@web.de");
	private String birthdate = new String("1965-01-23");
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {
		
		Connection con = null;
		Statement stmt = null;
		
		
		try {
			res.setContentType("text/html");
			PrintWriter out = res.getWriter();

			Class.forName("com.mysql.jdbc.Driver").newInstance();
			con = DriverManager.getConnection("jdbc:mysql:///radiositiy_db1", "root",
					"root");
			
			stmt = con.createStatement();
			stmt.execute("INSERT INTO tbl_user (fld_name,fld_username,fld_password,fld_email,fld_birthdate)" +
					" VALUES ('"+name+"','"+username+"','"+password+"','"+mail+"','"+birthdate+"')");
						

			if (!con.isClosed())
				System.out.println("Successfully connected to "
						+ "MySQL server using TCP/IP...");

		} catch (Exception e) {
			System.err.println("Exception: " + e.getMessage());
		} finally {
			try {
				if (con != null)
					con.close();
			} catch (SQLException e) {
			}
		}

	}
}

Aus Platzgründen hab ich die Imports mal weggelassen. Da wir beim Schreiben logischerweise kein Ergebniss bekommen brauchen wir das ResultSet nicht mehr. Ausserdem heißt die aufzurufende Methode nicht mehr executeQuery sondern nur noch execute(). Der Rest ist denk ich mal relativ selbsterklärend.

Conclusion

Wir haben gelernt wie einfach es doch ist mit Servlets/Java Datenbankoperationen durchzuführen. Ich denke das war nicht allzuviel und dürfte leicht verdaubar sein 😉

Wenn ich Zeit habe formuliere ich einige Sachen noch aus und werde noch eine kleine Flexapplikation dazu schreiben.

Für Anregungen, Verbesserungen etc. könnt ihr mir gerne mailen oder ein Kommentar hinterlassen!

  1. One Response to “HowTo: BlazeDS/FDS-Tomcat + Servlets + MySQL”

  2. Klasse!Genau das was ich gesucht habe:)

    Danke,so macht Progzen Spass.

    By Magda on Mai 16, 2010

Post a Comment

Warning: Undefined variable $user_ID in /customers/e/7/0/florian-oeser.de/httpd.www/wordpress/wp-content/themes/silver-light-01/silver-light-01/comments.php on line 117