2012-11-18 21 views
6

Sto provando a sviluppare un sito Web che accetta l'input dell'utente e converte in un file di testo. Il file di testo viene quindi utilizzato come input per un file .jar. (ad esempio java -jar encoder.jar -i text.txt), il jar emette quindi un file .bin che l'utente può scaricare.Esecuzione di file .jar nella pagina JSP

Questo jar è progettato per essere eseguito dalla riga di comando e non conosco davvero il modo migliore per implementarlo in una pagina .jsp. Ho creato alcune classi di test java ma nulla ha funzionato finora.

Qualcuno ha qualche suggerimento sui possibili metodi?

+1

La tua migliore possibilità potrebbe essere quella di caricare il jar nel tuo sito ed eseguirlo in corso: probabilmente dovrai solo sostituire la classe principale. Hai una fonte per il .jar? Altrimenti potresti provare a decompilare la classe principale per vedere quanto sia complicato. Potrebbe essere necessario fare attenzione che il codice rilasci tutte le risorse correttamente anche se non presume semplicemente che tutto venga rilasciato automaticamente al termine poiché se si chiama da JVM, la JVM in esecuzione non verrà terminata. In alternativa puoi probabilmente trovare un'implementazione diversa: qual è la codifica? – Rup

+0

Grazie, è un'idea interessante, non ci avevo pensato. Fondamentalmente il file .jar che sto usando non è il mio, quindi non sono sicuro della sua codifica. È usato per convertire il file di testo in esadecimale in modo che possa essere interpretato da un pezzo di hardware. Proverò a decompilare il file .jar in un secondo momento e vedere se questo sarebbe un metodo praticabile. Nel frattempo se qualcun altro ha qualche idea sono i benvenuti ... – Bam421

risposta

3

Un'alternativa all'esecuzione come un processo esterno è invocare sua classe principale nella JVM corrente:

  1. estratto/aperto META-INF/MANIFEST.MF del vaso
  2. Identificare la Main-Class:. Dicono che è chiamato EncoderMainClass
  3. Richiamare il suo main metodo: EncoderMainClass.main("-i", "text.txt")

Questo alcunché per essere più veloce a causa di un nuovo processo di sistema operativo non ha bisogno di essere creata, ma ci possono essere considerazioni di sicurezza.

+0

Questo ha funzionato perfettamente, è riuscito a passare gli argomenti attraverso la classe principale e generare i file .bin. Per considerazioni sulla sicurezza, cosa intendi esattamente, l'utente potrebbe tentare una qualche forma di overflow? Grazie per l'aiuto. – Bam421

+0

Leggi su [SecurityManager] (http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/SecurityManager.html).La classe avrebbe applicato politiche di sicurezza diverse quando è in esecuzione su linea di comando v/s in esecuzione nel contesto del server delle app. Dal momento che funziona, la mia ipotesi è che dovresti essere ok. –

0

avete provato somrthing come questo,

Creare un file java

utilizzare un ProcessBuilder e iniziare una nuova JVM.

Ecco qualcosa per iniziare:

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

PS: gestire distruggere processo altrimenti si mangia tutta la memoria

0

Si può mettere questo vaso per l'applicazione web sul classpath e usa la sua classe e i suoi metodi. Meglio se hai javadoc se non hai fonti. Ma anche se non in classpath puoi provare lo example o this example.

Problemi correlati