2014-09-01 89 views
0

我有一个servlet,它会生成一个.png图像并将其作为字节数组写入OutputStream是否有可能从servlet返回多个值到客户端?

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

我的问题:怎么可能从一个servlet发送多个东西:图像和时间值呢?

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

回答

1

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

从Servlet版本2.2 Servlet也可以使用HttpServletResponse中的方法为同一个响应头发送多个值。

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

1

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

long startTime = System.currentTimeMillis(); 

// Generate the image 

long stopTime = System.currentTimeMillis(); 
long elapsedTime = stopTime - startTime; 
response.setHeader("ElapsedTime", elapsedTime); 
1

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

但是什么样的客户端会读取这个流?如果它是编程式的胖客户端,那么你可以在那里实现类似的逻辑。但我相信它预计会成为一个创建HTTP请求的Web浏览器,因为它使用<img>标记呈现HTML。但浏览器不知道获取更多数据。

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

相关问题