# Servlet Response HTTP-Status 200 wird nicht übertragen



## zappey (13. Jan 2009)

Hallo zusammen,

ich habe ein Servlet das via GET einige Parameter entgegennimmt diese dann verabeitet und im Erfolgsfall einen String zurück an den Client übergeben soll.

Mein Problem ist allerdings, dass dabei der HTTP-Header komplett unterschlagen wir, sprich er wird nicht an den Client übertragen. Dieser bräuchte jedoch die Status-Info aus dem Header, um seinerseits auf den Response reagieren zu können. Bei anderen Servlets im gleichen Projekt funktioniert alles bestens... Status 200 wird im Erfolgsfall übertragen, ansonsten Status 400. Ich weiß langsam echt nicht mehr weiter. Vielleicht hat einer von Euch ja ne Idee.

Das ganze sieht etwas heruntergebrochen folgendermaßen aus:


```
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   ....
   ....
   ....
   response.setContentType("text/xml");
   response.setCharacterEncoding("utf-8");
   PrintWriter out = response.getWriter();

   ...
   ...
   ...

   processProblem.setDescription(problem);
   int parseReturn = processProblem.parseProblem();
	        
    if(parseReturn == 1)
    {
	     response.setStatus(200);
	     String durResponse = processProblem.generateDUR(user, pwd);

	      int startMessage = durResponse.indexOf("<?xml");
	      int endMessage = durResponse.indexOf("</textarea>");
	      durResponse = durResponse.substring(startMessage, endMessage);
	    		
	       out.println(durResponse);
     }
     else
     {
	       response.setStatus(400);
	       String durResponse = processProblem.generateDUR(user, pwd);
	        	
	        int startMessage = durResponse.indexOf("<?xml");
	    	int endMessage = durResponse.indexOf("</textarea>");
	    	durResponse = durResponse.substring(startMessage, endMessage);
	    		
	    	out.println(durResponse);
	}  
}
```

Ach so... nochwas... ist parseReturn!=1 funktioniert alles bestens und Status 400 wird an den Client zurückgegeben.

Für jegliche Hilfe im Voraus schon mal Danke...

Grüße,

Zapp


----------



## HLX (14. Jan 2009)

Den Erfolgsfall der HTTP-Übertragung im Servlet zu setzen, ist nicht sinnvoll, da du zu diesem Zeitpunkt noch nicht wissen kannst, ob die Übertragung erfolgreich sein wird.

Du solltest die Information besser in einem Request-Attribut ablegen.


----------



## Guest (14. Jan 2009)

So wirklich weiter bringt mich das jetzt aber auch nicht.

Die eigentliche Frage war ja warum der HTTP-Header im Erfolgsfall nicht mitgesendet wird bzw. nicht beim Client ankommt und nicht ob es sinnvoll ist die HTTP-Übertragung im Servlet zu setzen.

Trotzdem vielen Dank für Deine Antwort... 

Grüße,

Zapp


----------



## HLX (14. Jan 2009)

Der Header wird IMMER mitgesendet. Kein Header --> keine HTTP-Nachricht --> keine Anzeige.

Warum du keinen Zugriff auf den Header hast, kann ich aus deinen obigen Angaben nicht ersehen. Dazu müsstest du eine Fehlermeldung oder ein Verhalten des Browsers angeben.

Fakt ist allerdings, dass zwischen dem Setzen des Codes deinerseits und der eigentlichen Übertragung der HTTP-Nachricht noch einiges geschieht. Der ServletContainer verarbeitet deine Angaben im Servlet, und erzeugt eine HTML-Seite. Dann wird die Nachricht übertragen und erst im Anschluss daran steht der endgültige HTTP-Nachrichtencode (200,400,...) fest. 

Im Übrigen: sofern die Übertragung erfolgreich ist, und du den HTTP-Code nicht setzt, ist er automatisch 2xx.

Solltest du auf deiner JSP-Seite eine Fallunterscheidung benötigen, setzt du im Servlet besser ein Request-Attribut, z.B.:

```
request.setAttribute("returnParsed", Boolean.TRUE);
```
Dieses kannst du dann in der JSP-Seite mit

```
Boolean parsed = (Boolean)request.getAttribute("returnParsed");
```
abfragen.


----------

