2012-11-18 131 views
6

我正在嘗試開發一個接受用戶輸入並轉換爲文本文件的網站。該文本文件然後用作.jar文件的輸入。 (例如java -jar encoder.jar -i text.txt),那麼jar會輸出一個.bin文件供用戶下載。在JSP頁面中運行.jar文件

這個jar被設計爲從命令行運行,我真的不知道在.jsp頁面內實現它的最佳方式。我創建了一些java測試類,但目前爲止還沒有任何工作。

有沒有人對可能的方法有任何建議?

+1

您最好的選擇可能是將jar加載到您的網站並在流程中運行 - 您可能只需要替換主類。你有.jar的源代碼嗎?如果沒有,你可以嘗試反編譯主類,看看這是多麼複雜。您可能需要小心,即代碼正確釋放所有資源,即它不會假定所有內容都會在終止時自動釋放,因爲如果您從JVM調用自己,那麼它所運行的JVM將不會終止。或者,你可能會找到一個不同的實現 - 編碼是什麼? – Rup

+0

謝謝你,這是一個有趣的想法,我沒有想到這一點。基本上我使用的.jar文件不是我自己的,所以我不知道它的編碼。它用於將文本文件轉換爲十六進制,因此可以通過一個硬件來解釋。我會稍後嘗試反編譯.jar文件,看看這是否是一種可行的方法。同時,如果任何人有任何想法,他們是受歡迎的... – Bam421

回答

3

運行它作爲一個外部進程的替代方法是調用在當前JVM其主類:

  1. 提取/打開罐子
  2. 識別Main-Class:META-INF/MANIFEST.MF的。說它是所謂的EncoderMainClass
  3. 調用它main方法:EncoderMainClass.main("-i", "text.txt")

這有啥可更快,因爲一個新的操作系統過程中不需要被創建,但可能有安全方面的考慮。

+0

這工作完美,設法通過主類傳遞參數並生成.bin文件。出於安全考慮,您的意思是什麼,用戶是否可以嘗試某種形式的溢出?謝謝你的幫助。 – Bam421

+0

請閱讀[SecurityManager](http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/SecurityManager.html)。當在運行在應用服務器上下文中的命令行v/s上運行時,該類將應用不同的安全策略。既然它在工作,我猜你應該沒問題。 –

0

您是否嘗試過somrthing這樣,

新建一個java文件

使用ProcessBuilder,並開始一個新的JVM。

這裏是什麼讓你開始:

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

PS:做處理銷燬進程否則它會吃掉所有的內存

0

你可以把這個罐子到Web應用程序的類路徑並使用它的類和方法。如果您沒有源,請更好地使用javadoc。但即使不在classpath中,您也可以嘗試examplethis example