1.jsp页面显示验证码,src跳转到Controller里的:getImg_validate,reloadImg()作用是点击验证码就会换一张(重新请求getImg_validate)

<ul>
<li >验证码: </li>
<li >
<img id="img_validate" src="<%=basePath%>image/getImg_validate" onclick="reloadImg()">
<input type="text" name="yanzhengma" id="yanzhengma" placeholder="请输入验证码"/>
</li>
</ul> <script type="text/javascript"> function reloadImg() { document.getElementById("img_validate").src="<%=basePath%>image/getImg_validate";
} </script>

2.写一个ImageUtil工具类,在里面可以自定义图片生成的大小,字体大小,背景色,验证码个数,干扰线条条数等等

package com.svse.house.util;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.Random; public class ImageUtil { //1.定义变量保存生成后的验证码字符串
static String code = ""; //2.生成验证码
public static String createcode() {
code = "";
String a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";//随机生成的字符范围(0-9,a-z,A-Z) //生成验证码的位数(这里是4位)
for (int i = 0; i < 4; i++) {
int index = (int) (Math.random() * 62);//会产生一个[0,62)的数,不包含小数
char b = a.charAt(index);
code = code + b;
}
return code;
} //查看已经生成的验证码
public static String getCode() {
return code;
} //3.生成图片
public static BufferedImage createimage() {
// 前2个参数为:width, height.后面是图像类型
//创建一个不带透明色的BufferedImage对象,TYPE_INT_ARGB为带透明色
BufferedImage bi = new BufferedImage(130,50, BufferedImage.TYPE_INT_RGB); //1.得到一个画布
Graphics g = bi.getGraphics();
//2.添加背景颜色
g.setColor(Color.WHITE);
g.fillRect(0, 0, 130, 50); //3.添加干扰线
for (int i = 0; i < 10; i++) {
Random r = new Random();
int red = r.nextInt(256);
int green = r.nextInt(256);
int blue = r.nextInt(256);
Color c = new Color(red, green, blue);
g.setColor(c);
int x1 = r.nextInt(131);
int y1 = r.nextInt(51);
int x2 = r.nextInt(131);
int y2 = r.nextInt(51);
g.drawLine(x1,y1,x2,y2);//画线
//g.drawOval(x1, y1, x2, y2);//画曲线
} //3.添加文字
g.setColor(Color.BLACK);
g.setFont(new Font("宋体", Font.BOLD, 50)); String str = getCode();
//4.将文字填充到画板中
g.drawString(str, 15, 40); //5.关闭画布
g.dispose();
return bi;
} }

3.在controller层调用getImg_validate,试用过jpeg和bmp格式的setContentType,都可以

package com.svse.house.controller;

import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException; import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import com.svse.house.util.ImageUtil; @Controller
@RequestMapping("/image")
public class ImageController {
@RequestMapping("/getImg_validate")
public void yanzheng(HttpServletResponse response){
try {
ImageUtil.createcode();
BufferedImage image = ImageUtil.createimage();
//以流的方式返回给客户端
response.setContentType("image/jpeg");
//response.setContentType("image/bmp");
ByteArrayOutputStream bt = new ByteArrayOutputStream();
//将图片转换成字节流
ImageIO.write(image,"jpeg",bt);
//ImageIO.write(image,"bmp",bt);
//得到输出流,返回客户端
ServletOutputStream outputStream = response.getOutputStream();
outputStream.write(bt.toByteArray());
} catch (IOException e) {
e.printStackTrace();
}
}
}

4.最后的验证

当时一直想在前台获取随机生成的四位数验证码来和自己输入的进行比较,可以通过session来获取但如果刷新验证码session里的值不会改变除非刷新整个页面。

后来想想真傻,直接在后台比较不就好了吗。

Java代码生成图片验证码的更多相关文章

  1. 用Java实现生成图片验证码

    通过代码实现生成一个随机验证码图片,且生成后自动打开: package day_12_17; import javax.imageio.ImageIO; import java.awt.*; impo ...

  2. java的动态验证码单线设计

    1.java的动态验证码我这里将介绍两种方法: 一:根据java本身提供的一种验证码的写法,这种呢只限于大家了解就可以了,因为java自带的模式编写的在实际开发中是没有意义的,所以只供学习一下就可以了 ...

  3. SpringBoot使用谷歌方式生成图片验证码

    1.新建一个springboot的项目 2.导入坐标 <dependency> <groupId>com.github.penggle</groupId> < ...

  4. PHP生成图片验证码demo【OOP面向对象版本】

    下面是我今天下午用PHP写的一个生成图片验证码demo,仅供参考. 这个demo总共分为4个文件,具体代码如下: 1.code.html中的代码: <!doctype html> < ...

  5. Myeclipse中把java代码导成UML类图

    Myeclipse中把java代码导成UML类图 1.右键点击项目名称,选择New-------àUML2 Model 2.给类图命名 3.导成类图 1)如果要把整个项目导成类图,则把整个项目拖到类图 ...

  6. Java中使用验证码和二维码

    资源 需要:   jelly-core-1.7.0.GA.jar 网站:   http://lychie.github.io/products.html 将下载下来的 jelly-core-1.7.0 ...

  7. java实现随机验证码的图片

    链接地址:http://blog.sina.com.cn/s/blog_407a68fc010006qo.html 1.一共需要2个常用java文件(RandomCode.java和RandomCod ...

  8. 用java来实现验证码功能(本帖为转载贴),作为个人学习收藏用

    一.关于为何使用验证的解释 在目前的网页的登录.注册中经常会见到各种验证码.其目的便是为了:防止暴力破解  .因为只要CPU性能较强,便可以在慢慢尝试密码的过程中来破解用户账号,因而导致的结果是用户信 ...

  9. Java web开发,在一个jsp里放太多java代码的后果,摘自 java web轻量级开发面试教程

    现要做一个简单的登录页面,如果用户通过验证,会显示Welcome用户名的欢迎词,反之则返回登录页面让用户再次输入 这部分的完整代码是JSPDemo项目里的login.jsp,下面来分析一下关键代码. ...

随机推荐

  1. enumerate 和 dict.items()

    对 list 遍历 a_list = [1,2,3] for index,iterm in enumerate(a_list): print(index,iterm) 对 dict 遍历 dict = ...

  2. docker安装配置

    ########################################## #docker安装配置 #环境centos7 #配置docker阿里源 echo '#Docker [docker ...

  3. IT男装逼利器:如何像黑客一样聊天 Mojo-Webqq

    电影里的黑客们聊天不想我们生活中的一样,用QQ.微信的客户端,都是通过命令行来进行聊天交流的,大概是为了提升逼格吧.(文末有福利~) 本文作者:KevinSVIP 今天发现一个有趣的项目:使用mojo ...

  4. centos绑定https

    1.百度云申请免费ssl证书 一年一申请 2. https://www.wosign .com /faq/faq-apache-https.htm 3.注意ssl.conf里面各个证书的顺序 证书路径 ...

  5. jmeter ——JDBC Request中从数据库中读两个字段给接口取值

    前置条件数据库: 给接口传:tid和shopid这俩字段 直接从JDBC Request开始: Variable name:这里写入数据库连接池的名字(和JDBC Connection Configu ...

  6. P3698 [CQOI2017]小Q的棋盘

    题目链接 题意分析 首先 我们肯定会贪心的走从根节点到叶子结点最长的一条链 首先没有过剩的就好办了 但是有的话 我们就一边往下走 一边走分支 分支上每一个点平均走过两次 所以我们把剩下的除以\(2\) ...

  7. leetcode-268-Missing Number(异或)

    题目描述: Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is ...

  8. datetime之 utcnow 和now的用法

    from datetime import datetime print(datetime.now()) 本地时间 print(datetime.utcnow()) 国际时间

  9. LARTC

    大牛的博客 howto ,however, is simplify. another space ip link list ip address show ip route show route -n ...

  10. 工具软件推荐——GifCam

    博文里面的动态gif图片都是使用这款软件录制的,可以选择帧率,清晰度,并且编辑每一帧的图片,非常好用,特此推荐~ 注意: GifCam 是一款免费绿色的软件. 大家尽量在官方下载 下载地址. 最新的版 ...