注册页面的验证码的实现

验证码

主要:绘制,验证

  在一些网站的注册页面,通常在最后会让用户输入验证码,以此防止恶意注册,有些也会在登陆页面,防止暴力破解密码等.

  页面的验证码,实际上是一个图片,这个图片事先人们是不知道的,它是由程序随机绘制成的,并且,在产生的时候,程序记录下来了它的值.(便于后面的验证)

  

  servlet 服务器小程序,可以实现绘制验证码的功能,绘制的步骤如下:

  1.建立图片缓存对象

    BufferImage bi = new BufferImage(width,height,绘制类型参数);

    原型:BufferedImage(arg0, arg1, arg2)

  2.得到绘制对象

    Graphics g = bi.getGraphics();

  3.设置底纹颜色

    Color c = new Color(arg0,arg1,arg2);// 3个参数分别是三原色的值.

    g.setColor(c);

    g.fillRect(0, 0, 70, 30);       //填充矩形,0,0 表示的起始点.

  4.产生随机数字,得到随机字符,对图像进行绘制 (并且记录下来)

    字符区间:char[] ch = "asdfghjklzxcvbnmASDFGHJKLZXCVBNM123456789".toCharArray();

    字符缓存:StringBuffer sb = new StringBuffer();

    随机数 :Random r = new Random();

    //逐个绘制随机字符 并设置特定的颜色

    for(int i=0;i<4;i++)

    {

      int index = r.nextInt(ch.length()); //产生一个随机数

      //对字符分别设置绘制字体颜色

      g.setFont(new Font("宋体",Font.Bold,20));                //设置宋体,20号字体

      g.setColor(new Color(r.nexInt(255),r.nexInt(255),r.nexInt(255)));  //设置随机颜色,

      g.drawString(ch[index]+" ",i*20,25);                   //绘制字符,后面的参数为位置

      sb.append(ch[index]);  //添加字符到字符缓存区,(追加)

    }

    request.getSession().setAttribute("picCode",sb.toString());        //将验证码放到session中,方便后面的验证

   5.通过图片IO写到前台

     ImageIO.write(bi,"JPG",response.getOutputStream());  //通过输出流写到前台, JPG格式

到这里就能够在页面上面看到随机生成的验证码图片了.

验证:

  验证就是在注册界面或者是登陆界面活取验证码 ,然后从session中活取验证码,然后二者比较相等,验证是否输入正确.

  从session中活取验证码

  String checkCode = request.getSession().getAttribute("picCode");

  从前台活取输入的验证码

  String code  = request.getParameter("code");

  验证

  if(checkCode.equalsIgnoreCase(code)==false) response.sendRedirect("register.jsp");   //验证不成功跳转到制定页面

至此,验证码的相关基础的内容已经完毕,

代码:

myImage.java (servlet程序)

 1 package cn.hpu.servlet;
 2
 3 import java.awt.Color;
 4 import java.awt.Font;
 5 import java.awt.Graphics;
 6 import java.awt.image.BufferedImage;
 7 import java.io.IOException;
 8 import java.nio.Buffer;
 9 import java.util.Random;
10
11 import javax.imageio.ImageIO;
12 import javax.servlet.ServletException;
13 import javax.servlet.annotation.WebServlet;
14 import javax.servlet.http.HttpServlet;
15 import javax.servlet.http.HttpServletRequest;
16 import javax.servlet.http.HttpServletResponse;
17
18 import sun.net.NetworkServer;
19
20 /**
21  * Servlet implementation class myImage
22  */
23 @WebServlet("/myImage")
24 public class myImage extends HttpServlet {
25     private static final long serialVersionUID = 1L;
26
27     /**
28      * @see HttpServlet#HttpServlet()
29      */
30     public myImage() {
31         super();
32         // TODO Auto-generated constructor stub
33     }
34
35     /**
36      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
37      */
38     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
39         // TODO Auto-generated method stub
40 //        response.getWriter().append("Served at: ").append(request.getContextPath());
41         doPost(request, response);
42
43     }
44
45     /**
46      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
47      */
48     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
49         // TODO Auto-generated method stub
50 //        doGet(request, response);
51         request.setCharacterEncoding("UTF-8");
52         response.setCharacterEncoding("UTF-8");
53
54         BufferedImage bi =new BufferedImage(70,30, BufferedImage.TYPE_INT_RGB);
55         Graphics g = bi.getGraphics();
56         Color c = new Color(100, 190,180);
57         g.setColor(c);
58         g.fillRect(0, 0, 70, 30);
59
60
61         char[] ch = "asdfghjklzxcvbnmASDFGHJKLZXCVBNM123456789".toCharArray();
62         StringBuffer sb= new StringBuffer();
63         Random r = new Random();
64
65         for (int i = 0; i < 4; i++) {
66             int index = r.nextInt(ch.length);
67             Font f = new Font("宋体",Font.BOLD, 20);
68             g.setFont(f);
69             g.setColor(new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255)));
70             g.drawString(ch[index]+" ", i*18+3, 20);
71             sb.append(ch[index]);
72         }
73         request.getSession().setAttribute("picCode", sb.toString());
74         ImageIO.write(bi, "JPG", response.getOutputStream());
75
76
77     }
78
79 }

register.java (servlet程序) 

 1 package cn.hpu.servlet;
 2
 3 import java.io.IOException;
 4 import java.io.PrintWriter;
 5 import java.sql.Date;
 6
 7 import javax.servlet.ServletException;
 8 import javax.servlet.annotation.WebServlet;
 9 import javax.servlet.http.HttpServlet;
10 import javax.servlet.http.HttpServletRequest;
11 import javax.servlet.http.HttpServletResponse;
12
13 import org.apache.catalina.connector.Response;
14
15 import cn.hpu.model.user;
16 import cn.hpu.service.StuManager;
17 import cn.hpu.service.StuManagerimplement;
18
19 /**
20  * Servlet implementation class register
21  */
22 @WebServlet("/register")
23 public class register extends HttpServlet {
24     private static final long serialVersionUID = 1L;
25
26     /**
27      * @see HttpServlet#HttpServlet()
28      */
29     public register() {
30         super();
31         // TODO Auto-generated constructor stub
32     }
33
34     /**
35      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
36      */
37     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
38         // TODO Auto-generated method stub
39         response.getWriter().append("Served at: ").append(request.getContextPath());
40         doPost(request, response);
41     }
42
43     /**
44      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
45      */
46     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
47         // TODO Auto-generated method stub
48 //        doGet(request, response);
49         //设置中文
50         request.setCharacterEncoding("UTF-8");
51         response.setCharacterEncoding("UTF-8");
52
53         //获取数据
54         String name = request.getParameter("name");
55         String pwd = request.getParameter("password");
56         String code = request.getParameter("code");
57         String checkCode = (String) request.getSession().getAttribute("picCode");
58
59         user usr = new user();
60         usr.setName(name);
61         usr.setCode(code);
62         usr.setPassword(pwd);
63
64         if(checkCode.equalsIgnoreCase(code)==false){
65
66 //            PrintWriter out = response.getWriter();
67 //            out.println("验证码错误!\n3秒后自动跳转注册页面");
68
69             response.sendRedirect("register.jsp");
70         }
71
72         StuManager stuM = new StuManagerimplement();
73         boolean flag= false ;
74         try {
75             flag = stuM.add(usr);
76             if(flag) response.sendRedirect("index.jsp");
77
78         } catch (Exception e) {
79 // TODO: handle exception
80         }
81         }
82
83 }

 

时间: 2024-08-09 02:19:03

注册页面的验证码的实现的相关文章

android一个注册页面和验证码的实现

先上效果图: 验证码采用PHP返回的imageview来实现,xml如下: <?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height=&

页面实现验证码功能,点击“注册”按钮后,无论是否完成注册,验证码都能够自动刷新

要求页面实现验证码功能,点击"注册"按钮后,无论是否完成注册,验证码都能够自动刷新 <script> function validteCode() { var codes = new Array(4);       // var colors = new Array("Red","Green","Gray","Blue","Maroon","Aqua",&

HTML简单登录和注册页面及input标签诠释

今天第一次接触HTML这种语言,虽然不能完全理解其中的意思,过去学的英语单词几乎也忘了差不多了,但是感觉进入这门语言学习之后就没有那么难了,一步一步来吧!下面巩固下今天学内容: HTML是一种超文本标记语言.HTML 标签是由尖括号包围的关键词,比如 <html>.HTML 标签通常是成对出现的,比如 <b> 和 </b>: <html> 与 </html> 之间的文本描述网页: <body> 与 </body> 之间的文

python Django注册页面显示头像

python Django注册页面显示头像(views) def register(request): ''' 注册 :param request: :return: ''' if request.method=='GET': obj = Register(request) return render(request, 'register.html', {'obj': obj}) else: obj = Register(request,request.POST,request.FILES) i

artdialog 异步加载页面 生成验证码

artdialog  异步加载一个页面 需求:例如现在好多网站的登录或注册 都是点击弹出一个层出来 然后在上面登录.注册 这个登录可能在网站的每个页面都会有,但是我们又不能在每个页面都这一段html加载出来不显示,到需要用的时候,在给shou出来,这样做于情于理都说!不!!过!!!去!!!!!! 恰好以前接触过artdialog  不多说上代码,(注意思维,代码是死的方法是活,解决需求不一定非要这个方法 ) 1.页面html代码 1 <head runat="server">

HTML&amp;CSS——网站注册页面

1.表单标签 所有需要提交到服务器端的表单项必须使用<form></form>括起来! form 标签属性:  action,整个表单提交的位置(可以是一个页面,也可以是一个后台 java 代码) method,表单提交的方式(get/post/delete--等 7 种) Get 与 post 提交方式的区别?[默认提交方式为 get] Get 提交方式,所有的内容显示在地址栏,不够安全,长度有限制. Post 提交方式,所有的内容不会显示在地址栏,比较安全,长度没有限制 1)文

宠喵club注册页面

这个注册页面运用了正则表达式的方法,比如验证手机号码,验证密码等等: <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <link rel="shortcut icon&

新浪微博注册页面效果图

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 2 "http://www.w3.org/TR/xhtml1/TDT/xhtml1-strit.dtd"> 3 <html> 4 <head> 5 <meta http-equiv="Content-Type" content="text/html;charset=UTF-8&q

ajax注册页面异步验证

ajax的原理大家可以看上图 如何获得Ajax对象? XMLHttpRequest没有标准化,要区分浏览器.function getXhr(){var xhr = null;if(window.XMLHttpRequest){//非ie浏览器xhr = new XMLHttpRequest();}else{//ie浏览器xhr = new ActiveXObject('MicroSoft.XMLHttp');}return xhr;} 下面我把代码贴出来: 1.注册页面regist.jsp <%