我正在通过servlet运行一些终端(或命令提示符)命令,如下所示
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
String[] command =
{
"zsh"
};
Process p = Runtime.getRuntime().exec(command);
new Thread(new SyncPipe(p.getErrorStream(), response.getOutputStream())).start();
new Thread(new SyncPipe(p.getInputStream(), response.getOutputStream())).start();
PrintWriter stdin = new PrintWriter(p.getOutputStream());
stdin.println("source ./taxenv/bin/activate");
stdin.println("python runner.py");
stdin.close();
int returnCode = 0;
try {
returnCode = p.waitFor();
} catch (InterruptedException e) {
e.printStackTrace();
} System.out.println("Return code = " + returnCode);
}
class SyncPipe implements Runnable
{
public SyncPipe(InputStream istrm, OutputStream ostrm) {
istrm_ = istrm;
ostrm_ = ostrm;
}
public void run() {
try
{
final byte[] buffer = new byte[1024];
for (int length = 0; (length = istrm_.read(buffer)) != -1; )
{
ostrm_.write(buffer, 0, length);
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
private final OutputStream ostrm_;
private final InputStream istrm_;
}这是在新窗口中执行终端命令后显示结果,我希望避免这种情况,并将这些流值传回JSP页面,并在div中显示相同的结果。
怎么做?
发布于 2014-03-14 09:47:45
静态进口
首先,您可以使用<%=和%> (如在此解释和这里 )定义一个在此解释。
您可以静态地导入.jsp页面,而不是复制整个代码,如下所示:
<%@ include file="YourPage.jsp" %>链接。
若要在运行时而不是在服务器端调用页面,请执行以下操作:
<jsp:include page="YourPage.jsp"/>但与静态进口相比,这并没有带来巨大的优势。
您还可以声明您的函数,然后通过使用<%!和%> (如在这里显示 )在整个网页中使用它。
如果您执行上述任何方法,您的函数将(只能)在页面最初加载时(服务器端)才被导入。(为了完全正确,理论上<jsp:include在运行时被调用,但在实践中它模拟一个请求,而不实际进行一个完整的往返:server > browser > server > browser)。
动态进口
对于动态导入或加载,您必须求助于jQuery (JavaScript)来加载您的JSP页面客户端。
请参考以下问题:点击链接的时候?
你可以简单地做:
function changeContent() {
$('#content').load('YourPage.jsp');
}您可以在这里找到其他示例:
引用最后一个链接的答案:
这与Ajax有关,Jquery可以做到这一点。您可以使用javascript getElementByID 或使用Jquery的build_in $("sub_banner") 语法来更改div的内容。
https://stackoverflow.com/questions/22401131
复制相似问题