2012-11-18 9 views
6

Ich versuche, eine Website zu entwickeln, die Benutzereingaben nimmt und in eine Textdatei konvertiert. Die Textdatei wird dann als Eingabe für eine Datei .jar verwendet. (z.B. java -jar encoder.jar -i text.txt), gibt das Glas dann eine .bin Datei für den Benutzer zum Herunterladen aus.Ausführen von .jar-Datei in JSP-Seite

Dieses jar ist entworfen, um von der Befehlszeile ausgeführt werden, und ich weiß wirklich nicht den besten Weg, um es innerhalb einer .jsp Seite zu implementieren. Ich habe ein paar Java-Test-Klassen erstellt, aber bisher hat noch nichts funktioniert.

Hat jemand irgendwelche Vorschläge zu möglichen Methoden?

+1

Ihre beste Wette ist es, das Glas in Ihre Website zu laden und es in Prozess zu starten - Sie müssen wahrscheinlich nur die Hauptklasse ersetzen. Haben Sie eine Quelle für das .jar? Wenn nicht, könnten Sie versuchen, die Hauptklasse zu dekompilieren, um zu sehen, wie kompliziert das ist. Sie müssen möglicherweise darauf achten, dass der Code alle Ressourcen korrekt freigibt, d. H. Er geht nicht einfach davon aus, dass bei der Beendigung automatisch alles freigegeben wird, da die JVM, die gerade ausgeführt wird, nicht beendet wird, wenn Sie sich von Ihrer JVM aus aufrufen. Alternativ können Sie wahrscheinlich eine andere Implementierung finden - wie lautet die Kodierung? – Rup

+0

Danke das ist eine interessante Idee, daran hatte ich nicht gedacht. Grundsätzlich ist die .jar-Datei, die ich benutze, nicht meine eigene, also bin ich nicht sicher über seine Kodierung. Es wird verwendet, um die Textdatei in Hex umzuwandeln, damit sie von einer Hardware interpretiert werden kann. Ich werde versuchen, die .jar-Datei später zu dekompilieren und zu sehen, ob das eine praktikable Methode wäre. In der Zwischenzeit, wenn jemand andere Ideen hat, sind sie willkommen ... – Bam421

Antwort

3

Eine Alternative als externes Prozess ausgeführt ist seine Hauptklasse im aktuellen JVM aufzurufen:

  1. Extract/open META-INF/MANIFEST.MF des Glases der Main-Class:
  2. identifizieren. Sagen Sie es seine main Methode EncoderMainClass
  3. Invoke aufgerufen: EncoderMainClass.main("-i", "text.txt")
  4. Diese aught schneller sein

weil ein Prozess neue Betriebssystem nicht erstellt werden müssen, aber es kann Sicherheitsüberlegungen sein.

+0

Dies funktionierte perfekt, schaffte es, die Argumente durch die Hauptklasse zu übergeben und die .bin-Dateien zu generieren. Aus Sicherheitsgründen, was genau meinen Sie, könnte der Benutzer irgendeine Art von Überlauf versuchen? Danke für Ihre Hilfe. – Bam421

+0

Lesen Sie auf [SecurityManager] (http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/SecurityManager.html).Für die Klasse gelten andere Sicherheitsrichtlinien, wenn sie in Befehlszeilenvs ausgeführt wird, die in Ihrem Anwendungsserverkontext ausgeführt werden. Da es funktioniert, denke ich, dass du in Ordnung sein solltest. –

0

Haben Sie so versucht Somrthing,

eine Datei java erstellen

eine ProcessBuilder verwenden und eine neue JVM starten.

ist hier etwas, um Ihnen den Einstieg:

ProcessBuilder pb = new ProcessBuilder("/path/to/java", "-jar", "your.jar", "thetextfile.txt"); 
pb.directory(new File("preferred/working/directory")); 
Process p = pb.start(); 

ps: gehe zu zerstören Prozess sonst wird es alle Speicher auffressen

0

Sie dieses Glas Classpath setzen können auf die Web-Anwendung auf dem und verwenden Sie es Klasse und Methoden. Besser, wenn Sie javadoc haben, wenn Sie keine Quellen haben. Aber auch wenn nicht in classpath können Sie die example oder this example versuchen.