帮助从Servlet到JSP页面获取图像

我目前必须生成一个显示字符串文本的图像,我需要在Servlet上创建这个图像,然后以某种方式将图像传递给JSP页面,以便它可以显示它。 我试图避免保存图像,而是以某种方式将图像流式传输到JSP。

我没有找到一种生成图像的方法,因为我开始寻找如何将图像从Servlet传递到JSP并且卡住了。

编辑:jsp页面已经制作,不是由servlet创建的,我必须将图像传递给已经存在的jsp

任何帮助表示赞赏。

您需要将图像作为字节数组写入响应的输出流。 像这样的东西:

byte[] imageBytes = getImageAsBytes(); response.setContentType("image/jpeg"); response.setContentLength(imageBytes.length); response.getOutputStream().write(imageBytes); 

然后在JSP中,您只需使用标准的img元素:

  

不能在同一个响应中返回两个,因为你正在返回不同的类型( text/html类型的HTML页面和image/jpeg类型的image/jpeg ,比如说)。

对于这种事情,我将在初始servlet请求期间生成图像(对于包含HTML页面)。 我将它存储在我的servlet的缓存中,并使用带有句柄的图像标记写入HTML页面,该图像标记包含该图像的URL。

例如,浏览器要求http://whatever/page

servlet生成图像,并在页面中写入HTML标记

  

浏览器将呈现HTML页面,并作为该问题的一部分向我的servlet发出带有图像句柄的新请求。

例如,浏览器现在要求http://whatever/image/unique_handle_to_image

然后我将图像作为内容类型image/jpeg或类似物返回。

所以你有两个请求正在进行中。 一个用于页面,在其中渲染图像并临时存储,第二个用于返回图像。 您必须记住清除图像缓存,但这一切都很简单。 我不担心存储大量图像,因为来自浏览器的两个请求通常(!)快速连续。

  1. 我想如果你的浏览器支持它,可以使用数据uri ,并创建类似的东西

     Red dot 

请注意,围绕这些有一些警告。 查看链接页面。

我会沿着这条路做一些事情来实现这个目标:

在JSP页面上,您放置了一个图像链接:

  其余的 

此链接指向您的servlet,它使用请求参数生成图像,您不需要保存它,只需将其放入响应的输出流中即可。 您必须记住禁用此servlet的浏览器缓存。

首先显示JSP页面,然后请求所有图像,它应该工作得很好。

当然,您不应该将文本显示在这样的参数中,您应该以某种方式对其进行加密或将其存储在HTTP会话中。

希望这可以帮助。

如果我正确理解您的问题,事件的顺序将是:

  1. 您生成一个HTML页面;
  2. 该HTML页面被发送到客户端; 和
  3. 客户端的浏览器读取图像URL并将其作为单独的请求进行请求。

因此,您无法生成图像并将其传递给JSP。 但是,您可以生成一个URL来获取图像并将其放入JSP中。 这很容易通过servlet传递给HttpServletRequest对象(JSP中的请求范围)。 例如,生成:

  

您没有真正说出该文本是什么或生成图像需要什么信息。 如果您无法将其封装在GET URL中,则可能需要添加额外信息并将其放入HttpSession中,以便在下一个获取图像请求时检索它。

 ... response.setContentType("image/jpeg"); response.setContentLength(imageBytes.length); // imageBytes - image in bytes response.getOutputStream().write(imageBytes);// outStream.flush(); outStream.close();