【web案例】赵雅智_校验验证码
来源:互联网 发布:上班族减肥知乎 编辑:程序博客网 时间:2024/05/16 05:33
- RandomImage.java
- 保存src
- 获取到src,把src写进去,把数字追加到字符缓冲区,把字符缓冲区内容返回给调用者,在方法前加返回值
- 此方法有String返回值
- 返回值
- 调用setRandouNum()方法时,获取验证码内容
- 获取session验证码是什么放到session里
- LoginServlet.java
- 获取填写的验证码
- 与session里的值比较
- 判断验证码是否一致
- 设置字符集
- login,html
- 验证码看不清点击图片刷新
主页面:login.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>login.html</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="this is my page"> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> </head> <body> <form action="/bookCookie/LoginServlet" method="post"> 用户名:<input type="text" name="username"><br/><br/> 密码:<input type="password" name="password"><br/><br/> 验证码<input type="text" name="checkcode"><br> <img src="./RandomImage"><br/><br/> <input type="submit" value="登录"> </form> </body></html>
新建servlet
RandomImage.java
package com.hbsi.session;import java.awt.*;import java.awt.image.BufferedImage;import java.io.IOException;import java.io.PrintWriter;import java.util.Random;import javax.imageio.ImageIO;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class RandomImage extends HttpServlet {public static final int WIDTH = 130;public static final int HEIGHT = 30;public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);Graphics g = image.getGraphics();setBackGrount(g);setBorder(g);setRandomLine(g);//5.调用setRandouNum()方法时,获取验证码内容String checkcode = setRandomNum(g);//6.获取session验证码是什么放到session里request.getSession().setAttribute("imgcode", checkcode);response.setContentType("image/jpeg");response.setHeader("Pragma", "no-cache");response.setHeader("Cache-Control", "no-cache");response.setIntHeader("Expires",-1);ImageIO.write(image,"JPEG",response.getOutputStream());}//产生验证码//3.此方法有String返回值private String setRandomNum(Graphics g) {// TODO Auto-generated method stub//g.setColor(Color.BLACK);g.setFont(new Font("宋体",Font.BOLD,20));Random random = new Random();//1.保存srcStringBuffer sb = new StringBuffer();int x=10;for(int i=0;i<4;i++){//产生随机数String str = String.valueOf(random.nextInt(10));//2.获取到src,把src写进去,把数字追加到字符缓冲区,把字符缓冲区内容返回给调用者,在方法前加返回值sb.append(str);g.setColor(new Color(random.nextInt(255),random.nextInt(255),random.nextInt(255)));int degree = random.nextInt()%30;((Graphics2D)g).rotate(degree*Math.PI/180, x, 20);g.drawString(str, x, 20);((Graphics2D)g).rotate(-degree*Math.PI/180, x, 20);x +=30;}//4.返回值return sb.toString();}private void setRandomLine(Graphics g) {// TODO Auto-generated method stubg.setColor(Color.blue);Random random = new Random();for(int i=0;i<5;i++){int x1 = random.nextInt(WIDTH);int y1 = random.nextInt(HEIGHT);int x2 = random.nextInt(WIDTH);int y2 = random.nextInt(HEIGHT);g.drawLine(x1, y1, x2, y2);}}private void setBorder(Graphics g) {// TODO Auto-generated method stubg.setColor(Color.BLUE);g.drawRect(1, 1, WIDTH-2, HEIGHT-2);}private void setBackGrount(Graphics g) {// TODO Auto-generated method stubg.setColor(Color.PINK);g.fillRect(0, 0, WIDTH, HEIGHT);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {}}
新建LoginServlet
package com.hbsi.session;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.hbsi.dao.UserDao;import com.hbsi.dao.UserDaoImpl;import com.hbsi.domian.User;public class LoginServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 10.设置字符集response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();String username = request.getParameter("username");String password = request.getParameter("password");//7.获取填写的验证码String checkcode = request.getParameter("checkcode");//8.与session里的值比较String imgcode = (String) request.getSession().getAttribute("imgcode");//9.判断验证码是否一致if(checkcode!=null && imgcode!=null && checkcode.equals(imgcode)){//处理登陆请求UserDao ud = new UserDaoImpl();User user = ud.find(username, password);if(user!=null){request.getSession().setAttribute("user",user);response.sendRedirect("/bookCookie/IndexServlet");}out.print("用户名密码错");}else{out.print("验证码错误!!!");}}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}
验证码看不清点击图片刷新
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>login.html</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="this is my page"> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <script type="text/javascript"> function change(img){ img.src = img.src +"?"+ new Date().getTime(); } </script> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body> <form action="/bookCookie/LoginServlet" method="post"> 用户名:<input type="text" name="username"><br/><br/> 密码:<input type="password" name="password"><br/><br/> 验证码<input type="text" name="checkcode"><br> <img src="./RandomImage" onclick="change(this)"><br/><br/> <input type="submit" value="登录"> </form> </body></html>
点击粉色图片后:
- 【web案例】赵雅智_校验验证码
- JSP案例_简单实现验证码
- web开发验证码生成和验证码校验
- 常见对象_校验邮箱案例
- Web前端案例_正则表达式案例
- 验证码校验
- 手机验证码校验
- 验证码校验
- java图形验证码生成工具类及web页面校验验证码
- java图形验证码生成工具类及web页面校验验证码
- java图形验证码生成工具类及web页面校验验证码(转)
- java图形验证码生成工具类及web页面校验验证码
- java图形验证码生成工具类及web页面校验验证码
- WEB——Session案例一之验证码
- 注册验证码校验-立即校验
- 常见对象_如何校验一个QQ号码案例
- Web前端案例_自定义动画
- 自定义验证码校验对话框
- Android 中常用RGB值
- ERP项目的小经验(待续...)
- 使用SharePoint2010弹出窗口
- 关于学习boost时的那些零碎记录(回忆里待续)
- eclipse3.5.2集成myeclipse8.x
- 【web案例】赵雅智_校验验证码
- hdu 2544 最短路问题
- Ext中renderer用法及参数
- 黑马程序员_java 单例设计模式
- js得到本日,本周,本月的起始时间和某月的最后一天
- Objective-C并不像看起来的那么难
- 23 Awesome Themes for Ubuntu Linux
- 如何真正自己编出完整程(序编程的最新体会)
- SLT HANA connection (Set HANA connection environment)