博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
response小结(三)—输出随机图片(验证码功能实现)
阅读量:6984 次
发布时间:2019-06-27

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

    本文是一个很简单的向网页上输出验证码的实现喲!通过注释解释清楚了每一步!

Myeclipse下的Package Explorer显示文件结构如下:

   ResponseDemo.java实现了输出随机图片的功能:

1 package com.yyz.response; 2  3 import java.awt.Color; 4 import java.awt.Font; 5 import java.awt.Graphics; 6 import java.awt.image.BufferedImage; 7 import java.io.IOException; 8 import java.util.Random; 9 10 import javax.imageio.ImageIO;11 import javax.servlet.ServletException;12 import javax.servlet.http.HttpServlet;13 import javax.servlet.http.HttpServletRequest;14 import javax.servlet.http.HttpServletResponse;15 //输出随机图片16 public class ResponseDemo extends HttpServlet {17 18     public void doGet(HttpServletRequest request, HttpServletResponse response)19             throws ServletException, IOException {20         //6.设置头,控制浏览器不要缓存图片数据21         response.setHeader("Expires", "-1");22         response.setHeader("Cache-Control", "no-cache");23         response.setHeader("Pragma", "no-cache");24         25         //5.通知浏览器以图片方式打开26         response.setHeader("Content-type", "image/jpeg");27         //1.在内存中创建一副图片28         BufferedImage image = new BufferedImage(80,20,BufferedImage.TYPE_INT_RGB);29         //2.得到图片30         Graphics g = image.getGraphics();31         //修改图片背景色32         g.setColor(Color.WHITE);33         g.fillRect(0, 0,80, 20);34         //3.向图片上写数据35         g.setColor(Color.BLUE);36         g.setFont(new Font(null,Font.BOLD,20));37         g.drawString(nakeNum(), 0, 20);38         //随机画出9条干扰线39          Random rand = new Random();40         for(int i = 0;i<9;i++){41             g.setColor(Color.BLACK);42             int x1 = rand.nextInt(80);43             int y1 = rand.nextInt(20);44             int x2 = rand.nextInt(80);45             int y2 = rand.nextInt(20);46             g.drawLine(x1, y1, x2, y2);47         }48         //4.将图片写给浏览器49         ImageIO.write(image, "jpeg", response.getOutputStream());50         51 }52 53     private String nakeNum() {54        Random r = new Random();55        String num = r.nextInt(9999999)+"";//产生0-9999999的数字,但有可能不足7位,如12356        StringBuffer sb = new StringBuffer();57        for(int i = 0;i<7-num.length();i++){58            sb.append("0");59        }60        return sb.toString()+num;61     }62 63     public void doPost(HttpServletRequest request, HttpServletResponse response)64             throws ServletException, IOException {65            doGet(request,response);66     }67 }

register.html是一个简单的注册页面,通过img标签执行ResponseDemo.java:

1  2  3    4     register.html 5       
6
7
8 9 10
11 用户名:
12 密码:
13 认证码:
14
15
16 17

最后附上测试结果:

输出随机图片时,图片上若想要输出中文,可以用一个字符数组存储多个汉字(直接存汉字的编码也行),然后用Random产生的随机数做下标取出对应中文,再产生要写上图片的字符串即可。

 

 

 

 

    

 

转载于:https://www.cnblogs.com/yyz666/p/4047241.html

你可能感兴趣的文章
flask, SQLAlchemy, sqlite3 实现 RESTful API 的 todo list, 同时支持form操作
查看>>
[转载]AxureRP 7超强部件库下载
查看>>
fiddler https
查看>>
ASP.NET 2.0中合并 GridView 的表头单元格(转)
查看>>
Bboysoul&#39;s Vim使用指南
查看>>
专业的程序员需要具备的思考能力:写一个程序需要注意多少细节问题
查看>>
Android--使用SharedPreferences
查看>>
PXE 自动安装物理机 (DHCP服务由路由提供, 不能再配置)
查看>>
怪异的StackOverflowException异常
查看>>
JAVA操作数据库----- http://blog.sina.com.cn/andyfang
查看>>
使用Linq to Sql 创建数据库和表
查看>>
Java8-Executors-No.02
查看>>
Objective-C:在类中设置不同协议
查看>>
元数据
查看>>
Web Essentials之Browser Link
查看>>
js修改后没反应-看看是不是取的缓存
查看>>
05. Web大前端时代之:HTML5+CSS3入门系列~H5 多媒体系
查看>>
使用GhostDoc为代码生成注释文档
查看>>
Kettle的设计
查看>>
零代码如何打造自己的实时监控预警系统
查看>>