JSP -> Reihenfolge Ausgabe HTML vs. Java-Code
Hallo, ich habe schon einige Programme mit Java geschrieben. Leider sind mir JSPs noch fremd und ich verstehe einiges nicht. Mein erstes Problem ist: 1.) Warum wird dies in der Reihenfolge 2.) 4.) 1.) 3.) ausgegeben??? Der Quellcode: <html> <%@page import="java.io.*"%> <%@page import="java.util.*"%> <head> <title>Der Titel</title> </head> <body> 1.)<br/> <% PrintWriter pw = response.getWriter(); pw.println("2.)<br/>"); pw.flush(); %> 3.)<br/> <% pw.println("4.)<br/>"); pw.flush(); %> </body> </html> Um genau zu sein, es wird zuerst der Output aus dem Java-Code ausgegeben und dann der Rest (auch bei den HTML-Anweisungen). Kann mir jemand meinen Fehler erklären/zeigen? tia Oli
On 12/12/05, Tim Oliver Wagner
1.) Warum wird dies in der Reihenfolge
2.) 4.) 1.) 3.)
ausgegeben??? Der Quellcode:
<html> <%@page import="java.io.*"%> <%@page import="java.util.*"%> <head> <title>Der Titel</title> </head> <body> 1.)<br/>
<% PrintWriter pw = response.getWriter(); pw.println("2.)<br/>"); pw.flush(); %>
3.)<br/>
<% pw.println("4.)<br/>"); pw.flush(); %> </body> </html>
Um genau zu sein, es wird zuerst der Output aus dem Java-Code ausgegeben und dann der Rest (auch bei den HTML-Anweisungen).
Ich würde sagen, das Problem heißt "Multithreading". Die direkte HTML-Ausgabe läuft in einem anderen Thread als der eingebettete Java-Code. -- "Microwave oven? Whaddya mean, it's a microwave oven? I've been watching Channel 4 on the thing for two weeks."
Hallo,
Wenn du das korrekt sehen woltest dann kanst du dieses
versuchen:
<html>
<%@page import="java.io.*"%>
<%@page import="java.util.*"%>
<head>
<title>Der Titel</title>
</head>
<body>
1.)<br/>
<%
//PrintWriter pw = response.getWriter();
out.println("2.)<br/>");
//pw.flush();
%>
3.)<br/>
<%
out.println("4.)<br/>");
//pw.flush();
%>
</body>
</html>
Du solts nicht einen PrintWriter haben wenn du einen
jsp nuetzen wuerdest, weil es out.println() (das von
einem JspWriter kommt) shoen hat.
Wenn du Tomcat nuetzts kannst ins den work folder
siehen, dort ist den kompilierten jsp als einen java
class.
Du solst aber den PrintWriter bei einem servlet nutzen
weil es keinen Writer bei default hat und du must das
definieren.
Das problem mit denn schiffern ist das PrintWriter
erst geprinted ist, es kann auch Thread problem sein
aber ich bin nicht sehr sicher weil wenn du das page
Refresh wuerdest bekomst immer die selber numer
ordnung.
Vielen gluck.
george
--- Michael Armbrecht
On 12/12/05, Tim Oliver Wagner
wrote: 1.) Warum wird dies in der Reihenfolge
2.) 4.) 1.) 3.)
ausgegeben??? Der Quellcode:
<html> <%@page import="java.io.*"%> <%@page import="java.util.*"%> <head> <title>Der Titel</title> </head> <body> 1.)<br/>
<% PrintWriter pw = response.getWriter(); pw.println("2.)<br/>"); pw.flush(); %>
3.)<br/>
<% pw.println("4.)<br/>"); pw.flush(); %> </body> </html>
Um genau zu sein, es wird zuerst der Output aus dem Java-Code ausgegeben und dann der Rest (auch bei den HTML-Anweisungen).
Ich würde sagen, das Problem heißt "Multithreading". Die direkte HTML-Ausgabe läuft in einem anderen Thread als der eingebettete Java-Code.
-- "Microwave oven? Whaddya mean, it's a microwave oven? I've been watching Channel 4 on the thing for two weeks."
-- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-programming-unsubscribe@suse.com Um eine Liste aller verfügbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-programming-help@suse.com
__________________________________________________________ Find your next car at http://autos.yahoo.ca
Hallo, erst mal vielen Dank für alle Antworten. Die Antwort von George hat mein Problem gelöst. Am Donnerstag 15 Dezember 2005 15:22 schrieb George Stoianov:
<% out.println("4.)<br/>"); %>
Du solts nicht einen PrintWriter haben wenn du einen jsp nuetzen wuerdest, weil es out.println() (das von einem JspWriter kommt) shoen hat.
Genau das ist es! Mit out.println(""); funktioniert es prima. Vielen Dank!
Das problem mit denn schiffern ist das PrintWriter erst geprinted ist, es kann auch Thread problem sein aber ich bin nicht sehr sicher weil wenn du das page Refresh wuerdest bekomst immer die selber numer ordnung.
Denke er wird zuerst den "Code" durchgehen und daher wird es immer erst diese Ausgabe geben. Also eine sequenzielle Abarbeitung. Für ein Thread-Problem würde sprechen, wenn sich die Reihenfolge hin und wieder ändert - genau wie George gesagt hat. Noch mal vielen Dank und schöne Grüße Oli
Tim Oliver Wagner schrieb:
erst mal vielen Dank für alle Antworten. Die Antwort von George hat mein Problem gelöst.
Am Donnerstag 15 Dezember 2005 15:22 schrieb George Stoianov:
<% out.println("4.)<br/>"); %>
Du solts nicht einen PrintWriter haben wenn du einen jsp nuetzen wuerdest, weil es out.println() (das von einem JspWriter kommt) shoen hat.
Genau das ist es! Mit out.println(""); funktioniert es prima. Vielen Dank!
Das problem mit denn schiffern ist das PrintWriter erst geprinted ist, es kann auch Thread problem sein aber ich bin nicht sehr sicher weil wenn du das page Refresh wuerdest bekomst immer die selber numer ordnung.
Denke er wird zuerst den "Code" durchgehen und daher wird es immer erst diese Ausgabe geben.
Der Grund für das Verhalten ist, daß response.getWriter() und out nicht dieselben Objekte sind. out ist ein JspWriter, der auf response.getWriter() aufsetzt und (je nach Konfiguration der Engine) die Ausgabe auf response.getWriter() puffert. Wenn Du nun auf response.getWriter() schreibst, bist du sozusagen näher am Client, so dass die Ausgabe auf response.getWriter() oben auf der erzeugten Seite erscheint. Wenn die Größe der JSP-Seite den internen Puffer von out überschreitet, gilt dies nicht mehr unbedingt. [out]-->[response.getWriter()]-->...-->[Socket]-->[Browser] Gruß, Alex
participants (4)
-
Alexander Veit
-
George Stoianov
-
Michael Armbrecht
-
Tim Oliver Wagner