在DIV中显示流

时间:2014-03-14 09:37:20

标签: java javascript html

我正在通过我的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中显示相同的内容。

怎么做?

1 个答案:

答案 0 :(得分:0)

静态导入

首先,您可以定义scriplet <%=%> explained herehere

您可以静态导入.jsp页面,而不是复制整个代码:

<%@ include file="YourPage.jsp" %>
  

Link

要在运行时而不是在服务器端调用页面,请执行以下操作:

<jsp:include page="YourPage.jsp"/>

但这并不比静态导入带来巨大优势。

  

Link

您还可以使用<%!%> 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的内容