如何在Struts 2中从数据库中查看JSP页面中的多个图像?

问题描述 投票:0回答:2

我在尝试从数据库获取图像然后在 JSP 页面中显示它们时遇到问题:

ImageAction
:

public class ImageAction {

private  byte[] itemImage;

public byte[] getItemImage() {
    return itemImage;
}

public void setItemImage(byte[] itemImage) {
    this.itemImage = itemImage;
}

public  void  execute() throws Exception{
      try {
          HttpServletResponse response = ServletActionContext.getResponse();
          response.reset();
          response.setContentType("multipart/form-data"); 
          byte[] imgData =(byte[])ServletActionContext.getRequest().getSession()
                           .getAttribute("imageData"); 
          System.out.println("imgData :: "+imgData);
          itemImage = imgData;
          ServletActionContext.getRequest().getSession().removeAttribute("imageData") ; 
          OutputStream out = response.getOutputStream();
          out.write(itemImage);
          out.flush();
          out.close();

      } catch (Exception e) {
          System.out.println("error :: ");
          e.printStackTrace();
      }
   //   return "success";
  }
}

JSP:

<tr >
    <td> <%= map.get(mapKey) %> </td>
    <td colspan="1" >
        <img src="<s:url value="ImageAction" />" width="115" border="0" />
    </td>   
</tr>
java image jsp struts2
2个回答
1
投票

您在 JSP 页面上收到的内容将是原始的

byte[]
,您需要对其进行一些处理,请检查以下内容:

<a src="" id="imageSrc"/>

一个简单的

anchor
标签来显示图像。

以下代码会将原始

byte[]
转换为等效的 Base64 字符串,即对于显示图像至关重要。

<%
   byte data[]=request.getParameter(itemImage); //let itemImage for instance hold your data
   String encodedData=Base64.encodeBytes(data);
%>

现在您的 JSP 页面上需要一个小实用程序来设置 base64 数据

<script>
function imageBaseSixtyFourProcessor(baseSixtyFour){
    var img = new Image();
    img.src='';
        var imageUrl='data:image/gif;base64,'+baseSixtyFour;
        $('#imageSrc').attr('src',imageUrl);
        img.src = imageUrl;
    }
}
</script>

调用上面的函数:

<script>
  imageBaseSixtyFourProcessor(<%encodedData%>);
</script>

注意: 在我的例子中,我显示的是

GIF
文件,您可以根据您的要求更改它。

同样,您可以以相同的方式显示多个图像。


0
投票

明显的用法是将图像数据移动到某个集合,即

Map
。该操作应该注意用于从地图检索图像数据的
mapKey

<s:iterator value="#session.imageDataMap">
  <img src="<s:url value="ImageAction"><s:param name="mapKey" value="%{key}"/></s:url>" width="115" border="0" /> 
</s:iterator>

如果你从session中获取数据,那么你应该修改代码以使用集合。

...
Map<String, byte[]> imgDataMap =(Map<String, byte[]>)ActionContext.getContext().getSession().get("imageDataMap"); 
imageData = imgDataMap.get(mapKey);
System.out.println("imgData :: "+new Base64Encoder.encode(imgData));
itemImage = imgData;
...

在上面的示例中,使用 Struts 2 会话映射而不是 servlet 会话。

© www.soinside.com 2019 - 2024. All rights reserved.