我正在通过我的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中显示相同的内容。
怎么做?
答案 0 :(得分:0)
首先,您可以定义scriplet
<%=
和%>
explained here和here。
您可以静态导入.jsp
页面,而不是复制整个代码:
<%@ include file="YourPage.jsp" %>
要在运行时而不是在服务器端调用页面,请执行以下操作:
<jsp:include page="YourPage.jsp"/>
但这并不比静态导入带来巨大优势。
您还可以使用<%!
和%>
shown here来声明您的功能,然后在整个网页中使用它。
如果您执行上述任何方法,则仅在页面最初加载(服务器端)时才会导入您的函数。 (为了绝对正确,<jsp:include
在运行时在理论上被调用,但在实践中它模拟了一个请求,而实际上没有实现完整的往返:server > browser > server > browser
)。
对于动态导入或加载,您必须使用jQuery(JavaScript)来加载客户端的JSP页面。
请参阅此问题:How do I inject another JSP page into a <div> when clicking a link?
你可以这样做:
function changeContent() {
$('#content').load('YourPage.jsp');
}
您可以在此处找到其他示例:
引用上一个链接的答案:
这与Ajax有关,Jquery可以做到这一点。 您可以使用javascript getElementByID
或使用Jquery的build_in $("sub_banner")
语法来更改div的内容。