精华帖 (0) :: 良好帖 (1) :: 新手帖 (1) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-12-05
其实这个实例非常简单,但是今天有人问我了,而且我也写了个小例子,就顺便发上来吧!
在浏览器显示一张图片,使用标签 <img src="">
img 元素向网页中嵌入一幅图像。
HTML 与 XHTML 之间的差异
SRC的路径有很多: 指向其他站点(比如 src="http://www.******.com/***.jpg") 许多新手忽略了一点是,其实IMG只是告诉浏览器这里要现实图片,而浏览器通过路径去获得图片的数据流然后进行显示 简单来说,SRC其实就是浏览器走了一个请求,然后这个请求返回图片的数据流给浏览器而已 所以,SRC同样可以是请求,可以是Servlet也可以是Action,这里我们用Servlet来做一个简单示例
JSP页面: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>图片显示</title> </head> <body> <img src="<%=basePath %>servlet/ImageShowServlet"> </body> </html>
Web.xml配置: <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <servlet> <servlet-name>ImageShowServlet</servlet-name> <servlet-class>servlet.ImageShowServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ImageShowServlet</servlet-name> <url-pattern>/servlet/ImageShowServlet</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
Servlet非常简单: package servlet; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * @说明 该Servlet将本地硬盘的图片输入管道中 * @author cuisuqiang * @version 1.0 * @since */ @SuppressWarnings("serial") public class ImageShowServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { OutputStream os = response.getOutputStream(); File file = new File("C:\\abc.jpg"); FileInputStream fips = new FileInputStream(file); byte[] btImg = readStream(fips); os.write(btImg); os.flush(); } /** * 读取管道中的流数据 */ public byte[] readStream(InputStream inStream) { ByteArrayOutputStream bops = new ByteArrayOutputStream(); int data = -1; try { while((data = inStream.read()) != -1){ bops.write(data); } return bops.toByteArray(); }catch(Exception e){ return null; } } }
就是获取本地硬盘的文件的字节流,然后写入到管道中而已!
请您到ITEYE网站看原创,谢谢! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-12-06
这不就是生成验证码的时候常用的
|
|
返回顶楼 | |
发表时间:2012-12-06
你这样好复杂啊………………
|
|
返回顶楼 | |
发表时间:2012-12-07
GoodWell 写道 你这样好复杂啊………………
他是这样的,如果你把图片放到webroot下,那么用户上传的图片每次都要重新搞了! 一些网站上的图片,其实都是放在专门的网站上的! 而且,我这纯属技术性的发表一下!实际中可能很少用到的! |
|
返回顶楼 | |
发表时间:2012-12-07
1 你的stream不用关闭的么?
2 看你是全部读取到btImg中,然后再一次性写入。为什么不边读边写? |
|
返回顶楼 | |
发表时间:2012-12-07
mfkvfn 写道 1 你的stream不用关闭的么?
2 看你是全部读取到btImg中,然后再一次性写入。为什么不边读边写? 谢谢你的提醒和建议 |
|
返回顶楼 | |
发表时间:2012-12-07
除了验证码,我相信很少会这么做的
|
|
返回顶楼 | |
发表时间:2012-12-07
cuisuqiang 写道 GoodWell 写道 你这样好复杂啊………………
他是这样的,如果你把图片放到webroot下,那么用户上传的图片每次都要重新搞了! 一些网站上的图片,其实都是放在专门的网站上的! 而且,我这纯属技术性的发表一下!实际中可能很少用到的! lz整的有点复杂,而且性能和安全上会有很大的问题 一般情况下。就把所上传的图片,放到一个专用的目录。然后用nginx做proxy server。 库里面只保存路径就行了,所有页面图片请求,都从nginx服务拿。 |
|
返回顶楼 | |
发表时间:2012-12-17
推荐楼主用这个方法:
org.springframework.util.FileCopyUtils.copy(InputStream in, OutputStream out) throws IOException |
|
返回顶楼 | |
发表时间:2012-12-18
suyulin6688 写道 推荐楼主用这个方法:
org.springframework.util.FileCopyUtils.copy(InputStream in, OutputStream out) throws IOException 虽然引用外包了,不亏为一个好方法,谢谢! |
|
返回顶楼 | |