Es ist nicht Teil Aufgabe der ersten Projektarbeit sich mit den technischen Fragen zu einer geeigneten Entwicklungs- und Testumgebung zu beschäftigen. Wir haben daher einen Web-Server installiert, den ihr zum Entwicklen und Testen euer CGI-Programme benutzt könnt (und auch solltet!). Hier gibt's ein paar Hinweise zur Benutzung und wahrscheinlich häufig auftretenden Problemen. Bei Fragen bitte an Eric Knauel wenden.
Auf welchen Rechnern kann ich den Web-Server starten?
Der Web-Server läuft nur auf Maschinen, auf denen FreeBSD
4.6 installiert ist. Davon gibt es am WSI aber eine ganze
Menge. Als erstes sollte man sich per SSH auf einer dieser
Maschinen einloggen. Hier eine Namen von FreeBSD-Rechnern:
kim, bruce, pamela, bla bla
Wie starte ich den Web-Server?
Der startet Web-Servers mit folgendem Befehl:
/afs/wsi/pu/pfi-2002/i386_fbsd46/bin/start-pfi-apache.scmDas Start-Skript gibt dann Informationen darüber aus, wie der Web-Server zu erreichen ist:
Der Server ist unter http://dizzy.informatik.uni-tuebingen.de:8000/ zu erreichen CGI-Programme liegen unterhalb der URL http://dizzy.informatik.uni-tuebingen.de:8000/cgi-bin/ Das Verzeichnis für CGI-Programe: /home/knauel/pfi-apache/cgi-bin Das Verzeichnis für HTML-Dokumente: /home/knauel/pfi-apache/htdocs Das Verzeichnis für Log-Dateien: /home/knauel/pfi-apache/logs Web-Server wird gestartet. Ctrl-C für Abbruch.Dieses Start-Skript legt beim ersten Start in deinem Home-Verzeichnis einige Verzeichnisse an, die zum Betrieb des Web-Servers notwendig sind.
Der Server läuft nun. Wie kann ich etwas sinnvolles
damit tun?
Es gibt zwei sinnvolle Sachen, die man mit diesem Server
machen kann: HTML-Dokumente für die Clients dort ablegen und
CGI-Programme ablaufen lassen. HTML-Dokumente müssen in
einem bestimmten Verzeichnis gespeichert sein, damit der
Server diese finden kann. Dieses Verzeichnis befindet sich
in deinem Home-Verzeichnis pfi-apache/htdocs. Dort
liegt bereits eine Datei index.html, die nur zu
Testzwecken dient (kann also gelöscht werden).
CGI-Programme müssen im Verzeichnis
pfi-apache/cgi-bin liegen und die Attribute müssen
auf ausführbar gesetzt sein.
Mein CGI-Programm funktioniert nicht!
Ein CGI-Programm müssen als ausführbar markiert sein,
sonst wird es vom Web-Server nicht ausgeführt. Eine
Datei kann mit chmod +x mein-erstes-cgi als
ausführbar markiert werden.
Kann ich CGI-Programme in Java schreiben?
Es ist mit einem Trick möglich Java-Programme als
CGI-Programme auszuführen. Auf die
Environment-Variablen hat man jedoch nur Zugriff, wenn man
diese explizit beim Start des Interpreters angibt. Dies
erledigt das unten stehende Start-Skript für euch. Auf die
Environment-Variablen kann man dann mit
java.lang.System.getProperty("QUERY_STRING", null)
zugreifen (lest euch unbedingt die API-Doku
durch!). Hier das Start-Skript für Java-Klassen:
#!/bin/sh
IFS=" "
exec /afs/wsi/i386_fbsd43/bin/scsh -s "$0" "$@"
!#
; hier die Klasse mit main eintragen! (ohne das .class)
(define class-name "TestCGI")
(define java-bin
"/afs/informatik.uni-tuebingen.de/i386_fbsd43/bin/java")
(define (compose-java-arg-list)
(fold-right
(lambda (pair s)
(cons (string-append "-D" (car pair) "=" (cdr pair)) s))
'() (env->alist)))
(run (,java-bin ,@(compose-java-arg-list) ,class-name))
Zum Downloadcd ~/pfi-apache/cgi-bin cp /afs/wsi/pu/www/htdocs/pfi-0203/pryan-air/JavaCGI.scm . chmod +x JavaCGI.scmIn diesem Skript muß der Name der Java-Klasse, die gestartet werden soll eingetragen werden (die Zeile mit define class-name...). Für weitere Java-CGI-Programme kann JavaCGI.scm einfach kopiert werden.
Kann meine CGI-Skripte von zu Hause testen?
Die Firewall des WSI verhindert, dass der Port 8000, an dem
der Web-Server lauscht von außen erreichbar ist. Über einen
SSH-Tunnel kann man jedoch auf den Port
zugreifen. Angenommen der Web-Server läuft auf
kim.informatik.uni-tuebingen.de, Port 8000. Mit dem
Befehl
ssh -L 8000:kim.informatik.uni-tuebingen.de:8000 kim.informatik.uni-tuebingen.dewird der Port 8000 des lokalen Rechners durch einen SSH-Tunnel mit dem Port 8000 von kim.informatik.uni-tuebingen.de verbunden. Öffnet man mit dem Browser http://localhost:8000, so ist man mit dem Web-Server auf kim verbunden. Für Windows-Systeme empfiehlt sich der SSH-Client PuTTY, der ebenfalls SSH-Tunnel unterstützt.
Irgendwas geht nicht!
Zuerst sollte man rausfinden, was eigentlich schief gelaufen
ist: Genauere Informationen enthalten die Log-Dateien des
Web-Servers. Diese Dateien finden sich im Verzeichnis
pfi-apache/logs. Es empfiehlt sich den Web-Server
zu beenden, bevor man in die Log-Dateien schaut: unter
Umständen ist erst dann der aktuellste Eintrag zu sehen.
Ich werde aus dem Log-Datei nicht schlau!
Wende ich an Eric
Knauel.
In der Log-Datei steht immer nur "premature end of
script headers" -- was soll das heissen?
Das CGI-Programm hat keine, oder eine unverständliche
Ausgabe gemacht, die der Web-Server nicht verstehen kann. In
diesem Fall solltest du das CGI-Programm mal außerhalb des
Web-Servers testen und den Aufruf durch den Web-Server
simulieren. D.h. Die benötigten Environment-Variablen mit
setenv von Hand setzen.