CGI-Programm mit Tomcat starten
CGI-Programm mit Tomcat starten
Hallo,
ich hätte da ein Interessantes Problem. Und zwar möchte ich ein CGI-Programm ( geschrieben in C ) von einem Servlet aus starten. Das heist, sobald eine Anfrage an den Tomcat kommt ruft dieser dieses Programm auf und übergibt dabei einen CGI-Variable.
Nur ist jetzt die Frage, mit welcher Klasse kann ich das Verwirklichen. Bisher habe ich nur Klassen gefunden, die es ermöglichen CGI-Aufrufe entgegen zu nehmen.
Gruss Christian
ich hätte da ein Interessantes Problem. Und zwar möchte ich ein CGI-Programm ( geschrieben in C ) von einem Servlet aus starten. Das heist, sobald eine Anfrage an den Tomcat kommt ruft dieser dieses Programm auf und übergibt dabei einen CGI-Variable.
Nur ist jetzt die Frage, mit welcher Klasse kann ich das Verwirklichen. Bisher habe ich nur Klassen gefunden, die es ermöglichen CGI-Aufrufe entgegen zu nehmen.
Gruss Christian
Re: CGI-Programm mit Tomcat starten
Bin mir nicht sicher ob das geht und ob ich Dich richtig verstanden habe.Columbus hat geschrieben:Hallo,
ich hätte da ein Interessantes Problem. Und zwar möchte ich ein CGI-Programm ( geschrieben in C ) von einem Servlet aus starten. Das heist, sobald eine Anfrage an den Tomcat kommt ruft dieser dieses Programm auf und übergibt dabei einen CGI-Variable.
Mir fallen zwei Möglichkeiten ein:
1. Du machst im Servlet ein httpurlconnection auf und rufst das cgi auf (per post).
2. Du führst das cgi wie ein normales externes Programm aus und übergibst ihm
die Parameter als normale Eingabeparameter.
Nur so ausgedacht, nix getestet
gruss
eC
Geht ersters auch ohne einen Webserver, Webgateway oder Ähnliches dazwischen? Also das C-Programm, soll auf dem gleichen Host laufen wie der Tomcat-Server, also lokal!
Auf jeden Fall hat das C-Programm ( welches eben auf dem gleichen Host läuft wie der Tomcat-Server ) ein CGI-Interface, um CGI-Werte beim Start entgegen zu nehmen!
Gruss Christian
Auf jeden Fall hat das C-Programm ( welches eben auf dem gleichen Host läuft wie der Tomcat-Server ) ein CGI-Interface, um CGI-Werte beim Start entgegen zu nehmen!
Gruss Christian
Ja aber wenn das CGI lokal läuft, dann läuft es doch trotzdem in einemColumbus hat geschrieben:Geht ersters auch ohne einen Webserver, Webgateway oder Ähnliches dazwischen? Also das C-Programm, soll auf dem gleichen Host laufen wie der Tomcat-Server, also lokal!
Webserver oder was meinst Du mit ohne Webserver?
Lokal kannst Du den doch auch ansprechen.
gruss
eC
- emge
- Beiträge: 1525
- Registriert: 20.10.2003 22:05:46
- Lizenz eigener Beiträge: Artistic Lizenz
- Wohnort: 50° 45' 0" N 12° 10' 0" E
Die beiden M öglichkeiten wurden schon angesprochen. Welche ich an deiner Stelle wählen würde, hängt auch davon ab, was denn das C-Programm nun genau macht.
Gibt es HTML-Code zurück, der wieder zum Client gehen soll oder gibt es "nur ein paar" Werte zurück in Abhängigkeit derer das Servlet dann die Response zusammenbaut? Läuft das C-Programm schon als CGI auf dem Webserver oder müsstest du das noch einrichten?
Viele Grüße, Marco
Gibt es HTML-Code zurück, der wieder zum Client gehen soll oder gibt es "nur ein paar" Werte zurück in Abhängigkeit derer das Servlet dann die Response zusammenbaut? Läuft das C-Programm schon als CGI auf dem Webserver oder müsstest du das noch einrichten?
Viele Grüße, Marco
Also das sieht folgendermaßen aus:
Ein Client fordert einen Schlüssel an, und gibt dazu ein HTTP-Request an das Tomcat-Servlet. Dieses gibt den Inhalt des POST oder GET-Requests an ein bestimmtes C-Programm weiter. Dieses Programm bearbeitet dann diesen Request und gibt eine Antwort auf der Basis des Requests an den Tomcat-Server. Tomcat ist also hier der Web-Gateway.
Mein Problem dabei ist, dass ich noch keine Java-Klasse gefunden habe, die "CGI-Aufrufe" durchführt, nur welche entgegen nimmt.
Vielleicht habe ich auch etwas wichtiges noch nicht verstanden.
Mir wurde nur gesagt, dass das C-Programm beim Aufruf eine CGI-Variable erwartet, und aufgrund dieser Variable dann sein Senf zurückgibt.
Gruss Christian
Ein Client fordert einen Schlüssel an, und gibt dazu ein HTTP-Request an das Tomcat-Servlet. Dieses gibt den Inhalt des POST oder GET-Requests an ein bestimmtes C-Programm weiter. Dieses Programm bearbeitet dann diesen Request und gibt eine Antwort auf der Basis des Requests an den Tomcat-Server. Tomcat ist also hier der Web-Gateway.
Mein Problem dabei ist, dass ich noch keine Java-Klasse gefunden habe, die "CGI-Aufrufe" durchführt, nur welche entgegen nimmt.
Vielleicht habe ich auch etwas wichtiges noch nicht verstanden.
Mir wurde nur gesagt, dass das C-Programm beim Aufruf eine CGI-Variable erwartet, und aufgrund dieser Variable dann sein Senf zurückgibt.
Gruss Christian
- emge
- Beiträge: 1525
- Registriert: 20.10.2003 22:05:46
- Lizenz eigener Beiträge: Artistic Lizenz
- Wohnort: 50° 45' 0" N 12° 10' 0" E
"CGI-Aufrufe" sind in meinen Augen ganz normale HTTP-Requests. In deinem Fall müsste dann nur noch ein Parameter an den Aufruf angehangen werden. Du rufst also etwas wie "http://localhost/cgi-bin/deinProgramm?variable=wert" auf.
Einen HTTP-Request in Java wird man meist mit der Klasse URL [1] abfackeln.
Grüße, Marco
[1] http://java.sun.com/docs/books/tutorial ... ngURL.html
Einen HTTP-Request in Java wird man meist mit der Klasse URL [1] abfackeln.
Grüße, Marco
[1] http://java.sun.com/docs/books/tutorial ... ngURL.html
- emge
- Beiträge: 1525
- Registriert: 20.10.2003 22:05:46
- Lizenz eigener Beiträge: Artistic Lizenz
- Wohnort: 50° 45' 0" N 12° 10' 0" E
Na was willst du denn nun? Ein Binary ausführen oder ein CGI-Programm [1] auf einem Webserver?
Binaries rufst du unter Java mit der Klasse Runtime [2] auf.
[1] http://de.wikipedia.org/wiki/Common_Gateway_Interface
[2] http://java.sun.com/j2se/1.4.2/docs/api ... ntime.html
Binaries rufst du unter Java mit der Klasse Runtime [2] auf.
[1] http://de.wikipedia.org/wiki/Common_Gateway_Interface
[2] http://java.sun.com/j2se/1.4.2/docs/api ... ntime.html
Ja, das ist ja gerade das verzwickte. Wir haben hier ein Java-Progamm-Servlet, das ein CGI-Shell-Script aufruft. Dieses ruft dann seinerseits ein "normales" C-Programm das unter irgendwo unter /usr/bin ... liegt auf. Das C-Programm liest über die get_env-Methode die übergebenen Werte aus.
Und das soll nun einfacher werden. Das Servlet soll direkt den C-Code aufrufen.
Gruss Christian
Und das soll nun einfacher werden. Das Servlet soll direkt den C-Code aufrufen.
Gruss Christian
- emge
- Beiträge: 1525
- Registriert: 20.10.2003 22:05:46
- Lizenz eigener Beiträge: Artistic Lizenz
- Wohnort: 50° 45' 0" N 12° 10' 0" E
Dann macht doch einfach einColumbus hat geschrieben:Ja, das ist ja gerade das verzwickte. Wir haben hier ein Java-Progamm-Servlet, das ein CGI-Shell-Script aufruft. Dieses ruft dann seinerseits ein "normales" C-Programm das unter irgendwo unter /usr/bin ... liegt auf. Das C-Programm liest über die get_env-Methode die übergebenen Werte aus.
Und das soll nun einfacher werden. Das Servlet soll direkt den C-Code aufrufen.
Code: Alles auswählen
Process myProcess = Runtime.exec("/usr/bin/deinProgramm arg1 arg2");
Grüße, Marco