2

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

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

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

4

2 回答 2

3

您需要了解的是网络浏览器必须根据<img>检索到的 HTML 代码中的元素的 URL 下载单个图像,而不是网络服务器必须以某种方式将图像的原始内容内联到生成的 HTML 代码中.

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

例如

<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().
    }

}

也可以看看:

于 2012-05-12T14:36:53.627 回答
0

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

<img src="somePath" />

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

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

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

于 2012-05-12T14:37:58.133 回答