是否可以从servlet向客户端返回多个值?

时间:2014-09-01 13:07:42

标签: java json servlets stream

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

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

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

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

3 个答案:

答案 0 :(得分:1)

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

long startTime = System.currentTimeMillis();

// Generate the image

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

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

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

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