java web,生成验证码图片的技术
偶然知道原来有些网站的验证码图片都是随机生成的,后来听人讲了一下,就做了这个小例子


生成图片,绘制背景,数字,干扰线用到了java.awt包,主要使用BufferedImage来生成图片,然后使用Graphics对象来绘制内容。
代码如下:
package com.util; import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.Random; public class ImageCodeUtil { public static BufferedImage getImage(){
Random r = new Random();
//1.创建一个bufferedimage对象
BufferedImage image = new BufferedImage(60, 20, BufferedImage.TYPE_INT_RGB);
//2.绘制长方形
Graphics g = image.getGraphics();
g.setColor(new Color(233, 222, 220));
g.fillRect(0, 0, 60, 20);
//3.绘制干扰线
for(int i = 0;i < 200;i++){
g.setColor(new Color(40+r.nextInt(200),40+r.nextInt(200),40+r.nextInt(200)));
int x = r.nextInt(50);
int y = r.nextInt(20);
g.drawLine(x,y, x+r.nextInt(20), y+r.nextInt(15));
}
//4.写四位数字
g.setColor(new Color(23, 22, 20));
int checkCode = r.nextInt(9000)+1000;
g.drawString(checkCode+"", 15, 15);
//关闭Graphics对象,释放资源
g.dispose();
return image;
} }
这是生成图片,在网页显示中,用img标签就可以,通过servlet请求图片资源,代码如下:
<img alt="" src="check">
最后在servlet代码中响应浏览器发来的请求,将图片资源发送到浏览器,代码如下:
package com.controller; import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import com.util.ImageCodeUtil; /**
* Servlet implementation class CheckCodeServlet
*/
@WebServlet("/check")
public class CheckCodeServlet extends HttpServlet {
private static final long serialVersionUID = 1L; /**
* @see HttpServlet#HttpServlet()
*/
public CheckCodeServlet() {
super();
// TODO Auto-generated constructor stub
} /**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//设置返回类型
response.setContentType("image/jpeg");
//生成验证码图片用到了java.awt包
BufferedImage image = ImageCodeUtil.getImage();
//将image通过outputStream返回
ImageIO.write(image, "JPEG", response.getOutputStream());
} }
以上只是每一次刷新页面请求服务的时候验证码才会刷新,可以加入js代码注册点击事件,使之可以点击验证码图片就可以更换,代码如下:
注:此处我使用的jq
$("img").click(function(){
$(this).attr("src","/ServletTest/check?a="+new Date().getMilliseconds());
});
至此,验证码的效果已经实现。具体在页面上的美观显示,在网页上通过css重新修饰一下。
java web,生成验证码图片的技术的更多相关文章
- java动态生成验证码图片
package cn.lijun.checkimg; import java.awt.image.BufferedImage;import java.io.BufferedReader; import ...
- java web学习总结(九) -------------------通过Servlet生成验证码图片
一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下:
- java web 学习九(通过servlet生成验证码图片)
一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下:
- Java Web学习总结(6)——通过Servlet生成验证码图片
一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下: 创建一个DrawImage Servlet,用来生成验证码图片 package gacl.res ...
- Java 生成验证码图片
生成验证码图片并对提交的输入进行验证 // HttpServletResponse常见应用——生成验证码 // 利用BufferedImage类生产随机图片 public static final i ...
- JavaWeb---总结(九)通过Servlet生成验证码图片
一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下: 创建一个DrawImage Servlet,用来生成验证码图片 1 package gacl. ...
- javaweb学习总结(九)—— 通过Servlet生成验证码图片
一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下:
- 012. asp.net生成验证码图片(汉字示例/字母+数字)
protected void Page_Load(object sender, EventArgs e) { //生成验证码图片的基本步骤 string checkCode = "新年快乐& ...
- J2EE如何生成验证码图片和点击刷新验证码
验证码图片生成步骤 创建BufferedImage对象. 获取BufferedImage的画笔,即调用getGraphics()方法获取Graphics对象. 调用Graphics对象的setColo ...
随机推荐
- Run busybox httpd with php, sqlite
/*********************************************************************************** * Run busybox h ...
- Java [Leetcode 238]Product of Array Except Self
题目描述: Given an array of n integers where n > 1, nums, return an array output such that output[i] ...
- noip2007提高组题解
题外话:这一年的noip应该是最受大众关心的,以至于在百度上输入noip第三个关键字就是noip2007.主要是由于这篇文章:http://www.zhihu.com/question/2110727 ...
- poj 3694 Network
题意: 添加每条新连接后网络中桥的数目// 超时 先放着了 ,下次改//早上这代码超时了 下午改了,代码在下面#include <iostream> #include <algori ...
- 【转】开始iOS 7中自动布局教程(一)
原文网址:http://www.cocoachina.com/industry/20131203/7462.html 原文:Beginning Auto Layout Tutorial in iOS ...
- TCP/IP详解学习笔记(4)-ICMP协议,ping和Traceroute
1.IMCP协议介绍 前面讲到了,IP协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完成.其中一个重要的模块就是ICMP(网络控制报文)协议. 当传送 ...
- hdu 3068(最长回文)
题意:容易理解... 思路:可以用扩展kmp来做,但是我还没怎么弄懂,时间复杂度O(n*logn),而manacher算法,第一次听说,代码比较短,不难理解,和扩展kmp有点类似,时间复杂度为:O(n ...
- [Everyday Mathematics]20150112
设 $f\in C[0,1]$ 适合 $$\bex \int_x^1 f(t)\rd t\geq \frac{1-x^2}{2},\quad \forall\ x\in [0,1]. \eex$$ 试 ...
- <Araxis Merge>Windows平台下的Merge概览
它是什么 Merge是一个来自Araxis的可视化文件比较/合并及文件夹同步的应用程序. 用户界面使用英语.德语.日语.法语.国际西班牙语.汉语(繁体和简体)进行本地化了. 优势 对于软件工程师和网站 ...
- 优雅地对泛型List 进行深拷贝
public class People { public string Name; public int Age; public People(string name, int age) { this ...