# JSP



## mike_ (20. Feb 2007)

hallo leute,

hier habe folgende klassen geschrieben:



> package person;
> import java.lang.String;
> 
> public class Person{
> ...




```
package person;

import java.util.Vector;
import java.lang.String;

public class Liste{

	private Vector vperson = new Vector();
	
	public Liste()
	{}
	
	public void hinzuperson(String name, String vorname, String telefon){
		Person p = new Person(name, vorname, telefon);
		vperson.add(p);
	
    	}
    	
    public Vector getAll()
    {
    	return vperson;
	}
	
	public Person search(String name){
		Person tmp = new Person();
	for(int i=0; i<vperson.size();i++)
	{	
	tmp = (Person) vperson.get(i);	
	if(tmp.getname().equals(name))
	{
		return tmp;
	}
	
	}
	return null;
	}
		
	
	
}
```


jetzt möchte ich das ganze erstmal testweise mit jsp aufrufen:


```
<%@ page language="java" import="java.util.*, person.*" %>

	
	<html><body>

<%
Vector pers = new Vector();
	
	Liste liste1 = new Liste();
	liste1.hinzuperson("Dieter", "Watzik", "de");
	liste1.hinzuperson("Peter", "Eurler", "ger");
	
	pers= liste1.getAll();
	
	Person p;
	
	

	for (int i=0; i<pers.size(); i++)
	{
		
		 p =  (Person) pers.get(i);
		
	out.println("\n" + p.getName() + " , " + p.getVorname() + " , " + p.getLand());

   }
%>

</body></html>
```

das problem macht diese zeile:
out.println("\n" + p.getName() + " , " + p.getVorname() + " , " + p.getLand());

wenn ich die weglasse, habe ich keine fehler sonst kommt sowas:

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: person.Person.getVorname()Ljava/lang/String;
	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
	org.apache.jsp.test_jsp._jspService(test_jsp.java:101)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

root cause

java.lang.NoSuchMethodError: person.Person.getVorname()Ljava/lang/String;
	org.apache.jsp.test_jsp._jspService(test_jsp.java:90)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

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


----------



## bronks (20. Feb 2007)

Zum einen gruselt mit die steinalte Version von Tomcat. Zum anderen ist Person nicht serialisiert und wegen dem eigentlichen Fehler habe ich den Verdacht, daß beim Build möglicherweise eine alte Class packetiert wurde in der die Methode getVorname() nicht exisitiert hat.


----------



## mike_ (20. Feb 2007)

danke erstmal

bei dem fehler steht getVorname()  weil ich die ausgabe nur auf getVorname()  beschränkt habe (also nicht so wie im code)

dumme frage: wie muss ich denn Person serialisieren?


----------



## SlaterB (20. Feb 2007)

import java.io.Serializable;
public class Person implements Serializable {


----------



## mike_ (20. Feb 2007)

hm, Person serialisieren hat leider nichts gebracht.


----------



## SlaterB (20. Feb 2007)

schreibe mal in der Konstruktor von Person
System.out.println("hier ist der Konstruktor");
und in die JSP schreibst du 
System.out.println("hier ist die JSP");

wenn eine oder alle Meldungen erscheinen, weiß du von welchem Code du die aktuelle Version hast


----------



## mike_ (21. Feb 2007)

danke

das komische ist, was ich schreibe, wird jetzt angezeigt (hab nochmal neu alles geschrieben), wenn ich aber das ganz neu starte nicht mehr!
ich probiere dann stück für stück des codes wieder einzufügen, dann geht es!
wenn ich aber die gleiche datei im anderen browser fenster aufrufe, wird wieder nichts angezeigt (also mit HTTP Status 500 usw.)- echt komisch!

folgdende meldung



> HTTP Status 500 -
> 
> type Exception report
> 
> ...


----------



## SlaterB (22. Feb 2007)

Cache leeren bzw. ausschalten


----------



## mike_ (23. Feb 2007)

danke
es lang aber an NullPointerException .

hab jetzt folgendes problem:


```
<form action="test.jsp" method=POST >

<INPUT TYPE="RADIO" NAME="choice" VALUE="search" > Suche eines Teilnehmers 

<INPUT TYPE="RADIO" NAME="choice" VALUE="add" > Hinzuf&gen eines Teilnehmers 

<INPUT TYPE="RADIO" NAME="choice" VALUE="list"  > Anzeigen aller Teilnehmer 

<INPUT TYPE="RADIO" NAME="choice" VALUE="change" > Ändern des Landes eines Teilnehmers 


<input type=submit  value="ok">

..............
else if (choice.equals("change"))
{
out.println("

Land ändern:
" 
+	"<form action=\"test.jsp\" method=POST>" 
+ "<input type=\"hidden\" name=\"funktion\" value=\"change\">"
+ "Name: <INPUT TYPE=\"text\" NAME=\"name\"  >
 "
+ "Vorname: <INPUT TYPE=\"text\" NAME=\"vorname\"  > 
"
+ "<input type=submit value=\"anzeigen\">");	
}//change
	
..................

else if (funktion.equals("change"))
{
name = request.getParameter("name");
vorname = request.getParameter("vorname");	
	
p = liste1.search(name, vorname);	

	if (p == null)
	{
		out.println("Person nicht gefunden");
	}
	else
	{out.println("änderung!");
		
		/*
out.println("Bitte neues Land eingeben: 
"
+	"<form action=\"test.jsp\" method=POST>" 
+ "Land <INPUT TYPE=\"text\" NAME=\"land2\"  >
 "
+ "<input type=submit value=\"ändern\">");	

land = request.getParameter("land2");

out.println(land);*/



out.println(p.getLand());
p.setLand("sdf");
}

	
}/
```

habe nur dafür das wichtige reingestellt

wenn ich probiere also, das land zu ändern, tritt immer fehler mit setLand() auf!



```
type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: person.Person.setLand(Ljava/lang/String;)V
	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
	org.apache.jsp.test_jsp._jspService(test_jsp.java:278)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

root cause

java.lang.NoSuchMethodError: person.Person.setLand(Ljava/lang/String;)V
	org.apache.jsp.test_jsp._jspService(test_jsp.java:260)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

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


NoSuchMethodError: wenn versucht wird, eine Methode einer Klasse aufzurufen, die sie nach einer Änderung nicht mehr besitzt -> heißt es er kann setLand() nicht finden? die ist bei mir auf jeden fall in der klasse person dabei!


----------



## SlaterB (23. Feb 2007)

ja spinn ich? die Frage hatten wir doch schon am Anfang...
nix gelernt?

System.out.println in Konstruktor!, 

Versionsausgabe ist schon extrem hilfreich
(jeder eindeutige Satz wie 'huhu' reicht als Version 
wenn du weißt dass du ihn vorher nie benutzt hast, 
konservativer ist eine Versionnummer)

noch sicherer wärs mit etwas wie

System.out.println("huhu");
Land land = getLand();
System.out.println("huhu, mein Land ist: "+land);

bzw. es geht ja um setLand(), dann eben das im Konstruktor testen,
und wichtig: immer die Verbindung zur JSP wahren, dort auch eine Ausgabe vor new Person()
sonst siehts du vielleicht Versionsnummern von Personen aus einem anderen Teil der Anwendung


----------



## Gast (23. Feb 2007)

Habt ihr schonmal was von Debugging gehört? Soll ganz toll sein.


----------



## SlaterB (23. Feb 2007)

Kinderkram 

Debugging einer Anwendung auf entfernten Rechner?

Debugging des 137. Durchlauf einer Operation?

macht vorallem keinen Sinn wenn Debugger und Anwendung unterschiedliche Versionen haben?


----------



## Gast von vorher (23. Feb 2007)

SlaterB hat gesagt.:
			
		

> Kinderkram
> Debugging einer Anwendung auf entfernten Rechner?



A.k.a. Remote Debugging



			
				SlaterB hat gesagt.:
			
		

> Kinderkram
> Debugging des 137. Durchlauf einer Operation?



A.k.a. Conditional Breakpoints bzw. Hit Counts.



			
				SlaterB hat gesagt.:
			
		

> Kinderkram
> macht vorallem keinen Sinn wenn Debugger und Anwendung unterschiedliche Versionen haben?



Nuja, da kann mer nix machen. ;-)


----------

