Java 通过Servlet在jsp页面上显示图像

Java 通过Servlet在jsp页面上显示图像,java,image,jsp,servlets,jstl,Java,Image,Jsp,Servlets,Jstl,我正在制作一个小应用程序,它将经过身份验证的用户的图像上传到数据库中,并显示以前通过servlet动态上传的所有图像 我使用以下代码在页面加载时从数据库检索图像: <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <jsp:include page="/RetrieveImagesServlet.do"></jsp:include> <

我正在制作一个小应用程序,它将经过身份验证的用户的图像上传到数据库中,并显示以前通过servlet动态上传的所有图像

我使用以下代码在页面加载时从数据库检索图像:

<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<jsp:include page="/RetrieveImagesServlet.do"></jsp:include>
</head>
上面代码中包含的行
调用一个servlet来显示包含下面代码的内容

response.setContentType("image/jpeg");
    final ImageDto imageDto = (ImageDto) request.getAttribute("imageDto");
    System.out.println(imageDto.getImageName());
    final OutputStream outputStream=response.getOutputStream();
    outputStream.write(imageDto.getImageFile());
    outputStream.close();
我能够在调用的servlet中获取图像,因为它能够打印imageName,但它在
final OutputStream OutputStream=response.getOutputStream()处抛出illegalStateException


请告诉我哪里错了,以及如何在jsp文件上显示图像。

您不了解浏览器和HTTP是如何工作的。加载HTML页面时,会发出HTTP请求。对请求的响应是一个包含HTML代码的页面。例如:

<img src="someImage.png" />

是的,现在我明白了,我终于像你说的那样做了。但是我想,如果我第一次访问数据库获取图像,它应该返回所有图像数据,而不必返回每个imageId来从数据库获取图像。有没有办法,或者我必须点击数据库中的每个imageId来获取图像,而我已经获取了所有图像。您的第一个查询不应该加载所有图像字节,因为此时获取字节是没有用的(除非您将它们保存在缓存中,等待下一个请求的到来,但这将使您的代码有状态,并且您不知道何时清除缓存)。
<img src="someImage.png" />
<img src="ImageDisplayServlet.do?imageId=${imageDto.id}" />