`
cuisuqiang
  • 浏览: 3962656 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
3feb66c0-2fb6-35ff-968a-5f5ec10ada43
Java研发技术指南
浏览量:3672037
社区版块
存档分类
最新评论

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

    博客分类:
  • J2EE
阅读更多

其实这个实例非常简单,但是今天有人问我了,而且我也写了个小例子,就顺便发上来吧!

 

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

<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页面:

<%@ 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网站看原创,谢谢!

http://cuisuqiang.iteye.com/ !

自建博客地址:http://www.javacui.com/ ,内容与ITEYE同步!

分享到:
评论
6 楼 hugh.wang 2013-04-17  
文件流需要关闭吗
5 楼 宋建勇 2012-12-21  
4 楼 122829827 2012-12-15  
学习了,楼主加油
3 楼 cuisuqiang 2012-12-06  
pengyan5945 写道
验证码不就这么干的吗?只是验证码是生成一张图片,最后servlet都是流的形式返回!

是的
2 楼 cuisuqiang 2012-12-06  
用以下代码生成验证码
package com.nms.servlet;

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.*;
import javax.servlet.http.*;

/**
 * @说明 向客户端输出验证码
 * @author cuisuqiang
 * @version 1.0
 * @since
 */
@SuppressWarnings("serial")
public class ValidationCode extends HttpServlet {
	// 图形验证码的字符集合,系统将随机从这个字符串中选择一些字符作为验证码
	private static String codeChars = "%#23456789abcdefghkmnpqrstuvwxyzABCDEFGHKLMNPQRSTUVWXYZ";

	// 返回一个随机颜色(Color对象)
	private static Color getRandomColor(int minColor, int maxColor) {
		Random random = new Random();
		// 保存minColor最大不会超过255
		if (minColor > 255)
			minColor = 255;
		// 保存minColor最大不会超过255
		if (maxColor > 255)
			maxColor = 255;
		// 获得红色的随机颜色值
		int red = minColor + random.nextInt(maxColor - minColor);
		// 获得绿色的随机颜色值
		int green = minColor + random.nextInt(maxColor - minColor);
		// 获得蓝色的随机颜色值
		int blue = minColor + random.nextInt(maxColor - minColor);
		return new Color(red, green, blue);
	}

	@Override
	protected void service(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		try {
			// 获得验证码集合的长度
			int charsLength = codeChars.length();
			// 下面三条记录是关闭客户端浏览器的缓冲区
			// 这三条语句都可以关闭浏览器的缓冲区,但是由于浏览器的版本不同,对这三条语句的支持也不同
			// 因此,为了保险起见,建议同时使用这三条语句来关闭浏览器的缓冲区
			response.setHeader("ragma", "No-cache");
			response.setHeader("Cache-Control", "no-cache");
			response.setDateHeader("Expires", 0);
			// 设置图形验证码的长和宽(图形的大小)
			int width = 90, height = 20;
			BufferedImage image = new BufferedImage(width, height,
					BufferedImage.TYPE_INT_RGB);
			Graphics g = image.getGraphics();// 获得用于输出文字的Graphics对象
			Random random = new Random();
			g.setColor(getRandomColor(180, 250));// 随机设置要填充的颜色
			g.fillRect(0, 0, width, height);// 填充图形背景
			// 设置初始字体
			g.setFont(new Font("Times New Roman", Font.ITALIC, height));
			g.setColor(getRandomColor(120, 180));// 随机设置字体颜色
			// 用于保存最后随机生成的验证码
			StringBuilder validationCode = new StringBuilder();
			// 验证码的随机字体
			String[] fontNames = { "Times New Roman", "Book antiqua", "Arial" };
			// 随机生成3个到5个验证码
			for (int i = 0; i < 3 + random.nextInt(3); i++) {
				// 随机设置当前验证码的字符的字体
				g.setFont(new Font(fontNames[random.nextInt(3)], Font.ITALIC,
						height));
				// 随机获得当前验证码的字符
				char codeChar = codeChars.charAt(random.nextInt(charsLength));
				validationCode.append(codeChar);
				// 随机设置当前验证码字符的颜色
				g.setColor(getRandomColor(10, 100));
				// 在图形上输出验证码字符,x和y都是随机生成的
				g.drawString(String.valueOf(codeChar), 16 * i
						+ random.nextInt(7), height - random.nextInt(6));
			}
			// 获得HttpSession对象
			HttpSession session = request.getSession();
			session.setMaxInactiveInterval(5 * 60); // 设置session对象5分钟失效
			// 将验证码保存在session对象中,key为validation_code
			session.setAttribute("validation_code", validationCode.toString());
			g.dispose();// 关闭Graphics对象
			OutputStream os = response.getOutputStream();
			ImageIO.write(image, "JPEG", os);// 以JPEG格式向客户端发送图形验证码
		} catch (Exception e) {
		}
	}
}
1 楼 pengyan5945 2012-12-06  
验证码不就这么干的吗?只是验证码是生成一张图片,最后servlet都是流的形式返回!

相关推荐

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

    在本文中,我们将探讨如何在JSP页面中通过Servlet将服务器硬盘上的图片展示到浏览器上。这是一个相当实用的技术,可用于动态生成图片或从服务器存储中检索图片资源,并将其作为响应发送到用户浏览器。下面将分步骤...

    使用Servlet+jQuery实现读取本地硬盘图片

    【标题】"使用Servlet+jQuery实现读取本地硬盘图片"涉及的主要知识点是Web开发中的服务器端处理和客户端交互。在Web应用中,Servlet是Java语言用于处理HTTP请求的重要组件,而jQuery则是一种广泛使用的JavaScript库...

    jsp+servlet网络硬盘

    【jsp+servlet网络硬盘】是一种基于Java Web技术实现的在线存储系统,它允许用户通过Web浏览器上传、下载、管理自己的文件,类似于云盘服务。在这个系统中,JSP(JavaServer Pages)负责处理用户界面展示,而Servlet...

    用servlet将jsp文件内容转为html

    通过上述方法,我们可以有效地利用Servlet技术将JSP文件的内容转换为HTML格式,并将其保存到指定位置。这种方法不仅简化了文件转换的过程,还提高了系统的灵活性和可维护性。开发者可以根据实际需求调整输出文件的...

    JSP 开发之THE SERVLET NAME ALREADY EXISTS.解决方法

    The servlet name already exists.解决方法 当我们建立过同名的servlet文件,... 您可能感兴趣的文章:Java,JSP,Servlet获取当前工程路径(绝对路径)问题解析JSP中通过Servlet 将服务器硬盘图片并展示到浏览器Jsp+S

    java-servlet-api.doc

    Servlet通过HTTP将这个响应转发到客户端。 在功能上,Servlet与CGI、NSAPI有点类似,但是,与他们不同的是:Servlet具有平台无关性。 JavaServlet概论 Servlet与其他普通的server扩展机制有以下进步: 因为它采用了...

    SmartUploadservlet文件上传下载

    开发者可以通过创建一个Servlet,读取服务器上的文件并将其写入到HTTP响应流中,使客户端浏览器可以下载。 5. **注意事项** - 安全性:使用`SmartUpload`时,应考虑文件上传的安全性,避免用户上传恶意文件,例如...

    文件上传jsp,servlet编写

    5. 将文件内容写入服务器硬盘,通常会包括一个保存路径的判断和重命名策略,以防止文件覆盖或安全问题。 6. Servlet处理完成后,可以返回响应给JSP,告知用户文件上传的结果。 **关键知识点**: 1. **多部分/...

    wangeditor批量上传图片

    本项目重点在于实现WangEditor的图片批量上传功能,并通过结合jsp和servlet技术,确保图片在Tomcat服务器重启后仍然可访问,避免数据丢失。以下是对这个知识点的详细解释: 1. **WangEditor**: WangEditor是一款...

    jsp+servlet实现MP3乐园

    文件会被暂时保存在服务器的临时目录,然后根据业务需求,可能需要将其移动或复制到持久化存储中,比如云存储服务或本地硬盘的特定文件夹。 音乐下载功能则涉及流处理和HTTP响应设置。Servlet读取文件内容后,通过...

    验证码Servlet

    然后配置Tomcat服务器,将项目部署到服务器上,通过浏览器访问即可查看和测试验证码功能。 通过这个项目,你可以深入理解JSP/Servlet的生命周期,以及如何在它们之间传递数据。同时,也能了解到验证码在Web安全中的...

    servlet读取cookie代码

    - **Cookie**:Cookie是Web服务器发送给用户浏览器的一小段文本信息,浏览器会将Cookie保存在本地硬盘上,并在后续对该服务器发起请求时自动将Cookie信息发送回服务器端。Cookie主要用于记录用户的偏好设置或实现...

    FileUploadAndDown.servlet

    - 文件保存:Servlet接收到文件后,会选择一个目录保存文件,一般不在内存中存储,而是写入到服务器的硬盘上。需要考虑到文件命名、大小限制、文件类型安全等问题。 2. **文件下载** - `DownFileServlet`:文件...

    servlet入门宝典

    4. 部署Web应用:将Servlet类和其他相关资源打包到WAR文件,然后将WAR文件放入Tomcat的webapps目录下。 六、Servlet生命周期 Servlet的生命周期包括加载、初始化、服务、销毁四个阶段: 1. 加载:当Web应用启动或...

    java写的图片上传代码

    使用Java的File类和InputStream/OutputStream进行文件操作,将上传的图片写入到服务器的硬盘上。 数据库方面,通常我们会创建一个表来存储图片信息,如图片ID、文件名、上传时间、以及存储路径等。在图片保存成功后...

    实现pdf发送到客户端服务器

    输出流是将数据从程序输出到外部设备(如硬盘、网络或打印机)的过程,而输入流则是从外部设备读取数据到程序中。在传输文件时,我们会使用Socket或者HTTP协议,通过网络连接建立输入输出流来实现文件的传输。 1. *...

    Java Servlet模式的WebGIS性能优化研究 (1).pdf

    3. **使用tmpfs存储缓存图片**:tmpfs是一种基于内存的文件系统,读写速度远超硬盘,将缓存图片存储在tmpfs中,可快速响应客户端请求。 通过一系列实验,作者验证了上述优化方案的有效性,结果显示这些措施能够显著...

    网络硬盘程序

    下载功能允许用户将服务器上的文件获取到本地。servlet接收到下载请求后,定位到文件并设置合适的HTTP响应头(如Content-Type和Content-Disposition),然后将文件内容流式传输到客户端。相反,上传过程涉及解析...

    Servlet笔记4

    3. 获取Web应用在服务器硬盘上的部署目录路径。 4. 提供类似于Map的接口来存储和检索数据(setAttribute(), getAttribute(), removeAttribute())。 HTTP协议是互联网上应用最广泛的一种网络协议,它定义了客户端与...

    应用Servlet实现Cookie的读、写.doc

    Cookie是一种简单的文本文件,通常由服务器创建并发送到客户端浏览器,然后浏览器会将这个文件保存在本地硬盘上。当浏览器再次访问同一个网站时,它会把Cookie文件发回给服务器,这样服务器就可以根据这些信息识别出...

Global site tag (gtag.js) - Google Analytics