Servlet als Login

mamelinchen

Bekanntes Mitglied
Hallo!

Ich habe ein Servlet in Eclipse geschrieben, welches sich mit der Datenbank verbinden soll und testen soll,
ob sich die gesendeten Werte in der Datenbank befinden, und wenn ja ein true zurücksenden bzw. das es auf der ClientSeite als true erkannt werden soll.

Auf der Client Seite benutze ich Flex, der Server ist ein Tomcat mit XAMPP.
Die Datenbank ist eine mysql-Datenbank, den Treiber dafür habe ich auch installiert.
Beispielwerte sind drin.
Nur kriege ich erstmal keine Nachricht, ich weiss nicht genau wo der Fehler liegt.


hier das Servlet:

Code:
package meinservletpackage;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.UnavailableException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class LoginServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	public void init(ServletConfig config) throws ServletException {
		super.init(config);
		try {
			// Treiber laden
			Class.forName("com.mysql.jdbc.Driver").newInstance();
		} catch (ClassNotFoundException e) {
			throw new UnavailableException(
					"Login init() ClassNotFoundException: " + e.getMessage());
		} catch (IllegalAccessException e) {
			throw new UnavailableException(
					"Login init() IllegalAccessException: " + e.getMessage());
		} catch (InstantiationException e) {
			throw new UnavailableException(
					"Login init() InstantiationException: " + e.getMessage());
		}
	}

	public void doPost(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {
		System.out.println("request: " + req);
		res.setContentType("text/html");
		PrintWriter out = res.getWriter();
		// Holen der Parameter aus dem POST
		String username = req.getParameter("username");
		String password = req.getParameter("password");
		System.out.println("username: " + username);
		System.out.println("password: " + password);

		try {
			if (userInDB(username, password)) {
				[COLOR="Red"]//out.println("Wert=true");[/COLOR]
wäre das die Alternative?
				out.println(true);
			} else {
				out.println(false);

			}
		} catch (SQLException e) {

			e.printStackTrace();
		}
	}

	protected boolean userInDB(String username, String password)throws SQLException {
		if (username == null || password == null) {
			// Register
			System.out.println("Nicht vorhanden.");
		} else {
			Connection connection = DriverManager.getConnection(
			// Ersetzen durch übergebene Parameter username, password!
					"jdbc:mysql://localhost:3306/einkaufDB", "root", "");
			Statement statement = null;
			ResultSet resultSet = null;
			try {
				// Prüft, ob Kombi in Datenbank, wenn result
				statement = connection.createStatement();
				resultSet = statement
						.executeQuery("SELECT username, password FROM userlogin    
                                                                WHERE username="
								+ "'"
								+ username
								+ "'"
								+ "AND password="
								+ "'"
								+ password + "'");
			} catch (SQLException e) {
				System.out.println("Nicht vorhanden:" + e.getMessage());
			} finally {
				if (resultSet != null)
					try {
						resultSet.close();

					} catch (SQLException ignore) {
					}
				if (statement != null)
					try {
						statement.close();
					} catch (SQLException ignore) {
					}
			}

		}
		return true;
	}
}

Auf der Flex-Seite erhalte ich das URLLOader-Objekt, wo ich dann sage:

data.loader==true

für die Alternative:
data.loader.Wert=="true".
 

Antoras

Top Contributor
Was heißt du bekommst keine Nachricht? Du gibst die ganze Zeit irgendwelche Werte aus. Welche davon sollen jetzt fehlerhaft sein?

Deine Methode
Code:
userInDB()
gibt übrigens immer true zurück, egal ob der Benutzer existiert oder nicht.
 

mamelinchen

Bekanntes Mitglied
Ich meine mit Nachrichten, ich kann eigentlich nicht auf der Konsole testen, da ich ja die Eingabewerte in die html-seite eingebe und die zum servlet schicke. wo soll ich die sachen dann sehen?
Wie kann ich testen?

Wie returne ich dann richtig?

Code:
} finally {
				if (resultSet != null) {
					try {
						resultSet.close();
					} catch (SQLException ignore) {
					}
					if (statement != null) {
						try {
							statement.close();
						} catch (SQLException ignore) {
						}
					}return true;
				}
			}
			return false;
?
Wenn ein Result vorleigt dann war doch die Abfrage erfolgreich oder nicht?

Es geht um den Wert true in Java vom Printer, ob der als String geschickt wird oder ...als sonst was, damit ich ihn in Flex empfangen und behandeln kann.
out.println("Wert=true");
Deswegen auch nie möglcihe schreibweise.
Ich habe keine Ahnung, bin totaler Anfänger in sowas!
Und sowas spezielles findet man nie in Foren.
 
Zuletzt bearbeitet:

Antoras

Top Contributor
Statt einer Konsole kannst du auch einen Debugger benutzen und dir die Werte anzeigen lassen. Im übrigen kannst du dir von einem Servlet aus sehr wohl Werte auf der Konsole ausgeben lassen.

Code:
executeQuery()
gibt niemals null zurück, selbst dann nicht wenn die Abfrage kein Ergebnis lieferte. Um zu überprüfen ob ein Benutzer existiert machst du es dir am einfachsten wenn du die Anzahl der angezeigten Datensätze ausgibst:
Code:
SELCT COUNT(username) FROM table WHERE ... LIMIT 1
Danach kannst du das ResultSet auf den Wert abfragen. Bei 1 existiert der User, bei 0 existiert er nicht. Je nach Ergebnis gibst du dann true oder false zurück.
 

Antoras

Top Contributor
Du kannst dir das sowohl als String als auch als int aus dem ResultSet holen. Musst dann halt nur auf die Vergleichsmethode achten.
 

mamelinchen

Bekanntes Mitglied
Das Problem mit dem Servlet besteht darin, das ich es nicht schaffe, den Tomcat in Eclipse zum Laufen zu bringen.
Die bootstrap.jar wird dauernd übernommen, obwohl ich sie immer wieder lösche und ich n Fehler bekomme.
Ich hatte dann einen anderen Apache Tomcat eingebunden, das funzte, bloss beim Debuggen kam ein 404 Error, liegt wohl an der JVm des Tomcats, und für diese Infos muss ich zu lange suchen , und ich habe leider keine Zeit:(
Ausserdem hatte der dann den Xampp Tmcat blockiert, welcher am Ende garnet mehr funzte und ich alles deinstallieren musste :S

Ich habe auch zu wenig Erfahrung.
Die Werte könnt ich ja noch so übergeben, stellt das Servlet dann direkt die Verbindung zur Datenbank her und liefert mir das Ergebnis?
 

Antoras

Top Contributor
Guck dir mal dieses Plugin an, damit kannst du den Tomcat komfortabel über Eclipse starten: EclipseTotale - Sysdeo Tomcat Launcher Plugin

Ohne einen ServletContainer wie er beim Tomcat mitgeliefert wird, wirst du die Servlets nicht benutzen können. Ansonsten kannst du in einem Servlet alles machen was du sonst in Java machen kannst, also auch die Datenbank ansteuern.
 

Antoras

Top Contributor
Dass man über WTP den Tomcat direkt starten kann hab ich nicht gewusst. Dabei hatte ich die Funktion die ganze Zeit verwendet. Zwar hab ich schon ewig das Plugin von Sysdeo bei Eclipse eingebunden, ich hab es aber nie benutzt. Lediglich zum Beenden des Tomcats hab ich es dann doch gebraucht - den Startvorgang hatte aber WTP eingeleitet, was mir aber nie aufgefallen ist, da die Einstellungen bei beiden Plugins richtig gesetzt waren.

Gibt es bei WTP eine Funktion mit der man den Tomcat explizit beenden kann? Momentan kill ich nur das Programm über Eclipse, hab aber keine Ahnung ob das so gut ist.

Aber zumindest hab ich jetzt ein Plugin weniger, das ist ja nur vorteilhaft.
 
Zuletzt bearbeitet:
M

maki

Gast
Gibt es bei WTP eine Funktion mit der man den Tomcat explizit beenden kann? Momentan kill ich nur das Programm über Eclipse, hab aber keine Ahnung ob das so gut ist.
Du kannst die Server (Tomcat, JBoss, etc. pp.) über Eclipse starten/stoppen, mit dem Roten Botton wird er gekillt, du hast aber auch ein shutdown Kommando, das WTP ist bei der JEE Version von Eclipse dabei.

Sysdeo verwende ich nur noch wenn ich skurille Legacy Projekte habe die noch einen Tomcat 3.3 verwenden, weil das WTP diesen Uralt Schinken nicht unterstützt :(
 

Antoras

Top Contributor
Über den Server-Monitor hab ich jetzt die Funktion gefunden um den Tomcat herunterzufahren. Jetzt kann ich das Plugin von Sysdeo beruhigt vergessen. ;)
 

mamelinchen

Bekanntes Mitglied
Ich habe ja den Tomcat drin, bloss ich nutze in einmal in XAMPP und einmal in eclipse.

Die beiden beiissen sich dann.

Nu teste ich das ganze in einer normalen Klasse,
und ich weiss nicht wieso aber es funzt nicht:

Code:
public static boolean userInDB(String username, String password) throws Exception{

		try {
			// Treiber laden
			Class.forName("com.mysql.jdbc.Driver").newInstance();
		} catch (ClassNotFoundException e) {
			throw new Exception(
					"Login init() ClassNotFoundException: " + e.getMessage());
		} catch (IllegalAccessException e) {
			throw new Exception(
					"Login init() IllegalAccessException: " + e.getMessage());
		} catch (InstantiationException e) {
			throw new Exception(
					"Login init() InstantiationException: " + e.getMessage());
		}
		if (username == null || password == null) {
			// Register
			System.out.println("Nicht vorhanden.");

		} else {
			Connection connection = DriverManager.getConnection(
			// Ersetzen durch übergebene Parameter username, password!
					"jdbc:mysql://localhost:3306/einkaufDB", "root", "");
			Statement statement = null;
			ResultSet resultSet = null;
			try {
				// Prüft, ob Kombi in Datenbank, wenn result
				statement = connection.createStatement();
				
				//resultSet = statement .executeQuery("SELECT * FROM userlogin");
				resultSet = statement
						.executeQuery("SELECT COUNT(username) FROM userlogin WHERE username="
								+ "'"
								+ username
								+ "'"
								+ "AND password="
								+ "'"
								+ password + "' LIMIT 1");
				  
				  ResultSetMetaData rsmd = (ResultSetMetaData) resultSet.getMetaData();
				  int n = rsmd.getColumnCount();
				  while( resultSet.next() ) {
			          for( int i=1; i<=n; i++ )  // Attention: first column with 1 instead of 0
			          //  System.out.print( extendStringTo14( ResultSet.getString( i ) ) );
			          System.out.println(  resultSet.getString( i ) ) ;
			          System.out.println(  "" ) ;
			          System.out.println(resultSet.getString(1));
				  }
			} catch (SQLException e) {
				System.out.println("Nicht vorhanden:" + e.getMessage());
			} finally {
				if (resultSet != null) {
					try {
						[COLOR="Red"]if (resultSet.getInt(1)==1){[/COLOR]
							return true;
						}
						resultSet.close();
					} catch (SQLException ignore) {
					}
					if (statement != null) {
						try {
							statement.close();
						} catch (SQLException ignore) {
						}
					}
				}
			}

		}
		return false;
	}

es wird mir eine 1 zurückgegeben,gebe ich auch aus auf der konsole zur prüfung, nur
bei der if-Prüfung geht er nicht rein?

Ich kriege immer false zurück:S
 

Antoras

Top Contributor
mamelinchen hat gesagt.:
Java:
				  ResultSetMetaData rsmd = (ResultSetMetaData) resultSet.getMetaData();
				  int n = rsmd.getColumnCount();
				  while( resultSet.next() ) {
			          for( int i=1; i<=n; i++ )  // Attention: first column with 1 instead of 0
			          //  System.out.print( extendStringTo14( ResultSet.getString( i ) ) );
			          System.out.println(  resultSet.getString( i ) ) ;
			          System.out.println(  "" ) ;
			          System.out.println(resultSet.getString(1));
Was willst du mit diesem ganzen Code erreichen?

Das hier reicht vollkommen:
Java:
ResultSet r = statement.executeQuery(sql);

int count = 0;
while (r.next()) {
  count = r.getInt(1);
}
if (count == 1) {
  //mach was
}
Wenn du auf das ResultSet außerhalb von der Schleife zugreifen willst, solltest du eine Exception bekommen, was du gemerkt hättest wenn du sie dir ausgegeben hättest...

mamelinchen hat gesagt.:
Ich habe ja den Tomcat drin, bloss ich nutze in einmal in XAMPP und einmal in eclipse.
Du bindest ein mal einen Tomcat in XAMPP ein und rufst diesen dann über Eclipse auf. Solange du den Tomcat entweder nur über XAMPP oder über Eclipse starten möchtest (zur gleichen Zeit), sollte das ohne Probleme gehen.
 

mamelinchen

Bekanntes Mitglied
Aaaaaaaaaaaaaahhh so geht das!

if (resultSet.getInt(1) == 1) {

geht nicht da es ein anderer Typ ist und ich durch die Zuweisung an den count...ahhhh:D

und mir hat die while-Schleife gefehlt, ohne die geht nix!

Danke, es geht!!!!

Vielen dank für deine Hilfe, es geht vorwärts:D

Aber der Tomcat blockiert den Port trotzdem , wenn ich ihn ausschalte in eclipse, oder eclispe beende.
 

Antoras

Top Contributor
Aber der Tomcat blockiert den Port trotzdem , wenn ich ihn ausschalte in eclipse, oder eclispe beende.
Sollte normalerweise nicht passieren wenn du ihn richtig beendest. Guck mal im Task-Manager nach ob vllt. doch noch irgendwo ein halbtoter Tomcat rumschwirrt, nachdem du ihn terminiert hast.
 

mamelinchen

Bekanntes Mitglied
Hab ich auch schon, habe javaw, die danach noch rumschwirrt beendet und sonst alles, was danach klingt, aber trotzdem!
Der Tomcat liess sich in XAMPP auch nach NEUSTART nicht mehr starten.

Hab schon viel gesucht!
Und ich glaube ich lass die Finger davon , ihn in Eclipse nochma einzustellen.
Am Ende musst ich ihn neu installieren:(
 

Antoras

Top Contributor
Ich hab den Tomcat in Verbindung mit XAMPP auch nie richtig zum laufen gebracht. Benutz ihn lieber ohne XAMPP. Ist zwar mehr Aufwand, vor allem weil du dann noch extra ein DBMS installieren musst, aber danach kannst du sicher sein, dass es funktioniert - sofern du alles richtig gemacht hast ;).

Aber so wie sich das anhört kann die fehlende Portfreigabe eigentlich nicht am Tomcat liegen, wenn der Prozess wirklich nicht mehr existiert. Da muss Windows sonst noch irgendwo was laufen haben. Ich rate dir mal zu einem der wenigen Sachen, zu denen man bei Windows raten kann: neu starten. :(
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Encera Servlet Mapping Netzwerkprogrammierung 5
N Test Servlet funktioniert nicht Netzwerkprogrammierung 11
D Response in Java Servlet erzeugen Netzwerkprogrammierung 0
C Servlet erstellen klappt nicht Netzwerkprogrammierung 3
S HTTP Servlet als Instanzen im Programm starten Netzwerkprogrammierung 3
H Reponse vom Servlet leer Netzwerkprogrammierung 16
H Servlet Umlaute Netzwerkprogrammierung 20
R Socket SSL-Connect in Servlet - keystore wird nicht gefunden Netzwerkprogrammierung 2
F Kann Klasse nicht zu Servlet casten Netzwerkprogrammierung 5
S send riesige "Query" to servlet Netzwerkprogrammierung 7
S Servlet - Datei kann nicht gelöscht werden Netzwerkprogrammierung 12
N Servlet Response fehlerhaft Netzwerkprogrammierung 14
E RMI - Servlet Netzwerkprogrammierung 4
D Apache Mina und GWT Servlet Netzwerkprogrammierung 4
B Pdf Stream von Servlet mit itext Netzwerkprogrammierung 12
B HTTP PDF Servlet download vom Server zum Client Netzwerkprogrammierung 3
B HTML meets Servlet Netzwerkprogrammierung 6
J ObjectOutputStream legt Servlet lahm Netzwerkprogrammierung 7
H Objekt von JSP an Servlet übergeben Netzwerkprogrammierung 4
S Bild-Datei von Servlet an Browser senden Netzwerkprogrammierung 8
S Servlet InputStream leer?! Netzwerkprogrammierung 14
H kleines Servlet Problem Netzwerkprogrammierung 2
N Servlet-RMI Kommunikation Netzwerkprogrammierung 8
D Verbindung über ein Servlet zu einem Server Netzwerkprogrammierung 4
Paule Connection Applet Servlet ohne Socket bzw RMI Netzwerkprogrammierung 2
R Problem mit Servlet ansprechen Netzwerkprogrammierung 7
B Servlet URL aufruf Netzwerkprogrammierung 4
R Servlet Komunikations Problem Netzwerkprogrammierung 4
D Einfache Applet-Servlet-Kommunikation Netzwerkprogrammierung 5
A JSP->Servlet->Programm (Ausführung) -> Servlet -&gt Netzwerkprogrammierung 2
M Servlet - Applet Kommunikation Netzwerkprogrammierung 3
R Java Applikation als Client ,Servlet als Server: Problem? Netzwerkprogrammierung 3
Z dateidownload vom servlet aus Netzwerkprogrammierung 4
T Servlet-Programmierung & Templates Netzwerkprogrammierung 4
T Einfacher Servlet-Server Netzwerkprogrammierung 8
A RMI Servlet Client Netzwerkprogrammierung 6
S object via post auf servlet send und weiter bearbeiten Netzwerkprogrammierung 11
K Applet - Servlet Kommunikation ohne Sockets Netzwerkprogrammierung 5
R applet servlet kommunikation Netzwerkprogrammierung 2
I Servlet ParameterChaos Netzwerkprogrammierung 2
C Applet <> Servlet Netzwerkprogrammierung 4
K RMI Kommunication zw. Servlet und EJB Netzwerkprogrammierung 7
P Jenkins Login per Java Download Manager Netzwerkprogrammierung 15
T HTTP JSoup Automatic Website Login Netzwerkprogrammierung 1
Q-bert Link zugang ohne login sperren. Netzwerkprogrammierung 1
S Jsoup Login auf Schulserver Netzwerkprogrammierung 3
T Netzwerk Login Felder ansprechen Netzwerkprogrammierung 1
M HTTPS Login & etwas posten Netzwerkprogrammierung 0
M Sicheres Login-System für App implementieren Netzwerkprogrammierung 6
K Login Shibboleth Netzwerkprogrammierung 0
L Mit Java über PHP in MySQL anmelden (Login script) Netzwerkprogrammierung 3
N HTTP Apache 4.2.1 HttpClient 302 nach Login und auf den weiteren Seiten. Netzwerkprogrammierung 5
D HTTP Frage zu Login & Session ID Netzwerkprogrammierung 5
J Login Bereich auf jeder Seite Netzwerkprogrammierung 4
G Cookie Verwaltungs Problem nach Login auf InetSeite (Wo utma-Cookie?) Netzwerkprogrammierung 18
I HTTP S - Zertifikate+Cockies für Form-basierten Login Netzwerkprogrammierung 2
S Automatischer Login auf einer Webseite Netzwerkprogrammierung 12
E Webseite mit Login laden Netzwerkprogrammierung 5
C Login ohne Erfolg Netzwerkprogrammierung 2
xDarkSunx Hilfe Chat Login Netzwerkprogrammierung 7
T Java => Login mit MySQL Netzwerkprogrammierung 10
M Login mit HtmlUnit Netzwerkprogrammierung 6
K Login via apache httpclient Netzwerkprogrammierung 4
N Login mit Roboter Netzwerkprogrammierung 16
S HTTP Login mit CAS Authentisierung über SSL Netzwerkprogrammierung 2
J Socket Doppel Login geht nicht Netzwerkprogrammierung 11
N Login auf Website Netzwerkprogrammierung 11
H HTTP Login mit POSTMethod und httpClient Netzwerkprogrammierung 5
K HTTP Login Internetseite Netzwerkprogrammierung 17
lordcarlos HTTP Apache HttpClient, post und login. Netzwerkprogrammierung 2
G ftp login Netzwerkprogrammierung 10
L Web Login Netzwerkprogrammierung 3
K Bad Request nach Form Login in Jakarta HttpClient Netzwerkprogrammierung 4
H Login Chatsystem Netzwerkprogrammierung 5
2 Redirect, Login und Download bei Rapidshare.com Netzwerkprogrammierung 4
lebenlechzer Login per Telnet auf Router Netzwerkprogrammierung 2
N icq login Netzwerkprogrammierung 16
M Problem: connection abbrechen und login erkennen Netzwerkprogrammierung 2
C Login bei einem php-script Netzwerkprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben