博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sessiona小案例之验证码
阅读量:4305 次
发布时间:2019-05-27

本文共 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 ;}

你可能感兴趣的文章
int(3)和int(11)区别
查看>>
201521123061 《Java程序设计》第十一周学习总结
查看>>
代码小思考
查看>>
Unity中的销毁方法
查看>>
ceph删除pool提示(you must first set the mon_allow_pool_delete config option to true)解决办法...
查看>>
2016-7-15(1)使用gulp构建一个项目
查看>>
Windows窗体技术
查看>>
菜鸟学IT之python词云初体验
查看>>
Linux6.9安装
查看>>
20190807更新数据相关笔记
查看>>
P1137 旅行计划
查看>>
MySQL查询执行的基础
查看>>
python - wsgi协议
查看>>
SolidWorks学习笔记2草图
查看>>
hibernate异常
查看>>
判断DAG图
查看>>
2012天津E题
查看>>
常微分方程初值问题:多步预测-修正方法 [MATLAB]
查看>>
结对编程——黄金点游戏
查看>>
(转)一条SQL更新语句是如何执行的
查看>>