Datenübergabe von Servlet an JSP

Status
Nicht offen für weitere Antworten.

DieToni

Mitglied
Hallo zusammen,

ich stecke leider noch in den Anfängen was Java und JSPs angeht. Im Moment arbeite in an einem Projekt, wo ich eben dies brauche und hänge jetzt seit Tagen an einer Stelle fest: Ich möchte mit einem Servlet eine Datenbank auslesen (das funktioniert auch), die Ergebnisse dann aber nicht mit dem Servlet, sondern einer JSP darstellen.
Ich weiß, dass ich dazu die Daten mit einem request.setAttribute(...) übergebe und mit dem RequestDispatcher die JSP aufrufe, allerdings bekomme ich das einfach nicht umgesetzt. Ich glaub mir fehlt da einfach das Gesamtverständnis :oops: Habe hier im Forum schon quer gelesen, aber leider bringt mich das gerade auch nicht viel weiter.

Hier erstmal der Code vom Servlet:

Java:
import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class SQLServlet5 extends HttpServlet {
	public void doPost(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
			response.setContentType("text/html");
			PrintWriter out = response.getWriter();
			String username = "root";
			String password = "";
			String url = "jdbc:mysql://localhost:3306/test2?";
			String query = "SELECT * FROM employee";
			  
			showTable(url, username, password, query, out);
			out.println("</center></body><html>");
	}
	
	public void showTable(String url, String username, String password, String query, PrintWriter out) {
		try {
			//Load database driver if it's not already loaded
			Class.forName("com.mysql.jdbc.Driver");
			//Establish network connection to database
			Connection connection = DriverManager.getConnection(url, username, password);
			DatabaseMetaData dbMetaData = connection.getMetaData();
			Statement statement = connection.createStatement();
			ResultSet resultSet = statement.executeQuery(query);
			out.println("<table border=1>");
			ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
			int columnCount = resultSetMetaData.getColumnCount();
			out.println("<tr>");
			//Column index starts at 1
			for (int i = 1; i <= columnCount; i++) {
				out.print("<th>" + resultSetMetaData.getColumnName(i));
			}
			out.println();
			//Step through each row in the result set
			while (resultSet.next()) {
				out.println("<tr>");
				for (int i = 1; i <= columnCount; i++) {
					out.print("<td>" + resultSet.getString(i));
				}
				out.println();
			}
			out.println("</table>");
			connection.close();
		} catch (ClassNotFoundException cnfe) {
			System.err.println("Error loading driver: " + cnfe);
		} catch (SQLException sqle) {
			System.err.println("Error loading connection: " + sqle);
		} catch (Exception ex) {
			System.err.println("Error with input: " + ex);
		}
	}
}

Bis jetzt hab ich eben die Ergebnisse der Datenbankabfrage durch das Servlet darstellen lassen. Wenn ich das jetzt an eine JSP übergeben will, brauche ich ja sowas in der Richtung:

Java:
request.setAttribute("meinErgebnis", ErgebnisObjekt); 
RequestDispatcher rd = request.getRequestDispatcher("Ausgabe.jsp"); 
rd.forward(request,response);

Aber wie bekomm ich jezt die Ergebnisse vom ResultSet in das Ergebnisobjekt?

Wie gesagt, ich stell mich da gerade selten dämlich an und hoffe das mit einer von euch mal das Brett vom Kopf nehmen kann.

Schonmal Danke im Voraus!
 

mvitz

Top Contributor
in der JSP
Code:
${meinErgebnis.xxx}

Für XXX kann alles eingetragen werden, was per getXXX oder isXXX abfragbar ist (also eine JavaBean ausmacht).

Zudem kann es sich z.B. bei Listen auch noch lohnen die JSTL einzusetzen.

Ganz gutes Tutorial findet sich hier:
JSP-Tutorial - Inhalt
 

DieToni

Mitglied
Hallo, Danke für die Antwort.

Allerdings ging es mir mehr darum, wie ich direkt im Servlet die Daten aus dem ResultSet in das Objekt "ErgebnisObjekt" schreiben kann.

Die Weiterverarbeitung der Daten in der JSP bekomme ich denke ich hin.

LG Toni
 
S

SlaterB

Gast
was ist denn ErgebnisObjekt für ein Objekt?
hast du da Platz für beliebig viele Elemente mit jeweils mehreren Attributen?
z.B.

Java:
ErgebnisObjekt x = ..
while (resultSet.next()) {
   Entry e = x.newEntry();
   for (int i = 1; i <= columnCount; i++) {
       e.add(resultSet.getString(i));
   }
}
 

DieToni

Mitglied
Ich habe mein Servlet jetzt mal umgeschrieben. Compilen kann ich es schon mal, nur noch nicht testen, da ich jetzt doch vor dem Problem stehe, wie ich das in der JSP wieder ausgebe.
Denkt ihr, das wäre so erstmal praktikabel?

Java:
import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.ArrayList;
import java.util.List;

public class SQLServlet extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
			response.setContentType("text/html");
			PrintWriter out = response.getWriter();
			String username = "root";
			String password = "";
			String url = "jdbc:mysql://localhost:3306/test2?";
			String query = "SELECT * FROM employee";
			
	try {
			//Load database driver if it's not already loaded
			Class.forName("com.mysql.jdbc.Driver");
			//Establish network connection to database
			Connection connection = DriverManager.getConnection(url, username, password);
			DatabaseMetaData dbMetaData = connection.getMetaData();
			Statement statement = connection.createStatement();
			ResultSet resultSet = statement.executeQuery(query);
			ResultSetMetaData rsmd = resultSet.getMetaData();
			int columnCount = rsmd.getColumnCount();
			
			List rows = new ArrayList();
			while(resultSet.next()){
				String[] row = new String[columnCount];
				for(int i = 1;i<=columnCount;i++){
					row[i-1]=resultSet.getString(i);
				}
				rows.add(row);	
			}
			
			String[][] rowData = (String[][])rows.toArray(new String[rows.size()][columnCount]);
			
			request.setAttribute("rowData", rowData); 
			RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/Ausgabe.jsp"); 
			rd.forward(request,response);
			
			resultSet.close();
			statement.close();
			connection.close();
			
		} catch (ClassNotFoundException cnfe) {
			System.err.println("Error loading driver: " + cnfe);
		} catch (SQLException sqle) {
			System.err.println("Error loading connection: " + sqle);
		} catch (Exception ex) {
			System.err.println("Error with input: " + ex);
		}
	}
}

Falls das so okay ist, kann mir jemand einen Hinweis geben, wie ich das dann in der JSP weiterbenutzen kann? Dort soll die ganze Tabelle aus der Datenbank ausgegeben werden.

Vielen Dank für eure Hilfe :)
 
S

SlaterB

Gast
close() vor dem forward()

Zugriff auf Variablen und Umgang mit Arrays allgemein im JSP musst du aus Tutorials erlernen,
das ist doch kein Thema für ein Forum?!
in jedem Fall wüßte ich es derzeit nicht, wenn dann jemand anders
 
M

maki

Gast
Falls das so okay ist...
Hm... zum spielen mit JSPs und Servlets ist das vielleicht ok, aber ansonsten nicht.

Für jeden GET Request auf dein SQLServlet wird eine neue DB Verbindung aufgebaut, die Daten abgefragt und die DB Verbindung wieder geschlossen.
Eine "echte" Java WebApp darf das so nicht machen.
Was passiert denn wenn du 100 GET Requests gleichzeitg bzw. ziemlich schnell hintereinander bekommst? ;)

Ansonsten sieh dich mal nach JSTL und EL um, ist sehr nützlich für JSPs.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Datenübergabe aus selectOneMenu Web Tier 2
E Java Servlet doPost request, Mehrere Parameter mit demselben Namen aus Tabellenzeilen Web Tier 2
R servlet-mapping führt zu 404-Fehlern Web Tier 0
B Servlet mit TomCat9 Web Tier 0
A redirect mit servlet-mapping in web.xml Web Tier 4
J Wie Mouse Event in Servlet einbinden? Web Tier 1
D JSF Servlet Mapping Web Tier 3
J Session Servlet - JavaScript Web Tier 6
D Servlet 1 Servlet für alles - Wie Cookies per Ajax? Web Tier 1
S Problem mit Checkboxen im Servlet erkennen Web Tier 3
Todesbote Servlet MVC Design Pattern Web Tier 1
A Anfänger-Frage Servlet/Applet/JSP Web Tier 0
Shams Allgemeine Verständnisfrage zum Thema Servlet (in Vaadin) Web Tier 2
H File Output Servlet Web Tier 6
I vTiger Astersik Connector: NO JSP Support for , did not find org.apache.jasper.servlet.JspServlet Web Tier 0
OnDemand Servlet oder JSP Web Tier 12
H Servlet/JSP und OSGI Web Tier 2
L Servlet Datenbank Web Tier 0
D Java EE Servlet login Problem Web Tier 1
W Servlet SPEICHERN UNTER-Dialog für mehrere Dateien Web Tier 4
A Faces Context nicht mehr erreichbar nach Servlet Aufruf Web Tier 1
S Java Bean und Java Servlet Web Tier 2
D Servlet Servlet Weiterleitung static html Web Tier 5
G GWT 404 - Servlet nicht gefunden Web Tier 6
H Applet wirft AccessControlException bei File von Servlet Web Tier 3
H Servlet lässt sich nicht deployen Web Tier 7
C Kommunkation Servlets/Browseraufruf Servlet Web Tier 4
F.S.WhiTeY Servlet Servlet wird nicht angesprochen Web Tier 3
J Servlet Zugriff Servlet Web Tier 11
A JSON von JavaScript an Servlet Web Tier 9
K Servlet + JSP: JSP-Seite ein Array/ArrayList überliefern vom Controller-Servlet Web Tier 8
0 Servlet.Properties Web Tier 3
P Servlet Wo gibt es das javax.servlet.Servlet? Web Tier 2
H Servlet Servlet nimmt HTTP-GET mit Parameter entgegen Web Tier 2
5 Bild Pfad Servlet Web Tier 2
D Datenbankzugriff im Servlet Web Tier 5
H Servlet Apache Geronimo: Servlet nicht erreichbar Web Tier 2
S Ich brauche Buchempfehlung über JSP und Servlet Web Tier 2
A Parameterübergabe an Servlet und Aufruf von Servlets per Java Code Web Tier 7
S Auswahl eine Zeile von einer HTML Tabelle im Servlet Web Tier 4
K Servlet URL Mapping Web Tier 3
S ClassPath für Servlet Web Tier 3
reibi Servlet Logging - Standard Servlet Web Tier 5
K Portlet, Servlet doGet und doPost Web Tier 4
reibi Servlet Alleinlaufendes Servlet bauen Web Tier 6
P Servlet wird nicht gefunden - HTTP Error 503 Web Tier 7
lukas24680 Servlet pro Request Web Tier 2
C Pageing mit JSp&Servlet Web Tier 5
D JSP JSP integriert ein Servlet... Wie? Web Tier 7
I Servlet vor Browser URL-Direktzugriff schützen Web Tier 3
N Servlet ausführen Web Tier 26
B statische Html Seite als response erhalten (Servlet) Web Tier 3
A javax/servlet/jsp/jstl/core/Config Web Tier 1
F Servlet mapping ;-) Web Tier 3
H Servlet Mapping mit JSF Web Tier 8
B (JSP)+(Struts2)+(Servlet) Konfiguration web.xml Web Tier 2
W MVC mit Bean, JSP und Servlet Web Tier 6
T Button im Servlet - Werte übergeben Web Tier 2
J werte per post an servlet übergeben und auswerten Web Tier 3
ruutaiokwu HttpServletRequest-instanz in servlet und JSP unterschiedlich? Web Tier 5
T Bild durch anderes Bild ersetzen mit Servlet Web Tier 3
E Mein erstes Servlet Web Tier 8
S Servlet automatisch aufrufen Web Tier 2
J Kommunikation zwischen Servlet und EJB Web Tier 6
C Image in Servlet Web Tier 2
S Servlet File Upload (API oder JSPSmart download) Web Tier 4
N API Nutzung SERVLET Web Tier 12
J Memory Leak in Servlet nach längere Laufzeit Web Tier 6
ruutaiokwu template engine gesucht ohne abhängigkeit zum servlet container Web Tier 2
G Servlet Ausgabe richtig benutzen Web Tier 4
W Servlet auf sich selbst verweisen lassen (Anfängerfrage) Web Tier 6
M Servlet Ausführungsfehler Web Tier 4
D Servlet alle 6h ausführen Web Tier 5
M Servlet & JSP Organisation Web Tier 2
J seltsames Auslastungsproblem bei Servlet Web Tier 7
ruutaiokwu JSF - läuft ausserhalb des servlet-containers? Web Tier 5
R Direkten Servlet-Aufruf verhindern (JSP) Web Tier 3
K Formularweiterleitung an Servlet Web Tier 5
N Servlet: Problem mit getParameterValues Web Tier 4
J Dateiupload- Servlet Web Tier 14
H Probleme beim Aufrufen von Java- oder Servlet-Methoden aus Javascript Web Tier 2
G Kommunikation Servlet + Applikation Web Tier 4
megachucky Welche Servlet-Version benötigt GWT 2.0? Web Tier 13
X Servlet Select box Web Tier 6
S Java Servlet Content Type Web Tier 3
E Servlet zum speichern einer Datei in einer Datenbank Web Tier 3
M Servlet neuladen Web Tier 2
H Wie wurde ein Servlet aufgerufen Web Tier 2
J Servlet soll XML ausgeben und Javascript soll dieses einlesen Web Tier 3
H servlet fehlermeldung Web Tier 3
W JSP/Servlet Web Applikation programmierung Web Tier 9
J Faces response aus einem anderen Servlet heraus rendern Web Tier 4
E Servlet mit einem Link aufrufen? Web Tier 13
D Servlet FacesServlet is not available und Web Tier 3
S servlet bedienen mit get und post parameter Web Tier 10
S Laden von globalen Resourcen im Servlet Container..? Web Tier 3
T JBoss + Servlet + HTML Fileupload + Encoding Web Tier 1
2 Servlet: Pfad zu Webcontent Web Tier 6
J Servlet Sicherheit Web Tier 4
J struts2: vom value stack zum servlet Web Tier 14

Ähnliche Java Themen

Neue Themen


Oben