Java Programm mit Hilfe von Cgi/ Perl aus HTML raus starten

steff aka sId

Erfahrenes Mitglied
Wie kann ich aus Perl/Cgi ein Java Programm starten?
Ich weiß schon das ich dabei das Perl/Cgi Script den Classpath meiner VM kennen muss allerdings habe ich keine Ahnung von Cgi/Perl so das ich nicht weiß wie ich dem Script diesen angebe. Dazu muss ich noch wissen wie ich das Programm dann starte und wie ich zum Beispiel Werte aus GET oder POST mit an das java programm übergeben kann. Würde mich sehr freuen über entsprechende Code Fragmente oder auch Links wo ich etwas darüber finden kann. Bin mittlerweile ziemlich verzeifelt und habe schon einige Stunden gegoogelt aber entweder nach falschen Begriffen oder es gibt einfach nichts. Resultat war das ich nichts gefunden habe :-(
MFG Steff
 
Beispielcode:
Code:
#! /usr/bin/perl

use strict;
use warnings;
use CGI;
use CGI::Carp qw(fatalsToBrowser);

my $cgi = CGI->new(); # initialisiere neues CGI-Objekt
my %params = $cgi->Vars(); # lese die Parameter aus GET oder POST
print $cgi->header(-type => 'text/html'); # gebe Header aus

print $cgi->start_html();
my $java_file = '/path/to/java_file';
my $java_path = '/irgendwas/java';
open(S_JAVA,"$java_path $java_file $params{parameter_fuer_java} $params{noch_ein_parameter} |") or die $!;
while(my $line = <S_JAVA>){ # so lange das Java-Prog. Ausgaben macht
  print $line,"<br />"; # gebe sie aus...
}
close S_JAVA;
print $cgi->end_html();
 
Noch ein paar kurze Fragen zu dem Script:

1. $java_file ist die datei die ich ausführen will ist das richtig?

2. $java_path der Classpath der JVM

3. $params{parameter_fuer_java} die Parameter aus Get bzw. Post

Danke fuer die Hilfe. MFG Steff

P.s. kann man den Pfad zu den Dateien nur relativ oder auch absolut angeben? Und funktioniert das alles so auch unter windows?
 
1.) richtig
2.) richtig
3.) richtig (bzw. _ein_ Parameter mit dem Namen "parameter_fuer_java")
4.) kann man sowohl absolut als auch relativ angeben. Läuft auch unter Windows.
 
Code:
#!D:\webserver\perl\bin\perl.exe

use strict;
use warnings;
use CGI;
use CGI::Carp qw(fatalsToBrowser);

my $cgi = CGI->new(); # initialisiere neues CGI-Objekt
my %params = $cgi->Vars(); # lese die Parameter aus GET oder POST
my $method = $ENV{'REQUEST_METHOD'};
my $query_string = $ENV{'QUERY_STRING'};
my $content_length = $ENV{'CONTENT_LENGTH'};

print $method,"<br/>";
print $query_string,"<br/>";
print $content_length,"<br/>";

print $cgi->header(-type => 'text/html'); # gebe Header aus

print $cgi->start_html();
my $java_file = 'D:\webserver\htdocs\ProPra\cgi-bin\Props';
my $java_path = 'D:\webserver\htdocs\j2sdk\bin\java';
open(S_JAVA,"$java_path $java_file $method $query_string $content_length") or die $!;
while(my $line = <S_JAVA>){ # so lange das Java-Prog. Ausgaben macht
  print $line,"<br />"; # gebe sie aus...
}
close S_JAVA;
print $cgi->end_html();

Kannst du mir vieleicht sagen wo hier mein Fehler ist? Wäre echt super.
Bekomme immer nen Fehler von wegen invalid Argument on line 23.
Greetz Steff
 
Nur eine Anmerkung:

Wenn die Seite viel aufgerufen wird, solltest du dies nicht machen. Denn jedesmal wenn das Programm gestartet wird, startet auch gleich eine komplette Virtuelle Maschiene.
Das kann sich katastrophal auf die Performance auswirken wenn 20 Virtuelle Maschienen laufen.
Hast du den Quellcode (oder API zugriff) dann handle das Java Programm lieber innerhalb eines Servlet Containers ab. Denn da läuft die VM permanent und muss nicht gestartet werden.
 
Danke fuer die Antworten das Problem ist das wir vom Programmier Praktikum an der Uni her das so machen sollen und kein Servlet schreiben sollen daher muss ich es so machen. Es wird wohl auch keine Seite die viele Leute gleichzeitig besuchen werden. Da es sich eher darum handelt zu zeigen wie man eine Gui mit einem html Interface austauschen kann.
Greetz Steff
 
Zurück