CGI-anfaenger: CGI mit JAVA

Hi,
ich wollte ein simples CGI-Script in JAVA schreiben.
Benutze Apache auf WinXP(nur ein Test).
Da man auf die Environment-Variablen in JAVA nicht zugreifen kann musste ich den Kommandozeileninterpreter von XP verwenden und D Option für JAVA, der eine batch-Datei ausführen soll.
Wenn ich die batch-Datei (mit pause am Ende) ausführe läuft alles wie ich es will, wenn ich im IE die Adresse eintrage, fehlt der Inhalt der class-Datei. Kann mir jemand sagen wieso?

Alle Dateien befinden sich im cgi-bin-Verzeichnis

--------------------
hallo.cgi
--------------------
#!cmd /c hallo.bat

--------------------
hallo.bat
--------------------
@echo off
echo Content-type: text/html
echo+
java -Dquery_string=%QUERY_STRING% hallo

--------------------
hallo.java
--------------------
public class hallo
{
 public static void main(String[] args)
 {
  String qstr=System.getProperty("query_string");
  System.out.println(
  "<html>\n"+
  "<head><title>CGI Results</title></head>\n"+
  "<body>\n"+
  "<h1>Hello, world.</h1>");
  System.out.println("<br>"+qstr);
  System.out.println("</body>\n"+"</html>");
 }
}
--------------------
(nicht vergessen hallo.class zu erzeugen, falls ihr es testen wollt)

  1. Hi,

    warum verwendest Du nicht einfach Servlets?

    Viele Grüße,
    Martin Jung

  2. Hallo CGI-anfaenger,

    Mit Java kann man sehr wohl auf Umgebungsvariablen zugreifen und zwar mit: System.getenv(String)
    In der Java 1.4 API Spezifikation steht zwar noch, dass die Methode deprecated ist und man getProperty(String name) verwenden soll, aber mit Java 1.5 ist man wohl zu der Einsicht gelangt, dass Properties zwar besser, da Plattformunabhängig, sind aber Umgebungsvariablen oft trozdem benötigt werden. Die Schnittstelle wurde da sogar noch um eine Methode Map<String,String> getenv() erweitert.

    Es ist allerdings keine gute Idee, Java für CGI Programme zu verwenden, da so bei jedem Zugriff eine neue VM gestartet wird. Bei Java 1.5 soll das zwar auch nicht mehr der Fall sein, aber erstens wird es noch etwas dauern, bis diese Version aus dem Betastadium heraus ist und zweitens dürften Servlets eindeutig die besser Wahl sein, wenn Du Webanwendungen mit Java schreiben willst.
    Siehe zum Thema Servlets auch http://jakarta.apache.org (Tomcat)

    Grüße

    Daniel

    1. Danke für den Tipp.
      Ich werde jetzt wohl Servlets verwenden.