手心创建一个简单的页面来显示所创建的验证码

<body>
<form action="loginName.mvc" method="post">
用户名:<input type="text" name="name" id="name"/><br/>
密码:<input type="password" name="password" id="password"/><br/>
验证码1:<a href="javascript:changePicture1();" title='看不清楚,换个图片'><img id="checkcode1" src=""><a href="javascript:changePicture1();" class="login-text03" title='看不清楚,换个图片'>看不清楚,换个图片</a><br/>
验证码2:<a href="javascript:changePicture2();" title='看不清楚,换个图片'><img id="checkcode2" src=""><a href="javascript:changePicture2();" class="login-text03" title='看不清楚,换个图片'>看不清楚,换个图片</a><br/>
验证码3:<a href="javascript:changePicture3();" title='看不清楚,换个图片'><img id="checkcode3" src=""><a href="javascript:changePicture3();" class="login-text03" title='看不清楚,换个图片'>看不清楚,换个图片</a>
<span id="spantext"></span><br/>
<!-- <input type="button" value="登录" onclick="loginPerson()"/>-->
<input type="submit" value="登录"/>
</form>
</body>
<script language="javascript">
window.onload=function(){
changePicture1();
changePicture2();
changePicture3();
}; function changePicture1(){
$("#checkcode1").attr("src","servlet/CheckCode?code="+Math.random());
}
function changePicture2(){
/* var arry=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q",
"R","S","T","U","V","W","X","Y","Z","0","1","2","3","4","5","6","7","8","9"];
var len=arry.length;
var code="";
for(i=0;i<=4;i++){
var index=Math.floor(Math.random()*len);
code+=arry[index];
} */
//alert(code);
$("#checkcode2").attr("src","servlet/ImageServlet?code="+Math.random());
}
function changePicture3(){
$("#checkcode3").attr("src","servlet/graphicsImage?code="+Math.random());
}
function loginPerson(){
var name=document.getElementById("name").value;
var password=document.getElementById("password").value;
if(name==""||password==""){
alert("账户名或密码不能为空");
$("#spantext").html("账户名或密码不能为空");
}else{
$.ajax({
type : "post",
url : "./loginName.mvc?name="+name+"&password="+password,
success : function(data){
alert(data);
var obj=eval("("+data+")");
var message=obj.code;
//var name=obj.name;
//var password=obj.password;
alert(message);
//alert(name);
//alert(password);
},
error : function(data){
$("#spantext").html("网络错误");
}
});
}
}
</script>

  在这里写有三个生成验证码的类,其实他们的本质是一样的  ,都是类似的

创建的第一个验证码

package com.chinasoft.ssm.servlet;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Random; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder; public class CheckCode extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { response.setContentType("image/jpeg");
// 图片的内存映像
BufferedImage image = new BufferedImage(60, 20,BufferedImage.TYPE_INT_BGR);
// 获取画笔对象
Graphics g = image.getGraphics();
//随机变换图片的颜色
Random r = new Random();
g.setColor(new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255)));
//开始绘制图片
g.fillRect(0, 0, 60, 20);
//将画笔颜色清零
g.setColor(new Color(0,0,0));
Font font = new Font("Verdana", Font.ITALIC|Font.BOLD, 16);
g.setFont(font);
String number = String.valueOf(r.nextInt(99999));
HttpSession session = request.getSession();
session.setAttribute("number", number);
g.drawString(number, 5, 15);
g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
//压缩jpeg格式转换为输出流的形式
OutputStream os = response.getOutputStream();
//把输出流对象中的图像信息编码
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os);
//向创建对象时指定的输出流输出
encoder.encode(image);
os.flush();
os.close();
} /**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occurs
*/
public void init() throws ServletException {
// Put your code here
} }

package com.chinasoft.ssm.servlet;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random; import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder; public class ImageServlet extends HttpServlet {
private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(request,response);
} public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String ch1= (String) request.getParameter("code");
System.out.println(ch1);
response.setContentType("image/jpeg");
// 图片的内存映像
BufferedImage bi=new BufferedImage(68, 22,BufferedImage.TYPE_INT_RGB);
//获得画笔对象
Graphics g=bi.getGraphics();
//图片的颜色选择
Color c=new Color(200,150,255);
g.setColor(c);
//开始绘制图片
g.fillRect(0, 0, 68, 22); char[] ch="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();
Random r=new Random();
int len=ch.length;
int index;
StringBuffer sb=new StringBuffer();
for(int i=0;i<4;i++)
{
//获取一个随机数
index=r.nextInt(len);
//给字体设置颜色
Font font = new Font("Verdana", Font.ITALIC|Font.BOLD, 16);
g.setFont(font);
g.setColor(new Color(r.nextInt(88),r.nextInt(188),r.nextInt(255)));
//将所有选择的字体绘画出来
g.drawString(ch[index]+"",(i*15)+3, 18);
//将随机生成的验证码添加到可变字符sb中去
sb.append(ch[index]);
}
//将生成的验证码对象保存到piccode对应的value中去
//request.getSession().setAttribute("piccode", sb.toString());
//使用给定的支持格式将图像BufferedImage的bi对象写入到响应输出流当中
//ImageIO.write(bi, "JPG", response.getOutputStream()); OutputStream os = response.getOutputStream();
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os);
//向创建对象时指定的输出流输出
encoder.encode(bi);
os.flush();
os.close();
} }

创建的第二个验证码

package com.chinasoft.ssm.servlet;

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random; import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class graphicsImage extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { doPost(request,response);
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
char[] strs = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();
BufferedImage bi = new BufferedImage(150,40,BufferedImage.TYPE_INT_RGB);
Graphics2D g = (Graphics2D)bi.getGraphics();
Random num=new Random();
Color color ;
int len = strs.length;
g.setColor(Color.WHITE);
g.fillRect(0,0,150,40);
// 随机画干扰的蛋蛋
for(int i=0;i<15;i++){
color =new Color(150,100, 250);
g.setColor(color);
// 画蛋蛋,有蛋的生活才精彩
g.drawOval(num.nextInt(150), num.nextInt(40), 5+num.nextInt(10), 5+num.nextInt(10));
color = null;
}
Font font = new Font("Verdana", Font.ITALIC|Font.BOLD, 28);
g.setFont(font);
/* 画字符串 */
for(int i=0;i<6;i++)
{
int index=num.nextInt(len);
// 指定透明度
AlphaComposite ac3 = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.7f);
g.setComposite(ac3);
// 对每个字符都用随机颜色
color = new Color(20 + num.nextInt(110), 20 + num.nextInt(110), 20 + num.nextInt(110));
g.setColor(color);
g.drawString(strs[index]+"",(i*15)+40, 40-4);
color = null;
ac3 = null;
}
ImageIO.write(bi, "png", response.getOutputStream());
}
public void init() throws ServletException {
// Put your code here
} }

创建的第三个验证码

java生成验证码并可刷新的更多相关文章

  1. 【开发技术】Java生成验证码

    Java生成验证码 为了防止用户恶意,或者使用软件外挂提交一些内容,就得用验证码来阻止,虽然这个会影响用户体验,但为了避免一些问题很多网站都使用了验证码;今天下午参考文档弄了一个验证码,这里分享一下; ...

  2. Java生成验证码并进行验证(转)

    本文转自http://blog.csdn.net/worm0527/article/details/51030864 一.实现思路 使用BufferedImage用于在内存中存储生成的验证码图片 使用 ...

  3. Java生成验证码原理(jsp)

     验证码的作用: 验证码是Completely Automated Public Turing test to tell Computers and Humans Apart(全自动区分计算机和人类的 ...

  4. Java生成验证码(二)

    前一篇博客已经介绍了如何用Java servlet产生验证码,本篇继续介绍如何使用一些开源组件生成验证码 ————————————————————————————————————————————   ...

  5. Java生成验证码_转

    为了防止用户恶意,或者使用软件外挂提交一些内容,就得用验证码来阻止,虽然这个会影响用户体验,但为了避免一些问题很多网站都使用了验证码;今天下午参考文档弄了一个验证码,这里分享一下;这是一个web工程, ...

  6. java生成验证码结合springMVC

    在用户登录的时候,为了防止机器人攻击都会设置输入验证码,本篇文章就是介绍java如何生成验证码并使用在springMVC项目中的. 第一步:引入生成图片验证码的工具类 import java.awt. ...

  7. Java 生成验证码图片

    生成验证码图片并对提交的输入进行验证 // HttpServletResponse常见应用——生成验证码 // 利用BufferedImage类生产随机图片 public static final i ...

  8. JAVA生成验证码代码

    生成base64格式图片验证码 /** * 验证码的候选内容 */ private char codeSequence[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', ...

  9. JAVA生成验证码

    <img border="0"                             src="ValidateCode"                ...

随机推荐

  1. visual studio snippet备忘

    一.C++ classheadercpp.snippet <?xml version="1.0" encoding="utf-8"?> <Co ...

  2. Nmap扫描与Tcpdump抓包分析

    扫描与抓包分析 3.1 问题 本案例要求熟悉Linux主机环境下的常用安全工具,完成以下任务操作: 使用NMAP扫描来获取指定主机/网段的相关信息 使用EtterCAP截获明文通信的密码.检测非加密通 ...

  3. DELPHI读取网页源文件和获取字符串

    说到网页采集,通常大家以为到网上偷数据,然后把到收集到的数据挂到自己网上去.其实也可以将采集到的数据做为公司的参考,或把收集的数据跟自己公司的业务做对比等.目前网页采集多为3P代码为多(3P即ASP. ...

  4. NX二次开发-获取坐标系信息UF_CSYS_ask_csys_info

    NX9+VS2012 #include <uf.h> #include <uf_csys.h> UF_initialize(); //获取WCS标识 tag_t WcsId = ...

  5. NX二次开发-UFUN将目录与文件名组合在一起uc4575

    NX11+VS2013 #include <uf.h> #include <uf_ui.h> #include <uf_cfi.h> UF_initialize() ...

  6. 谈谈E语言

    基于中国文化底蕴的编程语言,  绝对不是E语言那个样子. 基于中文的编程,必将是计算机届的一次原子爆炸!

  7. [02]APUE:POSIX 正则库(#include <regex.h>)

    正则匹配流程: 声明一个 regex_t 类型的变量(结构体) regcomp 函数会将“正则匹配条件”写入此结构体,并编译成特定的二进制格式(加快匹配速度) 声明一个 regmatch_t 类型的变 ...

  8. Redis事务,持久化,哨兵机制

    1 Redis事务 基本事务指令 Redis提供了一定的事务支持,可以保证一组操作原子执行不被打断,但是如果执行中出现错误,事务不能回滚,Redis未提供回滚支持. multi 开启事务 exec 执 ...

  9. Codeforces 479【F】div3

    题目链接:http://codeforces.com/problemset/problem/977/F 题意:给你一串数字序列,让你求最长上升子序列,但是这个子序列呢,它的数字得逐渐连续挨着. 题解: ...

  10. sql 循环执行游标

    ---定义开始和结束时间 declare @st_dt datetime declare @en_dt datetime ---时间赋值 ' ' ---定义中间变量 declare @dt datet ...