0
oracleデータベースに格納された画像をJSPページに表示しようとしました。画像はBLOB
のデータとして保存されます。ここで画像URLの代わりにjspページに画像を表示
<%@page import="utils.MyUtils"%>
<%@ page import="java.sql.*" %>
<%@ page import="java.io.*" %>
<%
Connection con = MyUtils.getStoredConnection(request);
String strSQL = "SELECT IMAGE "
+ "FROM CUSTOMER "
+ "WHERE CUST_ID= 113";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(strSQL);
rs.next();
response.setHeader("expires", "0");
response.setContentType("jpeg");
out.clear();
OutputStream os = response.getOutputStream();
os.write(rs.getBytes("IMAGE"));
out.flush();
%>
がMyUtils
クラスである:ここで
package utils;
import beans.CreateAcc;
import java.sql.Connection;
import javax.servlet.ServletRequest;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import beans.UserAccount;
public class MyUtils {
public static final String ATT_NAME_CONNECTION = "ATTRIBUTE_FOR_CONNECTION";
private static final String ATT_NAME_USER_NAME = "ATTRIBUTE_FOR_STORE_USER_NAME_IN_COOKIE";
// Store Connection in request attribute.
// (Information stored only exist during requests)
public static void storeConnection(ServletRequest request, Connection conn) {
request.setAttribute(ATT_NAME_CONNECTION, conn);
}
// Get the Connection object has been stored in attribute of the request.
public static Connection getStoredConnection(ServletRequest request) {
Connection conn = (Connection) request.getAttribute(ATT_NAME_CONNECTION);
return conn;
}
// Store user info in Session.
public static void storeLoginedUser(HttpSession session, UserAccount loginedUser) {
// On the JSP can access via ${loginedUser}
session.setAttribute("loginedUser", loginedUser);
}
// Get the user information stored in the session.
public static UserAccount getLoginedUser(HttpSession session) {
UserAccount loginedUser = (UserAccount) session.getAttribute("loginedUser");
return loginedUser;
}
}
しかし、私は自分のコードを実行すると、それだけでするのではなく、自分のPCに保存された画像のURLパスを表示します画像。
どうすればよいですか?
これを行わないでください。このアプローチは、ウェブブラウザに画像をキャッシュする機会を与えないので、非常に非効率的である。これはせいぜいアップロードされた画像の "プレビュー"機能に使用されるべきであり、確かに永続的な画像ではない。 – BalusC
@BalusCベース64でエンコードされた画像はキャッシュされないことを理解しています。しかし、問題は(彼が提供したクエリに基づいて)単一のイメージを取得するためのものだったので、私はこの答えを提供しました。質問がスライドショーなどのものだった場合、私はこの回答を投稿していないでしょう。 – Rohit