jsp页面动态生成验证码

在web项目中登录验证一般采用验证码验证,根据个人需求将生成验证码代码放到不同的的地方,可以放到前段控制器中通过请求方式生成验证码,也可已将代码放到一个JSP页面通过应用JSP页面生成验证码
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="java.awt.image.BufferedImage"%>
<%@page import="java.awt.Graphics2D"%>
<%@page import="java.awt.Color"%>
<%@page import="java.awt.Font"%>
<%@page import="javax.imageio.ImageIO"%>
<%@page import="java.util.Random"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>


<%
	int width = 60;
	int height = 20;
	// 创建具有可访问图像数据缓冲区的Image
	BufferedImage buffImg = new BufferedImage(width, height,
			BufferedImage.TYPE_INT_RGB);
	Graphics2D g = buffImg.createGraphics();
	
	// 创建一个随机数生成器
	Random random = new Random();
	
	g.setColor(Color.WHITE);
	g.fillRect(0, 0, width, height);
	
	// 创建字体,字体的大小应该根据图片的高度来定
	Font font = new Font("Times New Roman", Font.PLAIN, 18);
	// 设置字体
	g.setFont(font);
	
	// 画边框
	g.setColor(Color.BLACK);
	g.drawRect(0, 0, width - 1, height - 1);
	
	// 随机产生160条干扰线
	g.setColor(Color.LIGHT_GRAY);
	for (int i = 0; i < 160; i++) {
		int x = random.nextInt(width);
		int y = random.nextInt(height);
		int x1 = random.nextInt(12);
		int y1 = random.nextInt(12);
		g.drawLine(x, y, x + x1, y + y1);
	}
	
	// randomCode 用于保存随机产生的验证码
	StringBuffer randomCode = new StringBuffer();
	int red = 0, green = 0, blue = 0;
	
	// 随机产生4位数字的验证码
	for (int i = 0; i < 4; i++) {
		// 得到随机产生的验证码数字
		String strRand = String.valueOf(random.nextInt(10));
	
		// 产生随机的颜色分量来构造颜色值
		red = random.nextInt(110);
		green = random.nextInt(50);
		blue = random.nextInt(50);
	
		// 用随机产生的颜色将验证码绘制到图像中
		g.setColor(new Color(red, green, blue));
		g.drawString(strRand, 13 * i + 6, 16);
	
		randomCode.append(strRand);
	}
	
	// 将四位数字的验证码保存到session中
	//HttpSession session = request.getSession();
	session.setAttribute("randomCode", randomCode.toString());
	
	// 禁止图像缓存
	response.setHeader("Pragma", "no-cache");
	response.setHeader("Cache-Control", "no-cache");
	response.setDateHeader("Expires", 0);
	
	response.setContentType("image/jpeg");
	// 将图像输出到servlet输出流中
	ServletOutputStream sos = response.getOutputStream();
	ImageIO.write(buffImg, "jpeg", sos);
	sos.close();
	//sos = null;
	out.clear();
	out = pageContext.pushBody();
%>
</body>
</html>

通过应用上面代码就可以生成一个验证码  在后台通过获得session就可以获得产生的验证码 通过比对来验证登录
在登录界面可以这样应用 简单展示一下 
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head lang="en">
<meta charset="UTF-8">
<title>登录界面</title>
<script src="./js/jquery-3.2.1.min.js"></script>
<script type="text/javascript">
$(function(){
    $("#loginform_submit").click(function(){
        if(checkInput()){
            
           $("#form1").submit();
        }else{
            return false;
        }
    }
    );
});

function checkInput(){
	var flag = true;
    //判断用户名
    if($("input[name=username]").val()==null || $("input[name=username]").val()==""){
        alert("用户名不能等于空");
        $("input[name=username]").focus();
        flag =false;
        return ;
    }
    //判断密码
    if($("input[name=password]").val()==null || $("input[name=password]").val()==""){
        alert("密码不能等于空");
        $("input[name=password]").focus();
        flag =false;
        return ;
    }
    //判断验证码
    if($("#validationCode").val()==null || $("#validationCode").val()==""){
        alert("验证码不能为空");
        $("#validationCode").focus();
        flag =false;
        return ;
    }
    return flag;
}
</script>
</head>
<body>
    <div id="loginpanelwrap" align="center">
        <div>
            <div>登录</div>
        </div>
        
        <form id="form1" action="LoginServlet" method="post">
        
            <tr>
                   <td> <label>用户名:</label>
                    <input id="username" type="text" name="username" /><br>
              
          			 </td>
          			</tr>
                <label>密码:</label>
                <input type="password" name="password" id=""/><br>
           
                <label>验证码:</label>
                <input type="text" name="validationCode" id="validationCode"/>
                <img id="validationCode_img"  src="validate.jsp"><br>
            <tr>
                <span></span>
                <input type="submit" id="loginform_submit" value="登录" />
            </tr>
       
        </form>
        
    </div>
</body>
</html>

根据个人喜好可以设置点击更换
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值