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 ...
随机推荐
- I.MX6 Ubuntu core porting
/*********************************************************************** * I.MX6 Ubuntu core porting ...
- 【JS】<c:foreach>用法
<c:foreach>类似于for和foreach循环 以下是我目前见过的用法: 1.循环遍历,输出所有的元素. <c:foreach items="${list}&q ...
- 【JSP】JSP向MySQL写入|读出中文数据——乱码问题
注意第14行
- 【经典DFS】NYOJ-1058-部分和问题
[题目链接:NYOJ-1058] 看到题目难度是2,所以想也没想,直接循环比较...结果果然... 是错的. #include<cstdio> #include<cstring> ...
- geusture for chrome cfg
{ "name": "Chrome Gestures", "version": "1.13.4", "norm ...
- Storm入门教程 第五章 一致性事务【转】
Storm是一个分布式的流处理系统,利用anchor和ack机制保证所有tuple都被成功处理.如果tuple出错,则可以被重传,但是如何保证出错的tuple只被处理一次呢?Storm提供了一套事务性 ...
- Delphi RichEdit操作
1.选择设置对齐 RichEdit1.SelectAll;RichEdit1.Paragraph.Alignment:=taLeftJustify; // switch for other align ...
- DbContext运行时动态附加上一个dbset
参考 Creating DbSet Properties Dynamically C# code? 1 DbSet<MyEntity> set = context.Set<MyEnt ...
- 接入脚本interface.php实现代码
承接上文的WeChatCallBack 在WeChatCallBack类的成员变量中定义了各种消息都会有的字段,这些字段在init函数中赋值.同时也把解析到的XML对象作为这个类的成员变量$_post ...
- Dictionary<实体,List<实体>>的比较
当Dictionary中Key为实体时,进行用ContainsKey比较会发现,就算Model为一样但是结果比较为不存在: 故用以下代码即可,现将Keys转换ToArray(),再用数组的Contai ...