0

保存BLOBした画像を表示できません。mysql私は豆を持っています、jsp。3重層アーキテクチャを採用しているのですが、全ての商品を画像付きで表示したいです。

アクセサーで:

 try {
        Connection cn = getVla().getConnection();
        String sql = "SELECT * FROM products";
        PreparedStatement pst = cn.prepareStatement(sql);
        ResultSet rs = pst.executeQuery();
        ArrayList<products> ls = new ArrayList<products>();
        while(rs.next()) {
            products s = new products();
            s.setPk(rs.getLong("pk"));
            s.setName(rs.getString("name"));
            s.setPrice(rs.getDouble("price"));
            s.setPic(rs.getBlob("pic"));
            s.setComments(rs.getString("comments"));
            ls.add(s);
        }
        return ls;
    }

製品内:

 public Blob getPic() {
        return pic;
    }

main.jsp 内

<%=
List<products> product = bean.getproducts();

%>
<h1>Product: </h1>
<%  
for(products c : product) { 
%>
From <%= c.getName()%> <br/>
<%= c.getPic()%></b><br/>
<b><%= c.getPrice()%> </b><br/>
<%= c.getComments()%>
<hr/>
<%
}
%>

どうすれば画像を表示できますか? (現在、com.mysql.jdbc.Blob@2e5f6a64 が表示されています)

4

2 に答える 2

4

あなたが見ているのは の結果ですBlob.toString()。これはバイナリ コンテンツであるため、JVM は適切な表現を実際に把握することはできません。

すべきことはBlob、データベースからのみを取得し、そのコンテンツを にストリーミングする別のサーブレットを作成することresponse.getOutputStream()です。JSP で、-attribute が記述した を指す<img>タグを追加します。srcServlet

一度に 1 つの製品のServlet画像を読み取る必要があるため、クエリは少し異なります。

String sql = "SELECT pic FROM products where pk = " + pk;

pk何らかのリクエスト パラメータを使用して、この変数を指定する必要があることに注意してください。上記のコード行は、アイデアを示すための単なる例です。リクエスト URL を文字通り SQL クエリにコピーするのは非常に安全ではありません。詳細については、「SQL インジェクション」を Google で検索してください。

を使用すると、コンテンツをコピーしてブラウザに書き戻すことBlob.getInputStream()ができる を取得できます。その応答に適切な値を設定することを忘れないでください。たとえば、JPEG 画像の場合は「image/jpg」です。InputStreamresponse.getOutputStream()content-type

于 2013-04-05T11:55:43.757 に答える
0

mthmulders が言ったように、あなたが見ているのは Blob.toString() の値です。

BalusC は、サーブレットを介してデータベース BLOB から復元された画像の提供に関する 2 つの優れた記事を以前に投稿しました。

http://balusc.blogspot.fr/2007/04/imageservlet.html

そして、GZIPと履歴書処理を備えたより最近のもの

http://balusc.blogspot.fr/2009/02/fileservlet-supporting-resume-and.html

于 2013-04-05T12:04:48.627 に答える