我有一个servlet,它生成一个.png图像,并将其作为字节数组写入OutputStream
。
我想创建一个触发该servlet并下载生成的图像的应用程序。我还想测量servlet生成图像所需的时间,不包括参数检查的时间等。我知道从客户端应用程序是不可能的,因此servlet本身应测量此时间,然后将测量值发送回客户端应用程序。
我的问题:如何从servlet发送多个内容:图像和时间值?
我可以使用例如JSON吗?或者,如果我将图像(作为字节数组)和时间值(作为长值)写入OutputStream
,我如何在客户端读取它?
答案 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)。