使用servlet将动态映像传递给JSP

时间:2012-05-12 14:28:47

标签: java image jsp servlets

我有一个桌面应用程序,用于创建图形2D对象,将其粘贴在面板中并绘制它。我试图使用servlets和jsps将此应用程序转换为网页。我已经在网上阅读了2天,无法解决如何做到这一点,我发现的每个例子似乎都遗漏了一个重要的部分。我不想将图像保存到文件中,因为每个用户都会获得一个新的/不同的图像。

我可以在servlet中创建图像以及其他响应变量并同时将它们传递给jsp吗?然后使用类似$ {response.image}之类的东西来调用图像。这似乎更可取,但似乎没有效果。

或者我是否只为图像需要一个单独的servlet(这看起来更难)?另外,如何准备要在HTML中用作图像的Graphics2D对象?

2 个答案:

答案 0 :(得分:3)

您需要了解的是,网络浏览器必须根据检索到的HTML代码中找到的<img>元素的网址下载所请求的图片,并且网络服务器必须以某种方式在生成的HTML代码中内联图像的原始内容。

您确实需要为此创建一个独立的图像servlet,用于侦听<img>元素的特定URL。您可以通过在生成HTML代码期间在请求查询字符串中提供唯一的图像idenfitier或请求路径信息来使servlet可重用。

E.g。

<img src="imageServlet?param1=value1&param2=value2" />

@WebServlet("/imageServlet")
public class ImageServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // Create image based on request.getParameter() information.
        // Set proper content type by response.setContentType().
        // Write image to response.getOutputStream().
    }

}

另见:

答案 1 :(得分:0)

我将回答问题的第一部分。要将图像嵌入到HTML页面中,首先需要生成包含以下标记的HTML页面:

<img src="somePath" />

此HTML标记将在对请求的响应中发送,浏览器将对其进行解析。然后它会向somePath发送第二个HTTP请求,以下载图像的字节。

因此,您需要以某种方式将生成的图像存储在内存中并等待第二个请求,然后将字节发送到响应,或者您需要延迟图像生成,直到第二个请求进入。我更喜欢第二解决方案因此,处理第一个请求的代码的目标只是生成包含指向适当URL的img标记的标记。此URL应包含实际生成图像所需的所有参数。

对于第二部分,您肯定必须创建一个BufferedImage实例,绘制到其Graphics2D对象,并使用ImageIO将此BufferedImage写入响应输出流。