博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过Servlet 将服务器硬盘图片 展示到浏览器
阅读量:6981 次
发布时间:2019-06-27

本文共 6036 字,大约阅读时间需要 20 分钟。

其实这个实例非常简单.

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

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+"/";%>          图片显示          

Web.xml配置:

ImageShowServlet
servlet.ImageShowServlet
ImageShowServlet
/servlet/ImageShowServlet
index.jsp

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;        }    }}

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

 

用以下代码生成验证码:

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) {        }    }}

 

 

 

 

 

 

 

 

 

转载地址:http://ptvpl.baihongyu.com/

你可能感兴趣的文章
Moose File System分布文件系统测试
查看>>
mysql 高可用方案漫谈(二)
查看>>
Java中断机制
查看>>
JS笔记(20): JS中的同步编程和异步编程
查看>>
那几个题(没懂的地方留言)
查看>>
如何改变UITableViewCell的选中样式(颜色)?storyboard上cell的selection不可用?
查看>>
Ubuntu 怎么增加根目录 大小
查看>>
Spring Cloud微服务分布式云架构—集成项目简介
查看>>
盒马鲜生颠覆传统生鲜市场的胜算几何?
查看>>
【Node】常用基础 API 整理
查看>>
传神成进博会唯一指定智能翻译硬件提供商 力助无障碍沟通
查看>>
微信小程序实现slideUp、slideDown滑动效果及点击空白隐藏功能示例
查看>>
Java程序员须知:分布式微服务为什么很难?
查看>>
SQLServer之创建唯一聚集索引
查看>>
好程序员web前端技术之CSS3过渡
查看>>
java B2B2C源码电子商务平台 - Zuul回退机制
查看>>
记录Docker in Docker 安装(CentOS7)
查看>>
简单的写一个发布订阅器
查看>>
重学前端-js的类型问题
查看>>
Function类型
查看>>