Einfache Frage zu HTML-Seite (mit iframe) und Servlet
Ernst
- java
Hallo allerseits,
Folgendes einfache Programm funktioniert einwandfrei (es wird laufend eine Website aktualisiert, man merkt im Browser, dass laufend "Traffic" ist), doch verstehe ich nicht warum.
a)
Von einem Webbrowser aus rufe ich über die Eingabe (habe Tomcat auf dem gleichen Rechner laufen):
http://localhost:8080/aktualisieren1/basic.html
die Datei basic.html auf, die folgendem Inhalt hat:
----------------------------------------------------------
<html>
<head>
<body>
Dies ist ein Fenster, in dem etwas gezeigt wird <p>
<iframe src="/aktualisieren1/ServletAktual1" name="chatbox">
</iframe>
</body>
</head>
</html>
----------------------------------------------------------
b)
Das Servlet ServletAktual1 hat folgenden Inhalt:
----------------------------------------------------------
package packaktual;
import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ServletAktual1 extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>ServletAktual1</title>");
out.println("<meta http-equiv="refresh" content="0; URL=">");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet MyServlet at " + request.getContextPath () + "</h1>");
out.println("</body>");
out.println("</html>");
out.close();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
public String getServletInfo() {
return "Short description";
}
}
----------------------------------------------------------
mfg
Ernst
Hi,
Also wird auch u.a. durch
out.println("<meta http-equiv="refresh" content="0; URL=">");
die Zeile
<meta http-equiv=refresh content=0; URL=>
in iframe reinkopiert.
Nein. Die Zeile wird anders aussehen. Die " verschwinden nicht einfach.
Diese wird durch den Browser ausgeführt, was wiederum bedeutet, dass die durch URL=
angegebene Website, d.h. deren HTML-Text ausgeführt wird.
Da aber nach URL= nichts kommt, gehe ich davon aus, dass dies bedeutet, dass der HTML-Text der aktuellen Website ausgeführt werden soll.
Aber was ist die aktuelle Website??
Jedes HTML-Dokument ist unabhängig vom anderen. Daran ändert sich auch nichts, wenn ein Dokument in einem iframe eingesperrt wird.
Ob eine leere URL erlaubt ist, weiß ich nicht.
Wenn eine leere URL hier erlaubt ist und als aktuelles Dokument interpretiert, ist es das Dokument, das das meta-Element enthält, also das, welches vom Servlet erzeugt wurde.
http (siehe http-equiv) kennt keine Frames ...
cu,
Andreas
Also wird auch u.a. durch
out.println("<meta http-equiv="refresh" content="0; URL=">");
die Zeile
<meta http-equiv=refresh content=0; URL=>
in iframe reinkopiert.Nein. Die Zeile wird anders aussehen. Die " verschwinden nicht einfach.
Stimmt, ich habe ein paar " vergessen.
Diese wird durch den Browser ausgeführt, was wiederum bedeutet, dass die durch URL=
angegebene Website, d.h. deren HTML-Text ausgeführt wird.
Da aber nach URL= nichts kommt, gehe ich davon aus, dass dies bedeutet, dass der HTML-Text der aktuellen Website ausgeführt werden soll.
Aber was ist die aktuelle Website??Jedes HTML-Dokument ist unabhängig vom anderen. Daran ändert sich auch nichts, wenn ein Dokument in einem iframe eingesperrt wird.
»»
Das Servlet veruracht, dass folgender HTML-Text an den Browser gesendet wird:
<html>
<head>
<title>ServletAktual1</title>
<meta http-equiv="refresh" content="0; URL=">
</head>
<body>
<h1>Servlet MyServlet at " und der Pfad: request.getContextPath ()
</h1>
</body>
</html>
Dieser Text wird vom Browser interpretert und die Interpretation im _iframe_ ausgegeben.
UML= verursacht, dass dieser Text (Selbstbezüglichkeit) immer wieder in das iframe geschrieben wird.
Ob eine leere URL erlaubt ist, weiß ich nicht.
Wenn eine leere URL hier erlaubt ist und als aktuelles Dokument interpretiert, ist es das Dokument, das das meta-Element enthält, also das, welches vom Servlet erzeugt wurde.
Ja, das meine ich bei 2)
http (siehe http-equiv) kennt keine Frames ...
Was meinst du damit?
Das verstehe ich nicht.
mfg
Ernst
Hi,
Da aber nach URL= nichts kommt, gehe ich davon aus, dass dies bedeutet, dass der HTML-Text der aktuellen Website ausgeführt werden soll.
HTML wird nicht "ausgefuehrt".
Aber was ist die aktuelle Website??
Die aktuelle *Ressource*.
Ist es die Seite basic.html, oder nur das iframe davon
Du hast ein Dokument geladen, und dieses enthaelt die Anweisung an den HTML darstellenden Client, nach angegebener Zeit die Adresse "" anzufordern.
Das macht er ebenso, wie wenn du bspw. als action-Attribut eines Formulars auch nur eine "leere" Adresse angibst - er interpretiert es als Verweis auf die aktuelle Ressource.
Ob diese Ressource dabei in einem Iframe dargestell wird oder nicht, ist volkommen unerheblich.
(aber welche IP-Adresse hat iframe)?
Wieso soll ein Iframe eine IP-Adresse haben?
MfG ChrisB
Da aber nach URL= nichts kommt, gehe ich davon aus, dass dies bedeutet, dass der HTML-Text der aktuellen Website ausgeführt werden soll.
HTML wird nicht "ausgefuehrt".
was dann?
interpretiert, d.h. die durch HTML beschriebene Seite auf dem Bildschirm ausgegeben?
Aber was ist die aktuelle Website??
Die aktuelle *Ressource*.
was kann eine *Ressource* alles sein?
Welche verschiedenen *Ressourcen* gibt es ?
mfg
Ernst
Hi,
was kann eine *Ressource* alles sein?
Alles, was du ueber HTTP abrufst, ist eine Ressource.
Welche verschiedenen *Ressourcen* gibt es ?
Alle Moeglichen.
MfG ChrisB
Du hast ein Dokument geladen, und dieses enthaelt die Anweisung an den HTML darstellenden Client, nach angegebener Zeit die Adresse "" anzufordern.
Das macht er ebenso, wie wenn du bspw. als action-Attribut eines Formulars auch nur eine "leere" Adresse angibst - er interpretiert es als Verweis auf die aktuelle Ressource.
Was ist dann ganz konkret die _aktuelle Ressource_ ?
Was wird vom Server konkret angefordert?
Das Servlet oder was?
Kannst du mit diese Anforderung nennen?
mfg
Ernst
Hi,
Was ist dann ganz konkret die _aktuelle Ressource_ ?
Die Adresse des angezeigten Dokumentes (im Falle von HTML-Dokumenten).
Was wird vom Server konkret angefordert?
Der Client fordert an, der Server liefert aus.
Das Servlet oder was?
Der Client fordert eine Ressource an.
Der Server schaut sich diese Anforderung an, ob er unter dieser Adresse irgendwelche Daten zum ausliefern hat, und wenn ja, liefert er sie an den Client aus.
Kannst du mit diese Anforderung nennen?
Nein. Ich verstehe immer noch nicht, worauf du eigentlich hinaus willst.
Mir scheint, du machst einen eigentlich recht simplen Sachverhalt unnoetig kompliziert.
MfG ChrisB
Kannst du mit diese Anforderung nennen?
Nein. Ich verstehe immer noch nicht, worauf du eigentlich hinaus willst.
Mir scheint, du machst einen eigentlich recht simplen Sachverhalt unnoetig kompliziert.
Die aktuelle Anforderung bei URL= ist:
ServletAktual1
Ich habe mir das so vorgestellt:
http://localhost:8080/aktualisieren1/basic.html
wird vom Anwender in den Browser in die Eingabezeile eingegeben
Dies veranlasst beim Server einen Request, der die Zusendung des
HTML-Texts von basic.html an den Client bewirkt, der diesen dann als
Bildschirmseite dargestellt.
Zusätzlich verlangt der HTML-Text noch, dass beim Server der Request
ServletAktual1 erzeugt wird.
Dieser Request veranlasst beim Server die Zusendung des HTML-Texts,
der beim Ablauf des ServletAktual1-Programms erzeugt wird.
Der Browser stellt die zum HTML-Text zugehörige Bildschirmseite in dem
iframe dar.
Zusätzlich verlangt die in diesem HTML-Text sich befindliche Zeile:
<meta http-equiv="refresh" content="0; URL=">
beim Server nach 0 Sekunden einen Request der aktuellen Ressource
(=ServletAktual1).
Dieser Request veranlasst beim Server die Zusendung des HTML-Texts,
der beim Ablauf des ServletAktual1-Programms erzeugt wird.
Der Browser stellt die zum HTML-Text zugehörige Bildschirmseite in dem
iframe dar.
Weiter mit 4)
--> Endlosschleife
Ist diese Beschreibung richtig?
mfg
Ernst
Hi,
http://localhost:8080/aktualisieren1/basic.html
wird vom Anwender in den Browser in die Eingabezeile eingegeben
- Dies veranlasst beim Server einen Request, der die Zusendung des
HTML-Texts von basic.html an den Client bewirkt, der diesen dann als
Bildschirmseite dargestellt.
Der Client stelle den Request an den Server, ja.
Und dieser Antwortet mit einer Response, vom Typ text/html.
Zusätzlich verlangt der HTML-Text noch, dass beim Server der Request
ServletAktual1 erzeugt wird.
Da im HTML-Code ein Iframe enthalten ist, stellt der Client einen weiteren Request mit der dort angegebenen Adresse, ja.
Weiter wie oben.
Ist diese Beschreibung richtig?
Von den komischen Formulierungen wie "dies veranlasst beim Server einen Request" abgesehen, ja.
MfG ChrisB
Da im HTML-Code ein Iframe enthalten ist, stellt der Client einen weiteren Request mit der dort angegebenen Adresse, ja.
Weiter wie oben.Ist diese Beschreibung richtig?
Von den komischen Formulierungen wie "dies veranlasst beim Server einen Request" abgesehen, ja.
ok.
Nochmals zum Verständnis:
out.println("<meta http-equiv="refresh" content="0; URL=/aktualisieren1/ServletAktual1">");
und
out.println("<meta http-equiv="refresh" content="0; URL=">");
machen in diesem Zusammenhang genaus dasselbe, weil ja URL= sich auf die _aktuelle_ Ressource bezieht und ServletAktual1 die aktuelle Ressource ist.
Um den Traffic zwischen Client und Server zu beobachten, habe ich
in server.xml folgende Zeile aufgenommen:
<Valve className="org.apache.catalina.valves.RequestDumperValve" />
Fall:
Ich habe im ServletAktual1 folgende Zeile:
out.println("<meta http-equiv="refresh" content="0; URL=/aktualisieren1/ServletAktual1">");
Dann bekomme ich in einem log-File u.a. _permanent_ die Ausgabe:
INFO: REQUEST URI =/aktualisieren1/ServletAktual1
Das ist auch klar, weil das Servlet permanent aufgerufen wird.
Fall:
Ich habe im ServletAktual1 folgende Zeile:
out.println("<meta http-equiv="refresh" content="0; URL=">");
Dann bekomme ich in einem log-File u.a. _permanent_ die Ausgabe:
INFO: REQUEST URI =/aktualisieren1/ServletAktual1
INFO: REQUEST URI =/aktualisieren1/basic.html
Es werden also _permamnent_ zwei URL vom Server verlangt.
Warum wird aber basic.html _permanent_ aufgerufen?
Das ist mir nicht klar!
mfg
Ernst