【问题标题】:Is it possible to return more than one value from a servlet to client?是否可以从 servlet 向客户端返回多个值?
【发布时间】:2014-10-25 17:27:07
【问题描述】:

我有一个 servlet,它生成一个 .png 图像并将其作为字节数组写入OutputStream

我想创建一个应用程序来触发该 servlet 并下载生成的图像。我还想测量 servlet 生成图像需要多少时间,不包括参数检查时间等。我知道从客户端应用程序是不可能的,所以 servlet 本身应该测量这个时间,然后将测量值发送回客户端应用程序。

我的问题:如何从一个 servlet 发送多个东西:图像和时间值?

我应该使用例如 JSON 吗?或者如果我将图像(作为字节数组)和时间值(作为长值)写入OutputStream,如何在客户端读取它?

【问题讨论】:

    标签: java json servlets stream


    【解决方案1】:

    是的,我们可以从 HttpServletResponse 向客户端返回多个值。

    从 servlet 版本 2.2 开始,Servlet 还可以使用 HttpServletResponse 中的方法为同一响应标头发送多个值。

    新的 addHeader(String name, String value) 方法将标头设置为给定值。虽然传统的 setHeader() 方法将替换任何现有值或值,但 addHeader() 将保留当前设置并仅设置一个附加值。还有 addIntHeader(String name, int value) 和 addDateHeader(String name, long date)。

    【讨论】:

      【解决方案2】:

      在这种情况下,您可以发送一个标头参数。

      long startTime = System.currentTimeMillis();
      
      // Generate the image
      
      long stopTime = System.currentTimeMillis();
      long elapsedTime = stopTime - startTime;
      response.setHeader("ElapsedTime", elapsedTime);
      

      【讨论】:

        【解决方案3】:

        这取决于您的客户。正如您提到的,servlet 处理字节。它可以使用您选择的协议将您想要的内容写入输出流。例如,写入包含处理时间(以毫秒为单位)的 int 值,后跟包含图像的字节数组。

        但是什么样的客户端会读取这个流呢?如果它是程序化的胖客户端,你可以在那里实现类似的逻辑。但我相信它应该是一个创建 HTTP 请求的 Web 浏览器,因为它正在渲染带有 <img> 标签的 HTML。但是浏览器不知道要获取额外的数据。

        但是,如果您使用 AJAX 获取图像,则可以将附加数据放入 HTTP 响应标头,然后在客户端读取其值。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-11-04
          • 2014-10-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-14
          • 1970-01-01
          相关资源
          最近更新 更多