I am making a small application which uploads a image for authenticated user into database and displays all the images that were previously uploaded dynamically through servlet.
I retrieve images at page load from database using this code:
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<jsp:include page="/RetrieveImagesServlet.do"></jsp:include>
</head>
This sets the user images in the page request and is working fine.
Now to display image data in table format i use jstl. Since user image objects contains image in byte[]
format so I invoke a servlet to print the image file as below.
<c:forEach var="imageDto" items="${requestScope.userImages}">
<tr>
<td><c:out value="${imageDto.getSerialNumber()}"></c:out></td>
<td><c:out value="${imageDto.getImageName() }"></c:out></td>
<td><c:out value="${imageDto.getImageSize()}"></c:out></td>
<td>
<c:set var="imageDto" scope="request" value="${imageDto}"></c:set>
<jsp:include page="/ImageDisplayServlet.do"></jsp:include>
<c:remove var="imageDto" scope="request" /></td>
<td></td>
</tr>
</c:forEach>
The line <jsp:include page="/ImageDisplayServlet.do"></jsp:include>
included in above code invokes a servlet to display which contains the code below
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();
I am able to get the image in invoked servlet as it is able to print the imageName but it throws illegalStateException at final OutputStream outputStream=response.getOutputStream();
.
Please guide me where I am wrong and how can I display image on jsp file.