我必须在jsp页面上打印一些我以InputStream形式获得的图像。
首先,我有一个servlet,它将包含InputStream的变量传递给jsp页面,这样:
request.setAttribute("Image", InputStream);
request.getRequestDispatcher(pagename).include(request, response);
在我的jsp页面中,我有这个来获取InputStream:
${requestScope.VariableContainingInputStream}
要将InputStream转换为图像,我应该以这种方式使用servlet:
<img src="ServletName">
如何将该InputStream传递给该servlet?
答案 0 :(得分:1)
如何将该InputStream传递给该servlet?
你不会。您的JSP将创建一个临时(或永久)文件,并将InputStream
的内容写入其中。然后,您将提供一个端点,用于提供该文件的内容。
然后,您将在JSP的<img>
元素中提供该端点的URL。
答案 1 :(得分:0)
如果你把它作为一个InputStream,我假设图像是动态生成的,或者一般来说你有某些根据一些参数给你的东西
。您应该考虑一下普通(或愚蠢......)浏览器的工作方式:
(您可以通过css页面,js scrips或任何其他资源替换图像)
所以你应该不在运行你的jsp时获取输入流来编写HTML页面但写入<image source=/ImageServlet_url?params_for_current_image/>
然后,当浏览器要求提供图像时,图像servlet将要求InputStream
并将其直接放在响应正文中,并在响应标题中使用正确的类型。
这是解决问题最强大的方法。如果真的不是一个选项,并且InputStream
在运行jsp时只能是不可取的,那么你必须输入 session 属性。然后,当ImageServlet
被调用时,它将在会话中查找并发送它。问题是InputStream不一定是Serializable
,并且将不可序列化的项放入会话中是不安全的。所以你应该:
Hash<String, InputStream>
InputStream
放入会话时,实际放入哈希(使用唯一键)并将密钥存储在会话中InputStream
时,从会话中获取密钥并从哈希中获取InputStream
...并且不要忘记将其从哈希中删除... 我强烈建议您坚持第一个解决方案,而不是HTML页面请求与图片之间的说话或网络错误或断电......