feat(editor): F4.6d the web browser and web server on a computer's desktop

The oracle BrowserWindowRun uses Java's browser and web server windows as a
person does; the room keeps a browser window per computer and sends a
program window's view, the start names the person's language. The editor
shows the page in a sandboxed frame, links and forms go to the room, the web
server has its button, virtual hosts and lines. Better than Java: relative
images and links count from the page's folder, a mark stays in the page, the
error page from Java's template, the virtual hosts' file with complete rows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-03 16:09:05 +00:00
co-authored by Claude Opus 5.5
parent f0e7c73ec7
commit aa54e5400e
31 changed files with 2773 additions and 55 deletions
+40
View File
@@ -1292,3 +1292,43 @@ Gemessen (03.10.2026):
Darum misst `GetterDefaults` jetzt auch `#priority` der gespeicherten
Thread-Klassen (alle 5), die vorher unaufgelöst als 0 gelesen wurden.
### Webbrowser und Webserver (F4.6d)
`BrowserWindowRun` öffnet Javas `GUIApplicationWebBrowserWindow` und
`GUIApplicationWebServerWindow` auf je einem `GUIDesktopPanel` im Netz von
web-lan (Browser 192.168.0.20, Webserver .30 mit eigenen Seiten) und benutzt
sie wie eine Person: eine Adresse in die Adresszeile und Enter, ein Link
(das Ereignis, das Swings `HTMLEditorKit` daraus macht: das href gegen die
Basis des Dokuments), ein Formularknopf (der echte Knopf, den Swing für das
Formular zeichnet, mit `doClick`), am Server Startknopf, Kästchen und
Tabelle der virtuellen Hosts, dazu Stopp und Start des Systems. Nach jedem
Schritt schreibt es Adresszeile, Titel, die Seiten, die das Programm dem
Fenster gab, und die Anfragen des Servers, am Server Knopf, Kästchen,
Tabelle, Datei und Zeilen (`packages/sim/test/browserWindow.java.json`).
Gemessen (03.10.2026):
* Am Anfang zeigt die Adresszeile „http://“, der Titel den Programmnamen,
die Seite Javas Logo. Jeder Abruf schreibt „http://“ + Host + Pfad ohne
Query in Zeile und Titel; kam die Seite, wird ihr Titel der Titel des
Fensters — als HTML („Links &amp;amp; mehr“). Keine Adresse: die Zeile
zurück auf „http://“, der Titel bleibt, nichts lädt.
* Ein Query geht nie hinaus (`HTTPNachricht.getPfad` schneidet ihn ab):
weder getippt noch aus einem Link noch aus einem GET-Formular. Ein
POST-Formular schickt seine Felder in Reihenfolge samt gedrücktem Knopf,
form-codiert (`name=Fil+ius&c=1&s=y&t=%C3%BC%26%3D&ok=Gut`).
* Relative Links und Bilder zählen vom Wurzelordner des Servers: die Basis
des Dokuments ist der Bildzwischenspeicher, nicht die Seite (ein Bild in
`/ordner/drei.html` holt `bild.png` aus der Wurzel). Ein `#anker` lädt die
Startseite des Hosts.
* Bei einem Status außer 200 zeigt Java immer `sw_webbrowser_msg2`
(„Fehler“): `einlesenTextdatei` löst den schon aufgelösten Pfad der
Vorlage `tmpl/http_fehler_*` ein zweites Mal auf und findet sie nie. Ohne
Server: `sw_webbrowser_msg1`. Text und Bilder zeigt das Fenster als HTML.
* Der Webserver: „Starten“/„Anhalten“, das Kästchen schaltet die Tabelle
ein (ohne Datei). Jede geänderte Zelle schreibt `/www.conf/vhosts` mit
allen fünf Zeilen, leere als Leerzeilen; neu gelesen überspringt
`StringTokenizer` die Leerzeilen, und die Zelle einer unvollständigen
Zeile rückt in die davor. Liegt die Datei da, ist das Kästchen nach dem
nächsten Start wieder an, auch abgeschaltet.