hartnäckige NullPointer Exception in Servlet - wieso finde.

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
. ich den (Denk-) Fehler nicht?

Hallo!

Typisches Anfängerproblem: finde den Grund einer NullPointerException nicht. Gehe ich den Code prozedural durch, so wie das Programm abläuft (also mit Auskommentieren des jeweils nächsten Abschnittes), so funktioniert der Code. Doch kaum lasse ich den Code, komplett auf einmal ausführbar, bis zu einem gewissen Punkt kommen, kommt die Exception - wie soll ich da den Fehler nur finden.

Ich geb hier mal den Code an:

einmal den Teil der Servlet Klasse bis das Problem entsteht:
Code:
res.setContentType("text/html");
PrintWriter out = res.getWriter();
	
	
	infHeaderLoop = new Information(out);
	
	int t = infHeaderLoop.servletTreeEvaluation(req);
	
	
	switch (t)
	{
		
		
		case 1: infHeaderLoop.resolutionTo();break;

       
                case 2: infHeaderLoop.toSession(req);break;
		
	}

//Annahme request ist null (aber nur wenn ich Code komplett auf einmal einblende)- wenn ich das ganze prozedural einblende und am Browser mitverfolge - funktionierts seltsamer Weise

Hier die Hilfsklasse mit den aufgerufenen Methoden

Code:
public void resolutionTo()
	{
		
		out.println("<head><script type='text/javascript'>" +
		"window.location.href = './hello?pass=n&sw=\'+screen.width+\'&sh=\'+screen.height+\'';"+
		"</script></head>");

	}
	
	public void toSession(HttpServletRequest req)
	{
		
		HttpSession hs = req.getSession();
		hs.setAttribute("sw", req.getParameter("sw"));
		hs.setAttribute("sh", req.getParameter("sh"));
		
		out.println(
		"<script type='text/javascript'>" +
		"window.location.href = './hello?pass=y';"+
		"</script></head><body>");
		
	}
	
	
	public int servletTreeEvaluation(HttpServletRequest req)
	{
		int tree=0;
		
		
		if(req.getParameter("pass") == null)
		{
			tree = 1;
		
			
		}
		
	
		if(req.getParameter("pass").equals("n")) //hier wird nullpointerexception angezeigt
		{
			tree = 2;
			
		}
		
	
		return tree;
		
	}

ich nehme an, daß das Übergeben von request die heikle Sache ist, aber ich steck irgendwie fest.

vielleicht kann jemand von hier einen kurzen Blick drauf werfen :meld:
 
G

Guest

Gast
Kein Wunder. Wenn req.getParameter("pass") == null ist, darfst du nicht req.getParameter("pass").equals(...) machen.

So ist es korrekt.
Code:
public int servletTreeEvaluation(HttpServletRequest req) 
{ 
  int tree=0; 
       
  if(req.getParameter("pass") == null) 
  { 
    tree = 1; 
  } 
  ELSE if(req.getParameter("pass").equals("n")) //hier wird nullpointerexception angezeigt 
  { 
    tree = 2; 
  } 
  return tree; 
}
 
G

Guest

Gast
... also funktionieren tuts jetzt jedenfalls. Kannst du mir noch kurz helfen meine Denkprobleme aufzulösen, weil ganz sonnenklar ist mir das nicht. der Unterschied zwischen if und else if

also bei else if ist der Unterschied, daß er gar nicht mehr den requestWert "pass" abfragt - im Gegensatz zu if wo er ihn noch abfragt und feststellt, daß die Bedingung in zweiten Fall, falls null, nicht zutrifft.

aber wieso darf man das nicht? - wenn ein bestimmter requestWert einmal ausgelesen ist, - existiert er dann nicht mehr (das könnte ich jetzt auch selbst überprüfen :shock:)? - oder liegt meine blockade wo anders?
 

bambi

Bekanntes Mitglied
Also wenn du schreibst
Code:
String somethinng = null // mal angenommen der Wert ist null

if (something.equals("whatever") { ... }

dann wirft equals() eine NullPointerException.

Deswegen nimmst Du else if ... Wenn dann naemlich der Wert null ist, dann rufst Du equals gar nicht mehr auf und bekommst auch keine Exception.
 

Bleiglanz

Gesperrter Benutzer
deshalb hier zum x.ten mal der Tipp

=> konstante ausdrücke nach links!

Code:
if(req.getParameter("pass").equals("n"))
wirft ne NPE wenn nix da ist

Code:
if("n".equals(req.getParameter("pass"))
ist false, wenn nix da ist; das ist meistens besser und bequemer
 

Bert Brenner

Bekanntes Mitglied
Alternativ kann man auch direkt mit return die Methode an geeigneter stelle verlassen. Wenns verwirren sollte guck schnell weg. :)


Code:
public int servletTreeEvaluation(HttpServletRequest req) {

  if(req.getParameter("pass") == null)
    return 1;
  
  if(req.getParameter("pass").equals("n"))
    return 2;

  return 0;

}
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben