【问题标题】:How to display image(bolb type) in jsp page from mySql DB in Struts 2 using Hibernate如何使用 Hibernate 在 Struts 2 中的 mySql DB 的 jsp 页面中显示图像(blob 类型)
【发布时间】:2012-04-27 05:14:26
【问题描述】:

我面临一个问题,如何使用 Hibernate 在 Struts 2 中的 mySql DB 中在 jsp 页面中显示图像(bolb 类型)?请分享您的观点。提前致谢。

    public byte[] getrepImagechange2(int loginid) {

    Criteria criteria = null;
    byte[] repCurrentImage = null;

    try {
        session = sessionFactory.openSession();
        criteria = session.createCriteria(Membersdetails.class).add(Expression.eq("logintable.loginId", loginid));
        List list = criteria.list();
        Iterator itr = list.iterator();
        if (itr.hasNext()) {

            Membersdetails get = (Membersdetails) itr.next();
            repCurrentImage = get.getRepPicture();

            HttpServletResponse response23 = ServletActionContext.getResponse();
            response23.setContentType("image/jpg");
            OutputStream out = response23.getOutputStream();
            out.write(repCurrentImage);
            out.close();

        }
    } catch (Exception e) {
        System.out.println("Exception in getrepImage() :" + e);
    } finally {
        try {

            session.flush();
            session.close();
        } catch (Exception e) {
            System.out.println("Exception in getrepImage resource closing  :" + e);
        }
    }
    return repCurrentImage;
}
  And I am displaying this image in jsp page in a table cell using this code :                     
   <img src="<s:property value="bs"/>" 

【问题讨论】:

    标签: mysql hibernate struts2


    【解决方案1】:

    我使用以下内容从 JPA(Hibernate Backed)示例中渲染图像,使用 struts2-conventions-plugin,结果类型注释中的“流”就是视图的全部内容:

    package com.kenmcwilliams.photogallery.action.gallery;
    
    import com.kenmcwilliams.photogallery.orm.Picture;
    import com.kenmcwilliams.photogallery.orm.PictureDetails;
    import com.kenmcwilliams.photogallery.service.Gallery;
    import com.opensymphony.xwork2.ActionSupport;
    import java.io.ByteArrayInputStream;
    import java.io.InputStream;
    import org.apache.struts2.convention.annotation.Result;
    import org.springframework.beans.factory.annotation.Autowired;
    
    @Result(type = "stream", params = {
        "contentType", "${contentType}",
        "contentLength", "${contentLength}",
        "contentDisposition", "${contentDisposition}",
        "inputStream", "${inputName}",
        "bufferSize", "${bufferSize}",
        "allowCaching", "${allowCaching}"
    })
    public class Stream extends ActionSupport {
        @Autowired private Gallery gallery; 
        private String contentType = "text/plain";
        private int contentLength = 0;
        private String contentDisposition = "inline";
        private InputStream inputStream;
        public String inputName = "inputStream";//This should not be required
        private Integer bufferSize = 1024;
        private String allowCaching = "true";
        private Integer id = null;
    
        @Override
        public String execute() {
            if (id != null){
                //gallery.get
                PictureDetails details = gallery.getPictureDetails(id);
                Picture photo = details.getPictureId();
                this.contentType = details.getContentType();
                System.out.println("Content Type: " + contentType);
                ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(photo.getPicture());
                this.contentLength = photo.getPicture().length;
                System.out.println("Content Length: " + contentLength);
                this.inputStream = byteArrayInputStream;
            }else{
                return ERROR;
            }
            return SUCCESS;
        }
    
        /**
         * @return the contentType
         */
        public String getContentType() {
            return contentType;
        }
    
        /**
         * @param contentType the contentType to set
         */
        public void setContentType(String contentType) {
            this.contentType = contentType;
        }
    
        /**
         * @return the contentLength
         */
        public int getContentLength() {
            return contentLength;
        }
    
        /**
         * @param contentLength the contentLength to set
         */
        public void setContentLength(int contentLength) {
            this.contentLength = contentLength;
        }
    
        /**
         * @return the contentDisposition
         */
        public String getContentDisposition() {
            return contentDisposition;
        }
    
        /**
         * @param contentDisposition the contentDisposition to set
         */
        public void setContentDisposition(String contentDisposition) {
            this.contentDisposition = contentDisposition;
        }
    
        /**
         * @return the bufferSize
         */
        public int getBufferSize() {
            return bufferSize;
        }
    
        /**
         * @return the allowCaching
         */
        public String getAllowCaching() {
            return allowCaching;
        }
    
        /**
         * @param allowCaching the allowCaching to set
         */
        public void setAllowCaching(String allowCaching) {
            this.allowCaching = allowCaching;
        }
    
        /**
         * @return the inputStream
         */
        public InputStream getInputStream() {
            return inputStream;
        }
    
        /**
         * @param inputStream the inputStream to set
         */
        public void setInputStream(InputStream inputStream) {
            this.inputStream = inputStream;
        }
    
        /**
         * @return the id
         */
        public int getId() {
            return id;
        }
    
        /**
         * @param id the id to set
         */
        public void setId(int id) {
            this.id = id;
        }
    }
    

    您还询问了如何显示上述内容,以下是用于显示图片库的 JSP(因此该操作将为该 JSP 提供图像 id,上述操作将使用该图像 id 从数据库中获取图片和图库的标题)。

    如果我没记错的话,这个画廊会显示四张图片,其中包含显示所有图片所需的行数。

    <%@taglib prefix="s" uri="/struts-tags"%>
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>JSP Page</title>
        </head>
        <body>
            <h1><s:property value="photoGallery.name"/></h1>
            <table>
                <s:iterator begin="0" end="pictureDetails.size/4" var="row">
                    <tr>
                        <s:subset source="pictureDetails" start="4 * #row" count="4">
                            <s:iterator>
                                <s:url forceAddSchemeHostAndPort="true" namespace="/gallery" action="stream" var="streamURL">
                                    <s:param name="id" value="id"/>
                                </s:url>
                                <td>
                                    <s:a value="%{#streamURL}"><img width="200px" src="<s:property value="#streamURL"/>"/></s:a>
                                </td>
                            </s:iterator>
                        </s:subset>
                    </tr>
                </s:iterator>
            </table>
        </body>
    </html>
    

    在上面这行可能是这部分可能是你想要的:

    <img width="200px" src="<s:property value="#streamURL"/>"/>
    

    【讨论】:

    • 感谢您的回答,但我没有使用注释,我只是存储图像。但我无法在 JSP 页面上显示。
    • 我不使用 Hibernate,但如果您的操作中有带有图像的 ImputStream,我可以向您展示如何在页面上显示图像。
    • 我在我的动作类中使用上面的代码并在jsp中使用img标签来显示目的
    • 我从 2 个月开始就阻止了 stackoverfolw。谁能告诉我如何再次激活问题发布?请帮帮我......................再给我一次机会
    猜你喜欢
    • 2012-04-20
    • 2012-02-24
    • 2011-07-24
    • 2012-05-06
    • 2011-10-21
    • 1970-01-01
    • 2014-06-20
    • 2014-09-09
    • 1970-01-01
    相关资源
    最近更新 更多