2012-11-18 89 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