Anfängerproblem: bean wird nicht geladen

Vatar

Erfahrenes Mitglied
Nabend.
Ich mache gerade das jsp-tutorial und irgendwie will er die bean nicht laden.
Code:
org.apache.jasper.JasperException: Attempted a bean operation on a null object.
	org.apache.jasper.runtime.JspRuntimeLibrary.handleGetProperty(JspRuntimeLibrary.java:601)
	org.apache.jsp.index_jsp._jspService(org.apache.jsp.index_jsp:51)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:99)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:325)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:245)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

Ich vermute dass er die web.xml nicht geladen hat.

Ich sollte vielleicht erwähnen, dass ich Eclipse mit dem Tomcat-Plugin nutze. Ich konnte schon Sachen anzeigen lassen, weshalb ich denke dass das Plugin richtig konfiguriert ist.

aber mit der Zeile
Code:
<jsp:getProperty name="greetingbean" property="greeting" />
hat er seine Probleme

Schon mal Danke im voraus
 
Danke für das Interesse.
Der Code steht im Tutorial aber ich schreibs trotzdem nochmal.

web.xml
Code:
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
    <servlet> 
        <servlet-name>start</servlet-name>
        <servlet-class>de.tutorials.StartServlet</servlet-class>
    </servlet>
	<servlet-mapping>
		<servlet-name>start</servlet-name>
		<url-pattern>/greeting</url-pattern>
	</servlet-mapping>
</web-app>

StartServlet.java
Code:
package com;

import java.io.IOException;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

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

/**
 * @author holyfly
 * 10.05.2004 StartServlet
 */
public class StartServlet extends HttpServlet {
	/* (non-Javadoc)
	 * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		    /* Die die von mir definierte Methode getGreetingBean() gibt mir eine
		     * JavaBean (Klasse mit get/set Methoden) zurück.
		     */ 
		    GreetingBean bean = getGreetingBean();
		    /* Die bean dem request "anhängen" */
		    request.setAttribute("greetingbean",bean);
		    /* RequestDispatcher auf die JSP hello.jsp holen */
		    RequestDispatcher dispatcher = request.getRequestDispatcher("hello.jsp");
		    /* über den RequestDispatcher den request, und den response auf 
		     * die JSP forwarden.
		     */
		    dispatcher.forward(request,response);
	}

	/**
	 * @return
	 */
	private GreetingBean getGreetingBean() {
		GreetingBean bean = new GreetingBean();
		/* die von mir definierte Methode getDayTime bestimmt wie 
		 * der Gruss aussehen soll (sprich guten Morgen, guten Abend ..)
		 */
		bean.setDayTime(getDayTime());
		return bean;
	}

	/* (non-Javadoc)
	 * @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		    /* einzelne kommentare in doGet() beachten */
		 	GreetingBean bean = getGreetingBean();
		 	bean.setDayTime(getDayTime());
		 	/* Wir holen uns die geposteten Daten, aus dem request */
		 	String name = request.getParameter("name");
		 	/* übergeben den namen der bean */
		 	bean.setName(name);
		 	request.setAttribute("greetingbean",bean);
		 	/* kurzform für das RequestDispatcher forward */
		 	request.getRequestDispatcher("index.jsp").forward(request,response);
	}

	/**
	 * @return
	 */
	private String getDayTime() {
		/* einen neuen Kalender erstellen, und auf die aktuelle Zeit setzen*/
		Calendar calendar = new GregorianCalendar();
		calendar.setTimeInMillis(System.currentTimeMillis());		
		/* ein Date object mit der aktuellen Zeit erstellen */
		Date now = calendar.getTime();
		
		/* Kalender auf 12:00 setzen und den Stamp für diese Zeit erhalten
		 * um damit ein neues Date Object um 12:00 zu erhalten  */
		calendar.set(Calendar.HOUR_OF_DAY,12);
		calendar.set(Calendar.MINUTE,0);
		Date lunch = new Date(calendar.getTimeInMillis());
		
		/* Kalender auf 18:00 setzen und den Stamp dafür erhalten für ein 
		 * erneutes Date Object */
		calendar.set(Calendar.HOUR_OF_DAY,18);
	    Date evening = new Date(calendar.getTimeInMillis());
	    
	    /* Rueckgabe wird auf Morgen gesetzt und immer ein weiter wenn es
	     * doch später ist. 
	     */
	    String daytime = "Morgen";
	    if(now.after(lunch))
	    	daytime = "Tag";
	    if(now.after(evening))
	    	daytime = "Abend";
	    
		return daytime;
	}
	
}

GreetingBean.java
Code:
package com;

/**
 * @author holyfly
 * 12.05.2004 GreetingBean
 */
public class GreetingBean {
	private String dayTime, name;
	private String greeting;
	/**
	 * @param dayTime The dayTime to set.
	 */
	public void setDayTime(String dayTime) {
		this.dayTime = dayTime;
	}
	/**
	 * @param name The name to set.
	 */
	public void setName(String name) {
		this.name = name;
	}
	/**
	 * @return Returns the greeting.
	 */
	public String getGreeting() {
		String value = "Guten "+dayTime;
		if(name!=null)
			value+=" liebe(r) "+name;
		return value;
	}
}

index.jsp
Code:
<html>
<!-- Angabe der genutzen Sprache in dieser JSP --> 
<%@ page language="java" %> 
<head>  
	<title>Mein erstes JSP</title> 
</head> 
<body>  
	<!-- Zugriff auf die GreetingBean instanz hier das Property greeting -->  
	<jsp:getProperty name="greetingbean" property="greeting" />  
	
	<br/>  
	<form action="greeting" method="post">  Ihr name: 
		<input name="name" type="text" />  
		<input type="submit" value="Los!" />  
	</formular>
	hallo
</body>
</html>
 
Zuletzt bearbeitet:
Auf die schnelle würde ich sagen das der Fehler in der index.jsp liegt, denn dort ist das Objekt greetingbean nicht verfügbar bzw noch nicht instanziiert oder
Code:
   <jsp:getProperty name="greetingbean" property="greeting" />
ist falsch scoped.

Du solltest vorher

Code:
  <jsp:useBean id="greetingbean" class="com.GreetingBean" />

benutzen um das greetingbean zu instanziieren, oder solltest, soweit das greetingbean vorhanden ist bei der getProperty methode den richtigen scope (session, request etc. )setzen.
 
Super.
Funktioniert zwar noch nicht ganz (die erste seite wird angezeigt, aber bei der ausführung kommt es zu einem anderen Fehler) aber jetzt kann ich mich wieder grob erinnern. Hab in meinem ersten praktikum mal ein wenig was mit jsp gemacht, das is aber schon 1,5 Jahre her.
Werd mich mal durchackern.

Thx


edit: Problem erledigt. In der web.xml war noch ein anderer Packetpfad angegeben. Man sollte doch nichts ändern in einem tutorial (wenn man sich nicht so gut auskennt) ;-)
 
Zuletzt bearbeitet:
So, nach einigen Stunden des herumexperimentierens und Googeln's hab ich die Schnauze voll. Ich bekomme den Selben Fehler, wobei ich alles aus dem Tutorial kopiert habe.

Code:
Attempted a bean operation on a null object.

Die Anweisung mit <jsp:useBean id="greetingbean" class="com.GreetingBean" /> hilft mir auch nicht weiter, denn ich weis nicht wie ich sie in diesem konkreten Beispiel Anwenden soll. Mit <jsp:useBean id="greetingbean" class="de.tutorials.GreetingBean" /> bekomme ich mal abwechselnd den obigen Fehler, ab und an mal den Hinweis, dass der Wert "de.tutorials.GreetingBean" ungültig ist.

Bitte schreibt schnell, Tutorials die nicht funktionieren nerven echt.
 
Hi, versuchts mal mit <form method="get" und nicht post.

Ihr ruft ja schließlich auch die doGet() im Servlet auf.
 

Neue Beiträge

Zurück