Tabelle über Servlet einlesen, in JSP ausgeben

AKST

Erfahrenes Mitglied
Hallo Leute,

ich habe eine Tabelle namens "dozenten", welche ich in einem Servlet einlese:
Code:
...
      Statement statement = connection.createStatement();
      String sqlQuery="select id, name, nachname from dozent";
      ResultSet resultset = statement.executeQuery(sqlQuery);
      while(resultset.next()){
        //hier kommt noch was...
      }
...
Nachdem die Werte vom Servlet eingelesen wurden wird zu einer JSP umgeleitet:
Code:
...
    RequestDispatcher dispatcher = 
    request.getRequestDispatcher("/WEB-INF/Sites/Dozenten.jsp");
    dispatcher.forward(request, response);
...
Jetzt möchte ich die drei Werte (id, name, nachname) für alle Datensätze im Servlet in einem Vector oder sonstiger Collection speichern und diese Werte dann anschließend in einer JSP ausgeben.

Wie würdet ihr diese Werte speichern, dass diese jeweils für eine session gültig sind? Wie würdet ihr diese Werte in der JSP ausgeben?
Ich habe da so ein paar Ideen bin mir aber nicht so sicher ob diese wirklich elegant sind.

Gruß
 
Ich habe es jetzt so gelöst, bin aber mit der Ausgabe in der JSP nicht ganz zufrieden, da ich zuviel javaquelltext drin habe:

Zuerst frage ich alle dozenten aus der DB ab und speichere das Resultset in einem Vector aus Beanobjekten:
Code:
        Statement sqlstatement = connection.createStatement();
        String sqlQuery = "select D_NR, D_ANREDE, D_VORNAME, D_NACHNAME from"+             
                          "scott.dozent order by D_NR";
        ResultSet doz_resultset = sqlstatement.executeQuery(sqlQuery);

        Vector doz_Vector = new Vector();
        while(doz_resultset.next()){
          Dozenten_BEAN akt_dozent = new Dozenten_BEAN();
          akt_dozent.setDoz_ID(doz_resultset.getInt("D_NR"));
          akt_dozent.setDoz_Anrede(doz_resultset.getString("D_ANREDE"));
          akt_dozent.setDoz_vorname(doz_resultset.getString("D_VORNAME"));
          akt_dozent.setDoz_Nachname(doz_resultset.getString("D_NACHNAME"));
          doz_Vector.add(akt_dozent);
        }
        //Vector an die session übergeben.
        HttpSession session = request.getSession();
        Dozenten_BEAN dozent = (Dozenten_BEAN)session.getAttribute("dozent");
        dozent.setDozentenVector(doz_Vector);
        session.setAttribute("dozent", dozent);
        connection.close();

Jetzt gebe ich die Daten des Vectors in Tabellenform in einer JSP aus:
Code:
   <% 
    if(dozent.getDozentenVector()!=null){
      java.util.Iterator it =  dozent.getDozentenVector().iterator();
      while(it.hasNext()){
	out.println("<tr>");
	coreservlets.Dozenten_BEAN doz =  (coreservlets.Dozenten_BEAN)it.next();
	          
        out.println("<td>"+doz.getDoz_Anrede()+"</td>");
	out.println("<td>"+doz.getDoz_vorname()+"</td>");
	out.println("<td>"+doz.getDoz_Nachname()+"</td>");
	out.println("</tr>");
     }
   }
  %>

Wie kann ich die Ausgabe in der JSP besser lösen? Bitte mit Quelltextangabe wenn es geht.

Gruß
 
Hallo!

Also ich verwende in JSP's keinen Scriptlet Code mehr und empfehle dir da gleiche.
Schau dir doch im Sun J2EE Tutorial mal die JSTL an.

Hier mein Beispiel:

TestServlet ... hier erzeuge ich die DummyDaten-> Eine Collection (Zeilen) die String Arrays (spalten) enthält.
Code:
/*
 * ASW Berufsakademie
 * 
 * Created on 09.01.2005 / 13:46:39
 * 
 */
package de.asw.tutorial;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author Administrator
 *
 * TODO Explain what I do
 * 
 * @web.servlet-mapping url-pattern="/TestServlet"
 * @web.servlet description="TestServlet"
 *              display-name="TestServlet"
 *              name="TestServlet"
 * 
 */
public class TestServlet extends HttpServlet {

    /* (non-Javadoc)
     * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
     */
    protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        processRequest(arg0, arg1);
    }

    /* (non-Javadoc)
     * @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
     */
    protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        processRequest(arg0, arg1);
    }

    private void processRequest(HttpServletRequest arg0,
            HttpServletResponse arg1) throws ServletException, IOException {
        
        List list = new ArrayList();
        list.add(new String[]{"a0","b0","c0"});
        list.add(new String[]{"a1","b1","c1"});
        list.add(new String[]{"a2","b2","c2"});
        
        arg0.setAttribute("tabelle",list);
        
        RequestDispatcher rd = arg0
                .getRequestDispatcher("pages/forms/tutor/DisplayResult.jsp");
        rd.forward(arg0, arg1);
    }
}

Hier die DisplayResult.jsp:
Hier zeige ich wie man über eine Collection und Arrays mit JSTL Tags iterieren kann.
Code:
<%@ taglib uri="/WEB-INF/tlds/c-rt.tld" prefix="c"%>
<%@page contentType="text/html" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>

<head>
	<title>DisplayResult</title>
</head>

<body bgcolor="#FFFFFF">
	<table border="1">
	<c:forEach var="zeile" items="${tabelle}">
  		<tr>
	  		<c:forEach var="i" items="${zeile}">
			  <td><c:out value="${i}"/></td>
			</c:forEach>
  		</tr>
	</c:forEach>
	</table>
</body>

</html>

Die Ausgabe:

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>

<head>
	<title>DisplayResult</title>
</head>

<body bgcolor="#FFFFFF">
	<table border="1">
	
  		<tr>
	  		
			  <td>a0</td>
			
			  <td>b0</td>
			
			  <td>c0</td>
			
  		</tr>
	
  		<tr>
	  		
			  <td>a1</td>
			
			  <td>b1</td>
			
			  <td>c1</td>
			
  		</tr>
	
  		<tr>
	  		
			  <td>a2</td>
			
			  <td>b2</td>
			
			  <td>c2</td>
			
  		</tr>
	
	</table>
</body>

</html>

HTH,
Gruß Tom
 
Hallo Tom,

danke für deine Hilfe. Jetzt sieht es so aus, wie ich es mir vorgestellt habe:

Code:
   <c:forEach items="${dozent.dozentenVector}" var="doz">
      <tr>
       <td>${doz.doz_Anrede}</td>
       <td>${doz.doz_vorname}</td>
       <td>${doz.doz_Nachname}</td>
      <tr>
    </c:forEach>

Werde mal sehen, ob ich jetzt besser ne Arraylist nehme, da diese schneller ist.
 

Neue Beiträge

Zurück