要件:jspページに画像(imageName,imagesize,image)の詳細を表示したい。画像は、オブジェクト タイプ blob でデータベースに保存されます。データベース テーブルの列は、imageName(varchar2)、imageSize(number)、image(blob) です。Jspの「画像を表示」にボタンがあります。これをクリックすると、データベーステーブル内のすべての画像を、画像名と画像サイズを表形式で表示する必要があります。要約:画像の表示をクリックすると、データベースに保存されている画像名を持つすべての画像を表示する必要があります。
テクノロジー: struts2、jsp、jdbc
私がやったこと:jspで画像を見ることはできますが、画像の名前とサイズを表示することはできません
BlobRetrieval.jsp
<%@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>
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:port/contextRoot/stepImage にアクセスしています。この URL にアクセスすると、制御を BlobRetrieval.jsp に転送する「DisplayBlob.java」のステップ ファーンションを呼び出します。次に、「画像を表示」ボタンをクリックすると、step1 の関数を呼び出します。 「BlobRetrieval.jsp」に制御を再び転送している「Displayblob.java」の。この時点で「imageRetrieved」値がセッションに設定されているため、制御は if ループに入ります。if ループで、画像 src タグを使用して画像を表示していますが、他のフィールド「画像名」と「画像サイズ」を表示できません。db に複数の画像が保存されている場合はどうなりますか。次に、私のコードはどのように見えるでしょうか? imagename が db からどのように取得されるかを考えることができませんか? イベント(ユーザーの介入)なしで、すべてのimageNamesを画像とともに表示する方法。