response小结(三)—输出随机图片(验证码功能实现)

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

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位,如123
56        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 <!DOCTYPE html>
 2 <html>
 3   <head>
 4     <title>register.html</title>
 5       <meta name="keywords" content="keyword1,keyword2,keyword3">
 6     <meta name="description" content="this is my page">
 7     <meta name="content-type" content="text/html; charset=UTF-8">
 8     </head>
 9   <body>
10 <form action="">
11     用户名:<input type="text" name="username">
12     密码:<input type="password" name="password">
13     认证码:<input type="text" name="checkcode"><img src="/day06/servlet/ResponseDemo">
14     <input type="submit " value="注册">   <br>
15  <br>
16   </body>
17 </html>

最后附上测试结果:

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

时间: 2024-10-06 22:27:09

response小结(三)—输出随机图片(验证码功能实现)的相关文章

response常见应用、response细节、输出随机图片、定时刷新网页

response常见应用 向客户端输出中文数据 分别以OutputStream和PrintWriter输出 多学一招:使用HTML语言里面的<meta>标签来控制浏览器行为 思考:用OutputStream输出1,为什么用户看到的不是1? 文件下载和中文文件的下载 输出随机图片 package com.hbsi.response; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java

servlet输出随机图片(验证码)

package com.baidu.web.servlet; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; import javax.imageio.ImageIO;

Java Web:使用Servlet生成网页随机图片验证码

最近在学习Java Web开发,做了一个生成网页随机图片验证码的例子,在此记录. 一.新建Servlet项目: 在MyEclipse中新建Servlet项目,一步步操作就OK,在此不再赘述.建好之后文件目录树如下图: 二.源代码实现: (1)java代码: package com.zdt.identity; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.

java web中图片验证码功能实现

用户在注册网站信息的时候基本上都要数据验证码验证.那么图片验证码功能该如何实现呢? 大概步骤是: 1.在内存中创建缓存图片 2.设置背景色 3.画边框 4.写字母 5.绘制干扰信息 6.图片输出 废话不多说,直接上代码 package com.lsgjzhuwei.servlet.response; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.Buffer

使用response输出随机图片

本项目主要针对于JavaWeb中使用response对象的方法生成一个随机图片,在客户端进行表单注册时,需要正确输入随机图片中的汉字. 生成随机图片的类为: import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOException; import

随机图片验证码的生成

Python生成随机验证码,需要使用PIL模块. 安装: 1 pip3 install pillow 基本使用 1. 创建图片 1 2 3 4 5 6 7 8 9 from PIL import Image img = Image.new(mode='RGB', size=(120, 30), color=(255, 255, 255))   # 在图片查看器中打开 # img.show()   # 保存在本地 with open('code.png','wb') as f:     img.s

【Spring】基于SpringMVC的图片验证码功能实现

后台实现代码: ImgController.java 文件 package cn.shop.controller; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.HashMap; import java.util.Map; import j

图片验证码功能实现

自定义图片验证类 import os import time import random from PIL import Image, ImageDraw, ImageFont class Captcha(object): def __init__(self, request): """ 初始化,设置各种属性 """ self.django_request = request self.session_key = "_django_ca

PHP实现随机生成验证码功能

验证码在表单实现越来越多了,但是用js的写的验证码,总觉得不方便,所以学习了下php实现的验证码验证码在表单实现越来越多了,但是用js的写的验证码,总觉得不方便,所以学习了下php实现的验证码.当然,也可以封装成一个函数,以后使用的时候也是很方便的,但是现在未封装.本人菜鸟一只,大佬勿喷,也希望得到大佬的意见 现在说说简单的数字验证吧 建议各位按照代码注释一步一步来,改少的分号不能少.新建一个cap_sz.php文件: <?php session_start(); //设置session,一定要