我以前编写了一个从bash文件执行的Java类,现在我需要允许它使用Javascript / HTML按钮从JSP页面执行,我想知道该怎么做?
首先,我的课看起来像这样:
public class Sync { public static void main(String[] args) { //my content here } }
此Sync类已从bash脚本运行,如下所示:
cd /root/tomcat/webapps/project/WEB-INF/classes/ echo "Executing first part..." /usr/local/java/bin/java classes/CLRSyncCLI 120.0.0.1 up false Y ${IPS[@]} echo "Executing second part..." /usr/local/java/bin/java classes/CLRSyncCLI 127.0.0.1 down false Y ${IPS[@]}
请注意:classes是TomCat Web服务器内所有已编译Java类的目录。
现在在jsp页面中,我需要类似:
<input type="button" value="Execute" name="to" action="run" onClick="path here">
一次单击一次,如何运行带有其参数的同步类两次,并显示该类已执行并带有消息。
首先,我想说你的建议是一个坏主意。您应该Sync按照前面的答案进行重构。
Sync
但是,如果您不愿按Sync原样使用,则以下一些代码可能会有所帮助:
<% if( request.getParameter( "to" ) == null ) { %> <p> Click 'Execute' to begin processing. </p> <form> <input type="submit" value="Execute" name="to" /> </form> <% } else { %> <p> Processing... </p> <pre> <% PrintStream sysout = System.out; try { File syncFile = File.createTempFile( "Sync", ".tmp" ); PrintStream syncOs= new PrintStream( syncFile ); System.setOut( syncOs ); String[] myArgs = ...; // set up your args Sync.main( myArgs ); // ... do whatever else you need to do syncOs.close(); syncFile.close(); FileReader syncRdr = new FileReader( syncFile ); String line = null; while( ( line = syncRdr.readLine() ) { out.println( line ); } syncRdr.close(); syncFile.delete(); } catch( Exception ex ) { out.print( ex ); } finally { System.setOut( sysout ); } %> </pre> <% } %>
这里有一些潜在的陷阱,尤其是在多线程中。但是也许您可以以此为起点?另外,我尚未调试它,因此您可能需要做更多的工作。
祝好运,
直流电