Servlet文件:
import java.awt.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.ImageIO;
import javax.servlet.http.*;
@SuppressWarnings("serial")
public class Vali extends HttpServlet{
String ver[]=new String[62];
//生成一个存了大小写字母和数字0~9的数组,用于生成验证码图片
public void init(){
for(int i=0;i<10;i++){
ver[i]=new Integer(i).toString();
}//0-9
for(int i=0;i<26;i++){
ver[i+10]=new Character((char)(65+i)).toString();
}//A-Z
for(int i=0;i<26;i++){
ver[i+36]=new Character((char)(97+i)).toString();
}//a-z
}
public void doGet(HttpServletRequest req,HttpServletResponse res){
try{
res.setContentType("image/jpeg");//定向输出流 jpeg
OutputStream os=res.getOutputStream();
BufferedImage image=new BufferedImage(50,20,BufferedImage.TYPE_INT_RGB);
Graphics g= image.getGraphics();
g.setColor(new Color(200,200,200));//灰底
g.fillRect(0,0,50,20);//填充方形框
//画干扰线:20条
g.setColor(new Color(150,150,150));
for(int i=0;i<20;i++){
int x1=(int)(Math.random()*50);
int y1=(int)(Math.random()*20);
int x2=(int)(Math.random()*50);
int y2=(int)(Math.random()*20);
g.drawLine(x1,y1,x2,y2);
}
//画验证码:4位
String vali="";
for(int i=0;i<4;i++){
String v=ver[(int)(Math.random()*62)];
vali+=v;
g.setColor(new Color((int)(Math.random()*150),(int)(Math.random()*150),(int)(Math.random()*150)));//设置格式
g.drawString(v,8*i+10,15);//画字符
}
g.dispose();
ImageIO.write(image,"JPEG",os);
System.out.println("当前验证码:"+vali);//控制台测试输出
//Session-feedback
HttpSession session=req.getSession();
session.setAttribute("Vali",vali);
}catch(Exception e){
//Todo...
}
}
}
Html文件:
<div id="vali">验证码:<img src="Vali" width="80" height="30" οnclick="this.src=this.src+'?'+Math.random();"></div>
用于点击验证码图片时,重新获取、刷新验证码:
οnclick="this.src=this.src+'?'+Math.random();
JS文件:
function pwCheck(){
getPw();
getPw2();
pwRight=false;
document.getElementById("wrongPw").style.visibility="hidden";
document.getElementById("wrongPw2").style.visibility="hidden";
if(pw==""){//验证码输入框为空时的提示
document.getElementById("wrongPw").style.visibility="visible";
document.getElementById("rightP").style.visibility="hidden";
document.getElementById("wrongP").style.visibility="visible";
}
else if(pw==pw2){//验证码相同时的提示
pwRight=true;
document.getElementById("rightP").style.visibility="visible";
document.getElementById("wrongP").style.visibility="hidden";
document.getElementById("wrongPw2").style.visibility="hidden";
}
else{//验证码不符时的提示
document.getElementById("rightP").style.visibility="hidden";
document.getElementById("wrongP").style.visibility="visible";
document.getElementById("wrongPw2").style.visibility="visible";
}
}