JAVA实现验证码的功能
来源:互联网 发布:手机淘宝为什么打不开 编辑:程序博客网 时间:2024/06/12 22:04
前台页面
<form action="LoginCheck" method="post"> <table> <tr><td><input name="checkCode" id="checkCode" size="8" ,maxlength="4"/></td></tr> <tr><td><img onclick="this.src='PictureCheckCode?'+new Date()" src="PictureCheckCode" alt="点击刷新验证码" width="80" height="25"/></td></tr> <tr><td align="center"><input type="submit" value="登录"></td></tr> </table> </form>
java类
package com.lj.action;import java.awt.BasicStroke;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Shape;import java.awt.geom.Arc2D;import java.awt.image.BufferedImage;import java.io.IOException;import java.util.Random;import javax.imageio.ImageIO;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;public class PictureCheckCode extends HttpServlet {private static final long serialVersionUID = -3235816079841410231L;// 该方法主要作用是获得随机生成的颜色public Color getRandColor() {Random r = new Random();Color c = new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255));return c;}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {// TODO Auto-generated method stubthis.doGet(req, resp);}@Overrideprotected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {// 设置验证码的宽度和高度int width = 160, height = 50;// 创建BufferedImage对象,想到于一张画布BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);// 创建Graphics对象,相当于画笔Graphics g = image.getGraphics();// 创建Grapchics2D对象Graphics2D g2d = (Graphics2D) g;Random random = new Random();// 定义字体样式Font mfont = new Font("楷体", Font.BOLD, 40);g.setColor(getRandColor());// 绘制背景g.fillRect(0, 0, width, height);// 设置字体g.setFont(mfont);g.setColor(getRandColor());// 绘制1条曲线作为干扰线,该线条为2fBasicStroke bs = new BasicStroke(2f, BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); // 定制线条样式Shape arc = new Arc2D.Float(10, 20, 150, 150, 40, 100, Arc2D.OPEN);g2d.setStroke(bs);g2d.draw(arc);// 输出由英文,数字,和中文随机组成的验证文字,具体的组合方式根据生成随机数确定。String sRand = "";String ctmp = "";int itmp = 0;// 制定输出的验证码为四位for (int i = 0; i < 4; i++) {switch (random.nextInt(2)) {case 1: // 生成A-Z的字母itmp = random.nextInt(26) + 65;ctmp = String.valueOf((char) itmp);break;default:itmp = random.nextInt(10) + 48;ctmp = String.valueOf((char) itmp);break;}sRand += ctmp;Color color = new Color(20 + random.nextInt(110), 20 + random.nextInt(110), random.nextInt(110));g.setColor(color);// 绘制文字g.drawString(ctmp, 30 * i + 20, 35);}// 把生成的文字放到session中HttpSession session = request.getSession(true);session.setAttribute("code", sRand);System.out.println(session.getAttribute("code"));g.dispose(); // 释放g所占用的系统资源// 设置不缓存图片response.setHeader("Pragma", "No-cache");response.setHeader("Cache-Control", "No-cache");response.setDateHeader("Expires", 0);// 指定生成的响应图片,一定不能缺少这句话,否则错误.response.setContentType("image/jpeg");ServletOutputStream sos = response.getOutputStream();ImageIO.write(image, "jpeg", sos);sos.close();}}
判断验证码的类
package com.lj.action;import java.io.IOException;import java.io.OutputStream;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class LoginCheck extends HttpServlet {/** * 判断验证码 */@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {resp.setContentType("text/html; charset=UTF-8");//转码//得到项目路径String basePath = req.getScheme()+"://"+req.getServerName()+":"+req.getServerPort()+req.getContextPath()+"/";String checkCode=req.getParameter("checkCode");String sessionCode=(String)req.getSession().getAttribute("code");PrintWriter out=resp.getWriter();if(checkCode==null || "".equals(checkCode)){out.write("<script>alert('请输入验证码');location.href='"+basePath+"index.jsp'</script>");}else if(!checkCode.equalsIgnoreCase(sessionCode)){out.write("<script>alert('验证码错误');location.href='"+basePath+"index.jsp'</script>");}else{out.write("<script>alert('登录成功');location.href='"+basePath+"login.jsp'</script>");}out.flush();out.close();}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {// TODO Auto-generated method stubthis.doGet(req, resp);}}
效果图展示
本文大量参考了 "程序员-形同陌路" 的博客,只做了很少修改,大家可以去看他的博客,更详细。
博客地址:http://blog.csdn.net/lulei9876/article/details/8365500/
阅读全文
0 0
- JAVA实现验证码的功能
- Java实现验证码功能
- Java实现验证码验证功能
- Java实现验证码验证功能
- Java实现验证码验证功能
- 验证码功能的实现
- 验证码功能的实现
- 验证码功能的实现
- 验证码的功能实现
- 验证码的功能实现
- 【java】Java验证码功能实现
- 使用Java程序实现随机验证码功能的实例
- 使用Java程序实现随机验证码功能的实例
- 解析Java实现随机验证码功能的方法详解
- java web servlet来实现验证码的功能
- java web 生成图片验证码的功能实现
- java实现登录页面的验证码功能
- Java EE中验证码功能的实现讲解
- 请求网络 获取数据格式
- Effective c++ 学习笔记(六)
- ListView 条目显示点击
- hive 换行符特殊字符规避
- mysql的5中查询子句之一where条件查询
- JAVA实现验证码的功能
- 配置文件恢复(双重匹配)
- java web阿里云部署
- IDE/SCSI/VIRTIO区别
- protobuf在使用的时候使用静态链接库方式
- 视觉slam学习资料
- 飞昂之雪 关于springmvc跨域
- Delphi D10.1 移动开发中APP界面基本布局(一)
- UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
日升月落
李日升
日升月沉
日升机械
日升动画
日升月更
日升图片
日升论坛
东方日升新能源股份有限公司
东方日升股票
闻说鸡鸣见日升
十月金秋红日升
东方日升公司为啥口碑这么差
300118东方日升
日华
日华念什么
日华读什么
华日
一个日一个华读什么
一个日一个华
华日冰箱
华日河粉机
华日家具价格表
华日粉丝机
华日家具黑胡桃系列
华日水曲柳家具
华日黑胡桃木家具
华日冰箱温度调节
华日红薯粉条机
华日木门
华日冰柜质量怎么样
华日实木家具价格表
晔
3月16日家博会
3月9日家博会
君子博学而日参省乎已
4月12日家博会
2016农历
曰历下载到桌面
日力
历日