servlet响应图片方法(保姆级教程!!!)

技术说明:

       利用servlet读取本地图片,然后把图片中的字节数据响应给客户端,客户端(浏览器)即可呈现出图片。读取本地图片需要用到Java输入流,响应给客户端需要用到Java输出流。

 

响应一个字节数据

       由于Java是根据响应字节数据,来读取图片的。我们首先可以测试响应一个字节数据具体代码如下:

@WebServlet("/imgC")    //相应字节数据

public class ImgC extends HttpServlet {

    @Override

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        ServletOutputStream os = resp.getOutputStream();    //Java输出流的知识
        os.write(97);

    }
}

分析 :

成功在Tomcat运行之后,可以在网页看到小写字母:a。这是因为程序把十进制的97根据ASCII码表转换成二进制的图形,即小写字母:a

 

响应本地的图片

由于一般的图片大小都是 100000+ 的子节,所以我们需要边读边写来加快读写速率。这是一种简单粗暴的读取图片的方法,具体实现代码可参照如下:

public class ImgUtil {
    public static void responseImg(HttpServletRequest req, HttpServletResponse resp) {
       

        try {
            //1.把图片数据读进来
            FileInputStream is = new FileInputStream("此处存放想要显示的图片全路径地址(绝对路径)");

            ServletOutputStream os = resp.getOutputStream();

            //2.循环,边读边写
            int a;
            while ((a=is.read())!=-1){
                os.write(a);
            }

            //3.关闭资源
            is.close();
            os.close();
        } catch (Exception e) {
           e.printStackTrace();
        }
    }
}

 

分析:

       为什么说它是一种简单粗暴的方法呢?当你在Tomcat运行该程序时,每次刷新图片总是从上到下铺展开来的,图片显示的不是特别的流畅。为了解决这个小问题,我们可以采用构建Java缓冲流的知识来加快读写速率,使其实现边读边写1000个字节的效果,这样可以解决每次刷新图片显示不流畅的发生。具体实现代码如下:

响应本地的图片 (plus版)

首先编写一个图片工具类 ImgUtil,里面封装具体实现的代码

public class ImgUtil {
    public static void responseImg(String imgPath, HttpServletResponse resp) {
        try {
            //1.把图片数据读进来
            FileInputStream is = new FileInputStream(imgPath);

            ServletOutputStream os = resp.getOutputStream();

            //构建缓冲流,提高读写效率
            BufferedInputStream bis = new BufferedInputStream(is);
            BufferedOutputStream bos = new BufferedOutputStream(os);
            byte[] bytes = new byte[1000];

            //2.循环,边读边写
            while (bis.read(bytes) != -1) {
                bos.write(bytes);
            }

            //3.关闭资源
            bos.flush();
            bos.close();
            bis.close();
            is.close();
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

然后编写一个servlet,调用上面写好的图片工具类中的方法   responseImg(),并且传入想要显示图片的路径地址:

@WebServlet("/imgC")    //相应字节数据

public class ImgC extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        ImgUtil.responseImg("此处存放想要显示的图片全路径地址(绝对路径)",resp);
        
    }
}

 这样在刷新图片时就不会出现图片显示不流畅的问题了!

 

说明:如果还有搞不清楚的地方可以私信博主哟,关注博主不迷路!!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值