实现验证码

来源:互联网 发布:淘宝淘词助手官网 编辑:程序博客网 时间:2024/06/02 03:44
前端验证码发送servlet请求代码:
<img src="checkCode" alt="" id="codeImg"style="width: 80px; height: 30px; border: 1px solid black;" /> <a href="javascript:;" onclick="document.getElementById('codeImg').src = 'checkCode?'+(new Date()).getTime()">换一张</a><span id="codemsg" style="color: red; font-size: 20px;"></span>
后台处理,并返回给前端处理结果
import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.IOException;import java.io.OutputStream;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 checkservlet */@WebServlet("/checkCode")public class checkservlet extends HttpServlet { @Overrideprotected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String codes="abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ0123456789";BufferedImage img=new BufferedImage(80,30,BufferedImage.TYPE_3BYTE_BGR);Graphics g=img.getGraphics();//填充图片g.setColor(new Color(255,255,255));g.fillRect(0, 0, 80, 30);//画入五个随机数Random rm=new Random();StringBuffer sb=new StringBuffer();for(int i=0;i<5;i++){int index=rm.nextInt(codes.length());char code=codes.charAt(index);g.setColor(new Color(rm.nextInt(256),rm.nextInt(256),rm.nextInt(256)));g.setFont(new Font("宋体", Font.BOLD, 25));g.drawString(code+"", 2+15*i, 22);sb.append(code);}//画干扰线for(int i=0;i<10;i++){g.setColor(new Color(rm.nextInt(256),rm.nextInt(256),rm.nextInt(256)));g.drawLine(rm.nextInt(100), rm.nextInt(50), rm.nextInt(100), rm.nextInt(50));}//将验证码图片回写给浏览器response.setContentType("image/jpeg;charset=utf-8");OutputStream out=response.getOutputStream();ImageIO.write(img, "jpeg", out);//将随机字符串保存在session中request.getSession().setAttribute("code", sb.toString());}}


原创粉丝点击