# Bean: server internal error



## Donar (21. Okt 2008)

Hallo ihr lieben,

ich bin gerade dabei meine erste Seite auf Basis von Jdbc zu erstellen. Dabei stoße ich zunehmend auf Probleme, die ich nicht lösen kann. Ich habe einen vorgefertigten bekommen und nur die Beans abgeändert. 
Folgende Fehlermeldung ist entstanden:



> description The server encountered an internal error () that prevented it from fulfilling this request.
> 
> exception
> org.apache.jasper.JasperException: Attempted a bean operation on a null object.
> ...




note The full stack trace of the root cause is available in the Apache Tomcat/6.0.16 logs.


Hier die abgeänderte Bean:


```
public void getGerichte(String[] paramArray, String ActionURL, String controlParam){

	 result = null;
	 ResultSet  rs = null;
     String query = "SELECT GERICHT FROM GERICHTE";

     try{ 
    	PreparedStatement prepStatement = connection.prepareStatement(query);
		StringBuffer sb = new StringBuffer();
		int noDataControl = paramArray.length;

		sb.append("<DIV ALIGN=\"left\"><H3>
 \n");
		sb.append("<FORM ACTION=\"" + ActionURL + "\" METHOD=\"get\">");
		sb.append("<TABLE>");
				
			while (rs.next()) {
				sb.append("<tr><td>");
				sb.append(rs.getString(1));
				sb.append("</td></tr>");
			}		 	 
		sb.append("</TABLE></H3></DIV> 
  \n");
		result = sb.toString();
		rs.close();

 	} catch (SQLException e) {
            result = "

 SQL error: <PRE> " + e + " </PRE> </P>\n";
	} catch (Exception ignored) { 
        	result = "

 Error ignored: <PRE> " + ignored + " </PRE> </P>\n";
        }
   }

    public String getResult() {
	return result;
    }
```

Und der Aufruf erfolgte über folgende JSP Seite:


```
<%@ page import="mokepi.cicerone.anwendung.JdbcQueryBean" %>
<%@ page contentType="text/html" %>
<%@ page session="true" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Style-Type" content="text/css" />
	<meta name="Content-Language" content="de" />
	<meta name="author" content="Steve Weise" /> 
    <link href="web/css/screen.css" rel="stylesheet" type="text/css" media="screen, projection" /> 
</head>

<body>
    Liste:
    <jsp:getProperty name="getTopics" property="result" />
</body>
</html>
```

Da dies mein erster Versuch ist, verstehe ich die Fehlermeldung nicht. Ich bin für jeden Tip dankbar. 

Grüße

Steve


----------



## maki (21. Okt 2008)

> exception
> org.apache.jasper.JasperException: Attempted a bean operation on a null object.


Diese Fehlermeldung bedeutet: Du versuchst eine Methode eines null Objektes aufzurufen.

getTopics ist anscheinend null.

Abgesehen davon ist es echt mies HTML Code von Servlets erstellen zu lassen.


----------



## Donar (21. Okt 2008)

Hallo Maki,

vielen lieben Dank für die schnelle Antwort und für den Tip, den html Code nicht in das Servlet zu schreiben.
Zur Fehlermeldung: korrigiere mich bitte, wenn ich es falsch verstehe. Mit der Zeile <jsp:getProperty name="getTopics" property="result" /> greife ich auf die funktion getTopics zu. Und mit der propety="result" greife ich auf das String result zu. Das ist bei mir als private deklariert und ich müsste eigentlich die Funktion getResult aufrufen um als Ergebnis den String mit den gewünschten Code zu erhalten. Wenn ja, wie rufe ich mit jsp diese Funktion auf, die zuerst getTopics ausführt und mir dann als Ergebnis den String result ausgibt? 

Grüße

Steve


----------



## maki (21. Okt 2008)

Kurze JSP Syntax Übersicht: http://java.sun.com/products/jsp/syntax/1.2/card12.pdf



> Mit der Zeile <jsp:getProperty name="getTopics" property="result" /> greife ich auf die funktion getTopics zu.


Nein.

```
<jsp:getProperty name="beanInstanceName" property="propertyName" />
```
name ist der Name der Bean, property ist der name der Property (nach JavaBean Standard).



> Und mit der propety="result" greife ich auf das String result zu.


Jain, siehe unten.



> Das ist bei mir als private deklariert und ich müsste eigentlich die Funktion getResult aufrufen um als Ergebnis den String mit den gewünschten Code zu erhalten.


Ja, aber unabhängig davon ob es privat ist oder nicht, der Beanstandard schreibt vor das immer die Getter & Setter benutzt werden.

Hast du deine Bean in einen Scope gelegt?


----------



## Donar (21. Okt 2008)

..und wieder ein wenig mehr geklärt.

Ich gehen davon aus, dass ich die Bean nicht in einen Scope gelegt habe, da ich nicht weiß, was ein Scope ist. Das ist nicht zufällig meine web.xml? 

Ich habe 4 Dateien, mit denen ich arbeite (soweit ich das erkannt habe - bitte erweitern, falls ich wieder falsch liege). Das eine ist die JdbcQueryBean. Diese enthält alle Abfrage Beans (also alle Abfragen und den dazugehörigen Codezeilen). Die zweite Datei ist mein ControllerServlet (Enthält die doAction Parameter durch die ich auf andere JSP Seiten weitergeleitet werden kann). Die dritte Datei ist die OrderdataBean (in dieser werden alle INSERTS beschrieben). Die letzte Datei ist meine web.xml (leider weiß ich nicht genau, wofür diese benötigt wird).


----------



## Donar (21. Okt 2008)

Nachtrag: Folgende Zeile wurde nun in der JSP hinzugefügt.

<jsp:useBean id="JdbcQueryBean" class="mokepi.cicerone.anwendung.JdbcQueryBean" scope="session" />


----------

