js实现与后台的数据传输(验证码的实现,,个人理解,jquery 提供的ajax)

先上效果图:

点击获取验证码,页面无变化

我这儿是在后台得到一个四位数验证码,在实际运用中可以用邮件的形式发送给用户,或者短信服务商提供的接口,发送给用户。

 

输入验证码:

点击确定:实现跳转验证

看后台:

进行验证成功

 

接下来看具体的实现:

前期准备:

导入js:前往jqury官网下载

或者我给的资源:

工程结构:

jsp:页面代码:重点在js里面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>欢迎登录</title>
<script type="text/javascript" src="js/jquery-3.4.1.min.js"></script>
</head>
<body>
<form action="compare.action">
手机号:<input type="text" id="name" name="phone"></br>
验证码:<input type="text" name="code">
<button name="btn" type="button" οnclick="sendMsg()">发送验证码</button></br>
<input type ="submit" value="确定">
</form></body>
<script type="text/javascript">
function sendMsg() {
    
        var number = document.getElementById("name").value;//获取电话的值

        alert(number);
        if (number!="") {
            alert("你好你已近进入")
            $.ajax({
                url : "test.action",  //发送请求test.action为url,你获取值的地址
                type : "post",//这里采用的post方式传值
                data : {
                    "number":number//传输的数据
                },
                success : function(result) {
                    sms = result;//成功以后返回的结果
                }
            });
        } else {
            alert("请输入手机号");
            return false;
        }
}
</script>
</html>

javaweb:后端代码:(重点在dopost里面)

package com.action;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class Test
 */
@WebServlet("/test.action")
public class Test extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Test() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.getRequestDispatcher("WEB-INF/test.jsp").forward(request, response);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String number =request.getParameter("number");//获取传过来的值电话号
        HttpSession session= request.getSession();//创建session对象
        session.setAttribute("number", number);,存入电话号
        TestMath tm =new TestMath();//生成随机数的工具类
        int code =tm.getMath();
        session.setAttribute("code", code);//存入随机数
        System.out.println(number);
    }

}

 

生成随机数的工具类:(我的做法不优)

package com.action;

import java.util.Random;

public class TestMath {
    
    public int getMath()
    {
        int a=0;
        Random ran =new Random();
        for(int i=0;i<100;i++)
        {
         a =ran.nextInt(10)+ran.nextInt(10000);
        if(a>1000)
        {
            System.out.println(a);
            break;
        }
        }
        return a;
    }

}

点击确定以后,跳转到compare.action(重点在doGet)

 

package com.action;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class Compare
 */
@WebServlet("/compare.action")
public class Compare extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Compare() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        response.setCharacterEncoding("UTF-8");
        request.setCharacterEncoding("UTF-8");
        //以上是字符处理
        String phone=request.getParameter("phone");
        String code=request.getParameter("code");//得到用户输入的验证码和电话号
        HttpSession session =request.getSession();
        String session_phone=session.getAttribute("number").toString();
        String session_code=session.getAttribute("code").toString();//得到session存放的电话号和验证码
        if(phone.equals(session_phone)&&code.equals(session_code))
        {
            System.out.println("验证码正确");//输入和session里面的电话号验证码相同则输出(实际运用可以登录成功或者注册成功)
        }
        else
        {
            System.out.println("验证码错误");
        }
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

 

 

采用ajax技术实现的图形验证码,在前端进行验证。验证码信息为图片。每一行代码均有注释,通俗易懂。 实现步骤: 1、创建web工程 2、在jsp页面,编写一个 3、编写一个servlet,在servlet中产生图形验证码 ------------------------------------------------------------ //1、给客户端作出的回应是以图片的方式来回应 response.setContentType("image/jpeg"); //2、创建一个图形缓冲区,用于绘制图形 (宽度,高度,颜色的生成方案) BufferedImage image = new BufferedImage(800,600,BufferedImage.TYPE_INT_RGB); //3、创建一支画笔(图形设备接口)用于绘图 Graphics g = image.getGraphics(); //4、指定图笔的颜色 g.setColor(getColor(200,256)); //5、绘制一个矩形框,作为验证码的背景 g.fillRect(0,0, 800,600); //产生一个输出流,准备把图片以流的方式,输出到客户端 OutputStream out = response.getOutputStream(); //输出在图形缓冲区中,绘制的图片 ImageIO.write(image,"jpg",out); //关闭流 out.close(); //随机生成背景颜色 private Random rd = new Random(); //产生随机数类 public Color getColor(int start,int end){ int r = start+rd.nextInt(end-start); int g = start+rd.nextInt(end-start); int b = start+rd.nextInt(end-start); return new Color(r, g, b);//根据三原色的值,随机在指定范围内,生成一种颜色 } --------------------------------------------------------------------------- 0-120 比较适合文字的颜色 100-200 适合干扰线条的颜色 200-255 适合背景颜色 --------------------------------------------------------------------------- 生成图片中的文字: 1、先编写一个字符串,包含:数字,大小字母 private String s = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 2、在产生背景之后,编写如下代码,产生四个字符(并且,把生成字符,保存在session中,在登录的时候用来做判断) String code=""; //用于保存生成的四个字符 for(int i=0;i<4;i++){ //生成一个随机数,它的取值范围,一定要在s这个字符串的长度范围之内 int index = rd.nextInt(s.length()); //2 //把index作为下标,来取得字符串的中某一个字符 char c = s.charAt(index); //指定文字的颜色----深色段 g.setColor(getColor(0,120)); //创建一个字体 Font f = new Font("隶书",Font.ITALIC|Font.BOLD,60+rd.nextInt(60)); //把字体关联到画笔 g.setFont(f); code+=c; //把生成的字符连接成一个字符串 //把文字输出到图片上 g.drawString(String.valueOf(c), 100+i*80+rd.nextInt(100),200+rd.nextInt(150)); } request.getSession().setAttribute("code",code);//把生成的验证码信息,存储到session中,登录的时候,用来作判断 ------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值