package cn.itcast.servlet;import java.util.Random;import java.util.Scanner;publicclassTestRandom{publicstaticvoidmain(String[] args){// 定义一个字符型数组用来存放密码数据随机取值的内容char[] pardStore =newchar[62];// 把所有的大写字母放进去char beg ='A';for(int i =0; i <=25; i++){
pardStore[i]= beg;//char类型加int类型会自动转换为int型,char型换算为ASCII型,在强制char型转换表为ASCII表
beg =(char)(beg +1);}// 把所有的小写字母放进去char beg1 ='a';for(int i =26; i <=51; i++){
pardStore[i]= beg1;
beg1 =(char)(beg1 +1);}// 把0到9放进去char beg2 ='0';for(int i =52; i <=61; i++){
pardStore[i]= beg2;
beg2 =(char)(beg2 +1);}
Random random =newRandom();for(int i =1; i <=6; i++){int n = random.nextInt(62);//随机生成一个整数,这个整数的范围就是[0,62)
System.out.print(pardStore[n]);}}}
二.页面显示
package cn.itcast.servlet;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 java.awt.*;import java.awt.image.BufferedImage;import java.io.IOException;import java.util.Random;@WebServlet("/CheckCodeServlet")publicclassCheckCodeServletextendsHttpServlet{protectedvoiddoPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {int width =100;int height =50;//1.创建一个对象,在内存中图片(验证码图片对象)
BufferedImage image =newBufferedImage(width, height, BufferedImage.TYPE_INT_RGB);//2.美化图片//2.1填充背景色
Graphics g = image.getGraphics();//画笔对象
g.setColor(Color.PINK);//设置画笔颜色
g.fillRect(0,0, width, height);//2.2画边框
g.setColor(Color.BLUE);
g.drawRect(0,0, width -1, height -1);char[] chars =newchar[62];// 把所有的大写字母放进去char beg ='A';for(int i =0; i <=25; i++){
chars[i]= beg;//char类型加int类型会自动转换为int型,char型换算为ASCII型,在强制char型转换表为ASCII表
beg =(char)(beg +1);}// 把所有的小写字母放进去char beg1 ='a';for(int i =26; i <=51; i++){
chars[i]= beg1;
beg1 =(char)(beg1 +1);}// 把0到9放进去char beg2 ='0';for(int i =52; i <=61; i++){
chars[i]= beg2;
beg2 =(char)(beg2 +1);}//生成随机角标
Random random =newRandom();for(int i =1; i <5; i++){int index = random.nextInt(62);//获取字符char ch = chars[index];//随机字符//2.3写验证码
g.drawString(ch +"", width /5* i, height /2);}//2.4生成干扰线
g.setColor(Color.GREEN);//随机生成坐标点for(int i =0; i <10; i++){int x1 = random.nextInt(width);int x2 = random.nextInt(width);int y1 = random.nextInt(width);int y2 = random.nextInt(width);
g.drawLine(x1, y1, x2, y2);}//3.将图片输出到页面展示
ImageIO.write(image,"jpg", response.getOutputStream());}protectedvoiddoGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doPost(request, response);}}
三.页面验证码可以一直更换
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Title</title><script>/*
分析:
点击超链接或者图片换一张
1.给超链接和图片绑定单击事件
2.重新设置src图片的属性值
*/
window.onload = function (){//1.获取图片对象
var img = document.getElementById("checkCode");//2.绑定单击属性
img.onclick = function (){
var date =newDate().getTime();
img.src ="/Response/CheckCodeServlet?"+ date;//如果不加属性每次读取缓存不会更换,加一个永不重复的时间戳}}</script></head><body><img id="checkCode" src="/Response/CheckCodeServlet"><a id="charge" href="">看不清换一张?</a>//超链接</body></html>