本文共 2561 字,大约阅读时间需要 8 分钟。
sessiona小案例之验证码
1.生成验证码
package web;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.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;public class CheckcodeServlet1 extends HttpServlet { public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("checkcode..."); /* * 一,绘图 */ //step1,内存映像对象(画布) BufferedImage image = new BufferedImage( 80,30, BufferedImage.TYPE_INT_RGB); //step2,获得画笔 Graphics g = image.getGraphics(); //step3,给画笔设置颜色 g.setColor(new Color(255,255,255)); //step4,给画布设置背景颜色 g.fillRect(0, 0, 80, 30); //step5,重新给笔设置颜色 Random r = new Random(); g.setColor(new Color(r.nextInt(255), r.nextInt(255),r.nextInt(255))); g.setFont(new Font(null,Font.ITALIC,24)); //step6,生成一个随机数(验证码) String number = getNumber(); //将验证码绑订到session,用来验证。 HttpSession session = request.getSession(); session.setAttribute("number", number); //将验证码转换成图片 g.drawString(number, 2, 25); //step7,加一些干扰线 for(int i = 0; i < 8; i ++){ g.setColor(new Color(r.nextInt(255), r.nextInt(255),r.nextInt(255))); g.drawLine(r.nextInt(80), r.nextInt(30), r.nextInt(80), r.nextInt(30)); } /* * 二,压缩图片并输出 */ //设置服务器返回的数据类型(图片) response.setContentType("image/jpeg"); //获得字节输出流 OutputStream ops = response.getOutputStream(); //压缩图片并输出 javax.imageio.ImageIO .write(image, "jpeg", ops); ops.close(); } //长度为5个字符的验证码(这些字符要求从 //"A~Z,0~9"中选取,排除0,o,1,i) private String getNumber() { String number = ""; String chars = "ABCDEFGHJKLMNPQRSTU" + "VWXYZ23456789"; Random r = new Random(); for(int i = 0; i < 5; i ++){ number += chars.charAt( r.nextInt(chars.length())); } return number; }}2.浏览器使用验证码
代码:
验证码: 换一张 <% String msg = (String)request.getAttribute("number_error"); %> <%=(msg==null?"":msg) %> /tr>3.服务端检验验证码是否正确
//number1 -- 系统生成的验证码HttpSession session = request.getSession();String number1 = (String)session.getAttribute("number");//number2 -- 表单提交的验证码String number2 = request.getParameter("number");if(!number1.equalsIgnoreCase(number2)){ request.setAttribute("number_error","验证码错误!"); request.getRequestDispatcher("regist.jsp").forward(request,response); return ;}