요구 사항 : jsp 페이지에 이미지의 세부 정보 (이미지 이름, 이미지 크기, 이미지)를 표시하고 싶습니다. 이미지는 객체 유형이 blob 인 데이터베이스에 저장됩니다. 데이터베이스 테이블의 열은 imageName (varchar2), imageSize (number), image (blob)입니다. Jsp '이미지 표시'에는 버튼이 있습니다. 여기를 클릭하면 이미지 이름과 이미지 크기가 표 형식으로 된 데이터베이스 테이블의 모든 이미지를 표시해야합니다. 요약 : 쇼 이미지 클릭시 DB에 저장된 이미지 이름을 가진 모든 이미지를 표시해야합니다.Jsp의 모든 이미지를 이름과 크기로 표시
기술 : struts2, JSP, JDBC
내가 무슨 짓을 : 나는
<%@page import="java.sql.Blob"%>
<%@page import="java.io.OutputStream"%>
<%@page import="java.sql.SQLException"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Esp Page</title>
<script type="text/javascript">
function showImage()
{
document.imgFrm.action="step1Image";
document.imgFrm.submit();
}
</script>
</head>
<body>
<s:form name="imgFrm">
<input type="button" name="b" value="ShowImage" onclick="showImage()"/>
<% System.out.println("[BlobRetrieval.jsp] session value "+session.getAttribute("imageRetrieved")+" if null then dont show images");%>
<%
if(session.getAttribute("imageRetrieved")!=null)
{
%>
<br></br>
<table id="myDiv" name="myDiv" style="color: #0900C4; font: Helvetica 12pt;border: 1px solid black; height: auto;">
<tr>
<td>Image name</td>
<td> <img src="DisplayBlob.jsp"> </img></td>
</tr>
</table>
<%
}
else
{
System.out.println("[BlobRetrieval.jsp]Session value is null");
}
%>
</s:form>
</body>
</html>
이미지 이름과 크기를 보여줄 수 JSP하지만
BlobRetrieval.jsp에 이미지를 볼 수 있어요
DisplayBlob.jsp
<%@ page import="java.sql.*"%>
<%@ page import="java.io.*"%>
<% Blob image = null;
java.sql.Connection con = null;
byte[ ] imgData = null ;
java.sql.Statement stmt = null;
java.sql.ResultSet rs = null;
try {
con = java.sql.DriverManager.getConnection("jdbc:oracle:thin:@ip:port:sid","schemaName", "password");
stmt = con.createStatement();
rs = stmt.executeQuery("SELECT fileobj,fileName,fileSize FROM DISPLAYBLOB");
if (rs.next()) {
image = rs.getBlob(1);
imgData = image.getBytes(1,(int)image.length());
} else {
out.println("Display Blob Example");
out.println("image not found for given id>");
return;
}
// display the image
response.setContentType("image/gif");
OutputStream o = response.getOutputStream();
o.write(imgData);
o.flush();
o.close();
} catch (Exception e) {
out.println("Unable To Display image");
out.println("Image Display Error=" + e.getMessage());
return;
} finally {
try {
rs.close();
stmt.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
%>
struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name="struts2" extends="struts-default" namespace="/">
<action name="*Image" class="example.DisplayBlob" method="{1}">
<result name="input">BlobRetrieval.jsp</result>
</action>
</package>
<constant name="struts.action.excludePattern" value="/*.servlet"/>
</struts>
DisplayBlob.java
package example;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import java.util.Map;
public class DisplayBlob extends ActionSupport {
public String step() throws Exception
{
Map session = (Map)ActionContext.getContext().getSession();
session.clear();
System.out.print("[DisplayBlob] step ");
return "input";
}
public String step1() throws Exception
{
Map session = (Map)ActionContext.getContext().getSession();
System.out.print("[DisplayBlob] step1 ");
session.put("imageRetrieved", "imageRetrieved");
return "input";
}
}
우선 난 URL의 IP 액세스하고 포트/컨텍스트 루트/stepImage 을 난 BlobRetrieval로 제어를 전달하는 'DisplayBlob.java'의 단계 furntion를 호출하고,이 URL에 액세스하는 .jsp를 클릭 한 다음 'show images'버튼을 클릭하면 'Displayblob.java'의 step1 함수가 호출되어 다시 'BlobRetrieval.jsp'로 제어를 전달합니다. 이 시점에서 'imageRetrieved'값은 세션에서 설정되므로 제어는 if 루프에서 진행됩니다. if 루프에서 이미지 src 태그를 사용하여 이미지를 표시하고 있지만 다른 필드 '이미지 이름'및 '이미지 크기'를 표시 할 수 없습니다. db에 하나 이상의 이미지가 저장되면 어떻게 될까요? 그러면 내 코드는 어떻게 생겼을까요? imagename이 db에서 어떻게 생겨날 것인가를 생각할 수 없습니까? 어떤 이벤트 (사용자 invervaention)없이 내가 어떻게 모든 imageNames 이미지와 함께 표시한다.
처럼 Struts2 stream result 유형을 사용할 수 있습니다 이미지를 보여주는
! 나는 당신의 모든 제안을 돌봐 줄 것이다 ... "이미지를 보여주기 위해 각 이미지의 고유 한 ID를 저장할 수 있으며, 클릭하면 해당 ID를 액션에 전달할 수 있고 ID를 기반으로 이미지를 가져올 수 있습니다."클릭이없고, 그게 내 문제 야. 클릭하지 않고 어떻게 모든 이미지를 표시 할 수 있습니다 ... 하나 soltion 먼저 모든 imageName retieve 및 ArrayList .... 저장된 다음이 레이 목록을 반복하고 iterating 동안 각 imageName databaase 및 blob 검색 다시 데이터베이스에 액세스) ... 나는 struts2의 스트림 결과를 이해할 수 없다. – user752590
@ user752590 구체적으로 무엇이 필요합니까? [stream result docs] (http://struts.apache.org/2.x/docs/stream-result.html)에는 설정이 표시됩니다. 쇼케이스 애플리케이션의 예제는'struts-filedownload' 부분에 있습니다. –