인증 된 사용자의 이미지를 데이터베이스에 업로드하고 이전에 서블릿을 통해 동적으로 업로드 한 모든 이미지를 표시하는 작은 애플리케이션을 만들고 있습니다.서블릿을 통해 jsp 페이지에 이미지 표시
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<jsp:include page="/RetrieveImagesServlet.do"></jsp:include>
</head>
이 페이지 요청에 사용자 이미지를 설정하고 잘 작동 :
은이 코드를 사용하여 데이터베이스에서 페이지로드에서 이미지를 검색 할 수 있습니다.
이제 테이블 형식으로 이미지 데이터를 표시하려면 jstl을 사용하십시오. 사용자 이미지 객체는 byte[]
형식의 이미지를 포함하므로 서블릿을 호출하여 아래 이미지 파일을 인쇄합니다.
<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>
위의 코드에 포함 된 라인 <jsp:include page="/ImageDisplayServlet.do"></jsp:include>
참고 ImageName를 인쇄 할 수 있지만, 나는 호출 서블릿의 이미지를 얻을 수 있어요
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();
아래의 코드를 포함하는 표시하는 서블릿을 호출 final OutputStream outputStream=response.getOutputStream();
에 illegalStateException을 발생시킵니다.
제발 내가 어디가 잘못되었는지 안내하고 jsp 파일에 이미지를 표시 할 수 있습니까?
예 이제 나는 당신이 말한 것처럼 그것을 이해합니다. 그러나 처음으로 이미지 용 데이터베이스를 방문한 경우 모든 이미지 데이터를 반환해야하며 데이터베이스에서 이미지를 가져 오기 위해 각 이미지 ID로 돌아갈 필요가 없습니다. 어떤 방법이 있든 이미 모든 이미지를 가져 왔을 때 이미지를 가져 오기 위해 각 이미지 ID에 대해 데이터베이스에 도달해야합니다. – theSilentOne
첫 번째 쿼리는 모든 이미지 바이트를로드해서는 안됩니다.이 시점에서 바이트를 사용하면 캐시에 저장하지 않고 다음 요청을 기다리지 만 코드가 상태를 유지하게됩니다. 캐시를 삭제할시기를 알지 못합니다.) –