通过Servlet 将服务器硬盘图片 展示到浏览器

来源:互联网 发布:山石网络待遇 编辑:程序博客网 时间:2024/06/02 16:44

上一篇是更改tomcat配置文件,访问磁盘下的多张图片,这次呢是访问磁盘中的一张图片;

在浏览器显示一张图片,使用标签

Java代码  收藏代码
  1. <img src="">  

 

img 元素向网页中嵌入一幅图像。
请注意,从技术上讲,<img> 标签并不会在网页中插入图像,而是从网页上链接图像。<img> 标签创建的是被引用图像的占位空间。
<img> 标签有两个必需的属性:src 属性 和 alt 属性。

 

HTML 与 XHTML 之间的差异
在 HTML 中,<img> 标签没有结束标签。
在 XHTML 中,<img> 标签必须被正确地关闭。
在 HTML 4.01 中,不推荐使用 image 元素的 "align"、"border"、"hspace" 以及 "vspace" 属性。
在 XHTML 1.0 Strict DTD 中,不支持 image 元素的 "align"、"border"、"hspace" 以及 "vspace" 属性。

 

SRC的路径有很多:

指向其他站点(比如 src="http://www.******.com/***.jpg")
指向站点内的文件(比如 src="/i/image.gif")

许多新手忽略了一点是,其实IMG只是告诉浏览器这里要现实图片,而浏览器通过路径去获得图片的数据流然后进行显示

简单来说,SRC其实就是浏览器走了一个请求,然后这个请求返回图片的数据流给浏览器而已

所以,SRC同样可以是请求,可以是Servlet也可以是Action,这里我们用Servlet来做一个简单示例

 

JSP页面:

Java代码  收藏代码
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%  
  3. String path = request.getContextPath();  
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  5. %>  
  6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  7. <html>  
  8.   <head>  
  9.     <base href="<%=basePath%>">  
  10.     <title>图片显示</title>  
  11.   </head>  
  12.   <body>  
  13.     <img src="<%=basePath %>servlet/ImageShowServlet">  
  14.   </body>  
  15. </html>  

 

Web.xml配置:

Java代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.5"   
  3.     xmlns="http://java.sun.com/xml/ns/javaee"   
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  6.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  7.   <servlet>  
  8.     <servlet-name>ImageShowServlet</servlet-name>  
  9.     <servlet-class>servlet.ImageShowServlet</servlet-class>  
  10.   </servlet>  
  11.   <servlet-mapping>  
  12.     <servlet-name>ImageShowServlet</servlet-name>  
  13.     <url-pattern>/servlet/ImageShowServlet</url-pattern>  
  14.   </servlet-mapping>  
  15.   <welcome-file-list>  
  16.     <welcome-file>index.jsp</welcome-file>  
  17.   </welcome-file-list>  
  18. </web-app>  

 

Servlet非常简单:

Java代码  收藏代码
  1. package servlet;  
  2.   
  3. import java.io.ByteArrayOutputStream;  
  4. import java.io.File;  
  5. import java.io.FileInputStream;  
  6. import java.io.IOException;  
  7. import java.io.InputStream;  
  8. import java.io.OutputStream;  
  9. import javax.servlet.ServletException;  
  10. import javax.servlet.http.HttpServlet;  
  11. import javax.servlet.http.HttpServletRequest;  
  12. import javax.servlet.http.HttpServletResponse;  
  13.   
  14. /** 
  15.  * @说明 该Servlet将本地硬盘的图片输入管道中 
  16.  * @author cuisuqiang 
  17.  * @version 1.0 
  18.  * @since 
  19.  */  
  20. @SuppressWarnings("serial")  
  21. public class ImageShowServlet extends HttpServlet {  
  22.   
  23.     @Override  
  24.     protected void service(HttpServletRequest request, HttpServletResponse response)  
  25.             throws ServletException, IOException {  
  26.         OutputStream os = response.getOutputStream();  
  27.         File file = new File("C:\\abc.jpg");  
  28.         FileInputStream fips = new FileInputStream(file);  
  29.         byte[] btImg = readStream(fips);  
  30.         os.write(btImg);  
  31.         os.flush();  
  32.     }  
  33.       
  34.     /** 
  35.      * 读取管道中的流数据 
  36.      */  
  37.     public byte[] readStream(InputStream inStream) {  
  38.         ByteArrayOutputStream bops = new ByteArrayOutputStream();  
  39.         int data = -1;  
  40.         try {  
  41.             while((data = inStream.read()) != -1){  
  42.                 bops.write(data);  
  43.             }  
  44.             return bops.toByteArray();  
  45.         }catch(Exception e){  
  46.             return null;  
  47.         }  
  48.     }  
  49. }  

 

就是获取本地硬盘的文件的字节流,然后写入到管道中而已!

 

请您到ITEYE网站看原创,谢谢!

http://cuisuqiang.iteye.com/ !

原创粉丝点击