Wiedermal premature end of script header
tom
- webserver
Hi!
Ich versuche gerade krampfhaft den Apache mit java zum Laufen zu bringen (sprich Java-Programme als cgi's, keine Servlets) aber
irgendwie scheine ich ziemlich grob daran zu scheitern.
Java-Code
public class MyClass1 {
public MyClass1() {
}
public static void main(String[] args) {
MyClass1 myClass1 = new MyClass1();
try {
System.out.println("Content-type: text/html\n\n");
System.out.println("<html>\n");
System.out.println("TEST");
System.out.println("</html>");
} catch (Exception e) {
System.out.println("UPS");
}
}
}
Also Content-type ist als erstes, Permissions sind auch auf 0755 gesetzt und beim lokalen aufruf von java MyClass1 klappt auch alles.
Nur wenn ichs ueber Browser aufruf sprich http://www.my.server:8080/test/cgi-bin/ dann birnt es ihn jedesmal. Perl oder Shellscripts laufen aber ...
wo kann der Fehler liegen?
lg, tom
Nur wenn ichs ueber Browser aufruf sprich http://www.my.server:8080/test/cgi-bin/ dann birnt es ihn jedesmal. Perl oder Shellscripts laufen aber ...
wo kann der Fehler liegen?
"Premature end of ..." kann alles Mögliche bedeuten - im Wesentlichen schließe ich daraus, daß *nicht* Dein "Content-type" ausgegeben wird, sondern irgend eine Fehlermeldung von irgendwem.
Und die möchte ich gerne sehen, also:
"Premature end of ..." kann alles Mögliche bedeuten - im Wesentlichen schließe ich daraus, daß *nicht* Dein "Content-type" ausgegeben wird, sondern irgend eine Fehlermeldung von irgendwem.
Und die möchte ich gerne sehen, also:
- Ist das Dein lokaler Webserver?
- Was steht im Error-Log?
- Hast Du eine separate Logdatei für CGI-Fehler?
grundsaetzlich vermute ich das auch, allerdings glaube ich eher das die Konfiguration nicht wirklich hinhaut (also nicht ein script-fehler). Ich vermute eher, dass der Apache nicht wirklich das class-file mit dem java-interpreter aufruft.
(Apache 1.3.6, AIX 4.3.3, JDK 1.2.2.0)
Script-output:
------ >8 Snipp ------
Content-type: text/html
<html>
TEST
</html>
------ >8 Snipp ------
Errorlog:
------ >8 Snipp ------
[Thu Mar 16 16:13:22 2000] [error] (8)Exec format error: exec of /www/cgi-bin/MyClass.class failed
[Thu Mar 16 16:13:22 2000] [error] [client 192.168.1.186] Premature end of script headers: /www/cgi-bin/MyClass.class
------ >8 Snipp ------
[Thu Mar 16 16:13:22 2000] [error] (8)Exec format error: exec of /www/cgi-bin/MyClass.class failed
Na, das hilft doch schon mal.
Der Webserver hat also versucht, "MyClass.class" vom Betriebssystem als Programm (Binärcode!) ausführen zu lassen.
Offensichtlich befindet sich darin aber kein Maschinenprogramm, sondern irgendwas Anderes (ein JavaQuelltext?).
Ich weiß nicht, wie Java via CGI funktioniert, aber offensichtlich hätte der Webserver den Aufruf eines Java-Interpreters oder so was gebraucht.
Ob man den nun in Deinen Source hineinschreiben muß (z. B. in Zeile 1) oder irgendwo anders konfigurieren (beispielsweise eine Abbildung zwischeh *.class und einem Handler in der Webserver-Konfiguration) - RTFM ...
Ich weiß nicht, wie Java via CGI funktioniert, aber offensichtlich hätte der Webserver den Aufruf eines Java-Interpreters oder so was gebraucht.
Ob man den nun in Deinen Source hineinschreiben muß (z. B. in Zeile 1) oder irgendwo anders konfigurieren (beispielsweise eine Abbildung zwischeh *.class und einem Handler in der Webserver-Konfiguration) - RTFM ...
Jep hab ich gemacht, aber irgendwie werd ich nicht schlau daraus. Ich habs sowohl ueber AddHandler und AddType als auch ueber Action versucht, aber es will nciht funken. Wenn ich mir allerdings einen primitiv wrapper in perl bastle (exec("java MyClass")) dann bekomme ich den output retour. Somit ist meine Frage mit welcher option kann ich dem Apache beibringen, bei einem bestimmten Handler einen bestimmten Interpreter aufzurufen?
Hi Tom
Wenn ich mir allerdings einen primitiv wrapper in perl bastle (exec("java MyClass")) dann bekomme ich
den output retour.
Na so'ne Ueberraschung auch. Dir ist der Unterschied hoffentlich klar. Beim ersten mal wolltest Du einfach
MyClass.class
ausfuehren, hier jetzt jedoch
java MyClass
. Letzteres ist natuerlich iO, aber ersteres setzt vorraus, dass es entweder eine gueltige Binaerdatei ist
(was sie aber nicht ist, vielmehr handelt es sich um Java-Byte-Code), oder es ist eine Textdatei, deren
erste Zeile den Interpreteraufruf enthaelt, z.B. #!/path/to/your/java. Das kannst Du aber auch nicht machen,
denn dann ist es ja keine gueltige Class-Datei mehr. Der Umweg ueber einen Wrapper wird Dir also nicht
erspart bleiben. Dann nimm aber lieber /bin/sh statt perl, denn die Shell ist um ein vielfaches schneller
geladen.
Somit ist meine Frage mit welcher option kann ich dem Apache beibringen, bei
einem bestimmten Handler einen bestimmten Interpreter aufzurufen?
Die erste Zeile der Textdatei. Aber geht ja hier leider nicht.
So long, Calocybe