JavaWeb中实现验证码功能,详解

为什么设置验证码?

验证码就是将一串随机产生的数字或符号,生成一幅图片,图片里加上一些干扰元素,防机器人注册,由用户肉眼识别其中的验证码信息,然后输入表单提交网站验证,验证成功后才能使用某项功能。

 

原理?

验证码通常用在用户登录或留言的网页界面中,当用户在浏览器端输入验证码之后,将用户名、密码和验证码等信息提交到服务器,服务器端获取用户的提交之后,判断用户提交的验证码字符与服务器端保存的字符是否相同。如果相同,则通过对用户提交信息的验证;否则将提示没有通过验证的提示信息。

 

代码?

 

jsp(简写)

                <div class="identifyingcode">
					<div>
						<input class="inputIdentifyingcode" id="code" type="text"
							name="code" placeholder="input identifyingCode">
					</div>
					<div>
						<div style="float: left;">
							<img class="imgcode" alt="Code" id="scode"
								src="/HelpProject/ImageServlet" />
						</div>
						<div style="float: left;">
							<a class="aunclear" href="#" onclick="flushCode()">unClear?</a>
						</div>
					</div>
				</div>

css

.identifyingcode{
	float: left;
	margin-left: 100px;
	margin-top: 10px;
	height: 50px;
	width: 200px;
	border: none;
}
.inputIdentifyingcode{
	height: 29px;
	width: 200px;
	border: none;
	background: white;
}
.imgcode{
	display: inline-block;
	height: 30px;
	width: 100px;
}
.aunclear{
	display: inline-block;
	height: 30px;
	width: 90px;
	text-align: center;
	line-height: 30px;
	color: black;
	font-size: 12px;
}
.okss{
	float: left;
	margin-left: 170px;
	margin-top: 30px;
	height: 30px;
	width: 60px;
	background: white;
}
.okss_in{
	float: left;
	height: 30px;
	width: 60px;
}
.register{
	clear: left;
	float: left;
	margin-left: 10px;
	margin-top: 60px;
	height: 30px;
	width: 100px;
}
.forget{
	float: left;
	margin-left: 150px;
	margin-top: 60px;
	height: 30px;
	width: 120px;
}

js

//用于刷新验证码,每次刷新的时候获取当前时间,防止浏览器缓存刷新失败
	function flushCode() {	
		var time = new Date();
		document.getElementById("scode").src = "/HelpProject/ImageServlet?time=" 
				+ time;
	}

//src路径为项目中下面servlet的路径

 

servlet

package com.qcbylearn.utils;


import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
 
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;

/**
 * Servlet implementation class GetImage
 */
@WebServlet("/ImageServlet")
public class ImageServlet extends HttpServlet {
	 /**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	// 
    private static final int IMG_HEIGHT = 100;
    // 
    private static final int IMG_WIDTH = 30;
    // 
    private static final int CODE_LEN = 4;
 
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        doPost(req, resp);
    }
 
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        // 
        BufferedImage bi = new BufferedImage(IMG_HEIGHT, IMG_WIDTH, BufferedImage.TYPE_INT_RGB);
        // 
        Graphics graphics = bi.getGraphics();
        graphics.setColor(new Color(220,220,220)); // 
        graphics.fillRect(0, 0, 100, 30); // 
 
        // 
        char[] codeChar = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456".toCharArray();
        String captcha = ""; // 
        Random random = new Random();
        for(int i = 0; i < CODE_LEN; i++) { //
            int index = random.nextInt(codeChar.length);
            // 
            graphics.setColor(new Color(random.nextInt(150), random.nextInt(200), random.nextInt(255)));
            // 
            graphics.drawString(codeChar[index] + "", (i * 20) + 15, 20);
            captcha += codeChar[index];
        }
        // 
        req.getSession().setAttribute("code", captcha); 
       
        //
        ImageIO.write(bi, "JPG", resp.getOutputStream());
    }
 
}

 

 

代码没有给大家具体使用步骤,但是用起来很方便,主要是src中的路径配对了就行,有问题找我哦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值