java--有关前台展示图片流的用法

原文 http://blog.csdn.net/gaopeng0071/article/details/19926091

需求:前台展示图片,之前系统是从服务器磁盘路径中读取,当图片数量多的时候,由于读写操作耗时,就会导致页面出现卡的感觉。

解决方案:使用缓存技术,在第一次浏览过图片之后,将图片的byte[]流缓存到MAP中,下次在访问的时候直接缓存获取就可以。

样例代码:

jsp调用方式如下:

<img id="showImg" src="loadImage.action?picName=${pList }" width="110px" height="75px" />

在src中写入要跳转的地址,我这里用的是struts2

后台类的写法:

public void loadImage() throws Exception {
    ActionContext context = ActionContext.getContext();
    HttpServletResponse imgResponse = (HttpServletResponse) context
        .get(ServletActionContext.HTTP_RESPONSE);
    HttpServletRequest imgRequest = (HttpServletRequest) context
        .get(ServletActionContext.HTTP_REQUEST);

    String picName = imgRequest.getParameter("picName");
    String[] picNames = picName.split("/");
    String url = Constant.HDFS_PREFIX + Constant.HDFS_AD_PREFIX
        + picNames[picNames.length - 1];
    // 根据URL获取图片流
    byte[] picStream = ImgUtil.AD_PIC_MAP.get(url);
    InputStream in = new ByteArrayInputStream(picStream);
    BufferedOutputStream bout = new BufferedOutputStream(
        imgResponse.getOutputStream());
    try {
      byte b[] = new byte[1024];
      int len = in.read(b);
      while (len > 0) {
        bout.write(b, 0, len);
        len = in.read(b);
      }
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      bout.close();
      in.close();
    }
  }

此处需要将byte[]流写入respose中,这样在前台页面就可以展示图片了。

以上是我工程的代码,可参照改成自己的项目。

参考网址: http://www.blogjava.net/focusJ/archive/2011/04/30/367243.html

时间: 2024-10-08 05:50:17

java--有关前台展示图片流的用法的相关文章

[JAVA]Socket 图片流的传输

import java.io.DataInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) { System.out.

Java操作mongoDB2.6的常见API用法

对于mongoDB而言,学习方式和学习关系型数据库差不太多 开始都是学习如何insert.find.update.remove,然后就是分页.排序.索引,再接着就是主从复制.副本集.分片等等 最后就是通过它提供的各个驱动(比如Java.PHP.node.js等等)来练习所谓的高级用法 另外:相对于Oracle有PLSQL Developer,MySQL有HeidiSQL mongoDB也不例外,它的图形化工具中有一款叫做mongoVUE的,我用的是1.5.3破解版(不是每15天就得改一次注册表的

java+js实现展示本地文件夹下的所有图片demo

java+js实现展示本地文件夹下的所有图片demo 最近项目遇到需要实现前端通过一个按钮点击事件,弹窗浏览本地文件夹下的所有图片: 思路: - 获取到所需展示图片的本地文件夹内所有图片的文件绝对路径名称(路径+图片名称.格式名称) - 由于图片过大,对图片进行按比例压缩再展示 - 在前端展示图片 - (前端各式各样的展示--) 第一步:获取本地文件夹中的所有图片路径 java代码: package com.giscafer.common; import java.io.File; import

java工程开发之图形化界面之(第三课)

上面我们讲述了通过JOptionPane进行文本I/O操作,一个是通过JOptionPane来获取的 参考链接:http://blog.sina.com.cn/s/blog_993d254201013pgh.html#cmt_3339216 JOptionPane类 1.属于javax.swing 包. 2.功能:定制四种不同种类的标准对话框. ConfirmDialog 确认对话框.提出问题,然后由用户自己来确认(按"Yes"或"No"按钮) InputDialo

opencv中的图片流保存

做图片流处理的时候总是保存不对, 图片如下 用如下代码保存,其中Arr是byte数组 //IplImage *img = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, Channels); //IplImage *img = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 3); //cvZero(img); //img->imageData =(char*) Arr; //img->

java中import、package作用和用法

  有些人写了一阵子 Java,可是对於 Java 的 package 跟 import 还是不 太了解很多人以為原始码 .java 档案中的 import 会让编译器把所 import 的程式通通写到编译好的 .class 档案中,或是认為 import 跟 C/C++ 的 #include 相似,实际上,这是错误的观念. 让我们先了解一下,Java 的 package 到底有何用处. 其实,package 名称就像是我们的姓,而 class 名称就像是我们的名字 .package 名称有很多

图片流Base64编码 转图片

using System; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Web; namespace OnlinePhotoCapture {     /// <summary>     /// 将图片base64字符串原还原为图片并调整尺寸后保存(by 菩提树下的杨过http://yjmyzz.cnblogs.com/)       /// </summary>

Java里String.split需要注意的用法

我们常常用String的split()方法去分割字符串,有两个地方值得注意: 1. 当分隔符是句号时("."),需要转义: 由于String.split是基于正则表达式来分割字符串,而句号在正则表达式里表示任意字符. //Wrong: //String[] words = tmp.split("."); //Correct: String[] words = tmp.split("\\."); 所以,假设分隔符在正则表达式里有一定的意义时,需要格

Java反射机制浅析图+应用实例

Java反射机制浅析图+应用实例 --转载请注明出处:coder-pig 本节引言: 其实很久之前就想归纳一下Java中的这个反射机制了,前些天看了慕课网一个讲反射机制的 视频教程觉得不错,又复习了一下,今天面试了一下午,回来就不想写代码了,就写写关于Java 反射的总结,写些简单的使用例子,最后找了2个Android中反射机制应用的例子,分别是 旧版本SDK利用AIDL + Java反射机制接听与挂断电话以及利用反射机制通过按钮关闭 对话框,后续如果用到会另外总结~ 本节正文: 1.反射的相关