技术说明:
利用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);
}
}
这样在刷新图片时就不会出现图片显示不流畅的问题了!
说明:如果还有搞不清楚的地方可以私信博主哟,关注博主不迷路!!!