我有一个servlet,它生成一个.png图像并将其作为字节数组写入OutputStream
。
我想创建一个应用程序来启动servlet并下载生成的图像。我还想测量servlet生成图像所需的时间,不包括参数检查等时间。我知道从客户端应用程序来说这是不可能的,所以servlet本身应该测量这个时间,然后将测量值发送回客户端应用程序。
我的问题:如何从servlet发送多个内容:图像和时间值?
我应该使用例如JSON吗?或者,如果我将图像(作为字节数组)和时间值(作为长值)写入OutputStream
,我如何在客户端读取它?
在这种情况下,您可以发送一个标头参数。
long startTime = System.currentTimeMillis();
// Generate the image
long stopTime = System.currentTimeMillis();
long elapsedTime = stopTime - startTime;
response.setHeader("ElapsedTime", elapsedTime);
是的,我们可以从HttpServlet响应向客户端返回多个值。
从servlet版本2.2开始,servlet还可以使用HttpServlet响应中的方法为同一响应标头发送多个值。
新的addHeader(String name,String value)方法将标头设置为给定值。虽然传统的setHeader()方法会替换任何现有的值,但addHeader(。还有addIntHeader(String名称,int值)和addDateHeader(字符串名称,长日期)。
这取决于您的客户端。正如您提到的servlet处理字节。它可以使用您选择的协议写入您想要的输出流。例如,写入int
值,该值包含以毫秒为单位的处理时间,后跟包含图像的字节数组。
但是什么样的客户端会读取这个流呢?如果它是程序化的厚客户端,你可以在那里实现类似的逻辑。但我相信它应该是一个创建HTTP请求的web浏览器,因为它使用<img>
标记来呈现HTML。但浏览器不知道如何获取额外的数据。
然而,如果您使用AJAX来获取图像,您可以将额外的数据放入HTTP响应标头中,然后在客户端读取其值。