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. Prufer codes与Generalized Cayley's Formula学习笔记

    \(Prufer\)序列 在一棵\(n\)个点带标号无根树里,我们定义这棵树的\(Prufer\)序列为执行以下操作后得到的序列 1.若当前树中只剩下两个节点,退出,否则执行\(2\) 2.令\(u\ ...

  2. Writing analyzers

    Writing analyzers There are times when you would like to analyze text in a bespoke fashion, either b ...

  3. HTML Strip Char Filter

    The html_strip character filter strips HTML elements from the text and replaces HTML entities with t ...

  4. [转]iOS:批量导入图片和视频到模拟器的相册

    IOS开发中我们经常会用到模拟器调试,模拟器有个主要的好处就是程序启动块,最重要的是如果没有证书的话,我们就只能在模拟器上调试了.使用模拟器调试时我们可能碰到需要从系统相册选择图片的情况,特别是做图片 ...

  5. leetcode-733-Flood Fill

    题目描述: An image is represented by a 2-D array of integers, each integer representing the pixel value ...

  6. Asp.net的生命周期应用之IHttpModule和IHttpHandler

    摘自:http://www.cnblogs.com/JimmyZhang/archive/2007/11/25/971878.html 从 Http 请求处理流程 一文的最后的一幅图中可以看到,在Ht ...

  7. C#数组,List,Dictionary,IQueryable,IEnumerable的相互转换

    本篇文章会向大家实例讲述以下内容: 将数组转换为List 将List转换为数组 将数组转换为Dictionary 将Dictionary 转换为数组 将List转换为Dictionary 将Dicti ...

  8. 04-树6 Complete Binary Search Tree (30 分)

    A Binary Search Tree (BST) is recursively defined as a binary tree which has the following propertie ...

  9. 本地docker镜像上传Docker Hub,并且在腾讯云上pull该镜像,最后运行成功。

    1:在docker hub 上注册一个账号(本人直接能注册,有的说不能),然后创建自己的仓库. 2:登录docker hub ( longdbdocker --hub账号,longdb --仓库名称) ...

  10. java 并发编程——Thread 源码重新学习

    Java 并发编程系列文章 Java 并发基础——线程安全性 Java 并发编程——Callable+Future+FutureTask java 并发编程——Thread 源码重新学习 java并发 ...