【问题标题】:Displaying streams in DIV在 DIV 中显示流
【发布时间】:2014-03-14 09:37:19
【问题描述】:

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

怎么做?

【问题讨论】:

  • 不是void,而是传回值并用JSP读入?
  • 而不是 'ostrm_.write(buffer, 0, length);'我想把它们发回 JSP
  • 所以你建议我把所有这些东西放到 并导入东西??我会试试这个,并会更新你。
  • 这取决于您的应用程序。请参考下面我的回答。

标签: java javascript html


【解决方案1】:

静态导入

首先,您可以使用<%=%> 定义scriplet,例如explained herehere

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

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

Link.

要在运行时而不是在服务器端调用页面:

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

但这并没有比静态导入产生巨大的优势。

Link

您还可以声明您的函数,然后通过使用&lt;%!%&gt;(如shown here)在整个网页中使用它。

如果您执行上述任何方法,您的函数将(可以)仅在页面初始加载时(服务器端)被导入。 (绝对正确,理论上&lt;jsp:include 在运行时被调用,但实际上它模拟了一个请求实际上没有进行完整的往返:server &gt; browser &gt; server &gt; 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的内容

【讨论】:

  • 非常感谢您的回答!
  • @Zedai:当然没问题。希望对您有所帮助。
  • 非常感谢!你的回答非常有帮助和启发。谢谢!
猜你喜欢
  • 2013-07-06
  • 1970-01-01
  • 2017-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-31
  • 2017-05-17
  • 2011-07-27
相关资源
最近更新 更多