[JavaWeb]Servlet验证码实现(实例代码)


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";
	}
	
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值