300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 最新web/java/jsp实现发送手机短信验证码和邮箱验证码的注册登录功能(详细)

最新web/java/jsp实现发送手机短信验证码和邮箱验证码的注册登录功能(详细)

时间:2019-01-04 23:17:30

相关推荐

最新web/java/jsp实现发送手机短信验证码和邮箱验证码的注册登录功能(详细)

最新web/java/jsp实现发送手机短信验证码和邮箱验证码的注册登录功能(详细)

最近几天有人需要帮忙做一个关于发送验证码的功能,之前没有做过,于是我鼓捣一阵子,记录一下关于web项目中注册登录常用的手机验证码和邮箱验证码的发送。

作为一个演示项目,我没有使用任何框架,用了一个简单的jsp+Servlet,当然用boostrap美化了一下。代码带有注释,非常简单易懂。

一、手机验证码

由于手机短信属于增值业务,那么一般来说都是需要一些资金的。毕竟短信费是花钱的!所以一般来说都是调用第三方API来支持。

1.1、API申请

我们使用的API平台是:秒滴短信平台,

为啥用这个呢?因为他好?不一定,主要是因为他注册免费先送10块钱。做个测试功能足够了。

废话不多说,网站自行注册然后登录:

然后在开发者信息里面获得你自己的AUTH_TOKEN:记录一下API需要的东西

1.2、在配置管理中新建一个模板

这个模板就是发送验证码的模板。

1.3、自定义短信就要认证

注意了!

这个地方有个难处,就是必须认证以后才能发生自定义的短信内容。

我要发自定义的,所以我要认证。认证是需要公司营业执照的。

(太麻烦?自己搞定不了?实际上很简单,私信我,我有妙招)

看一下API接口要求:

验证码通知短信接口说明

主要的是这里:

反正完成了整个第三方平台的API接口以后。

1.4、编写java手机短信发送代码

我们就可以开始建项目,写代码了。

新建项目什么的我都懒得说了,能做这个功能的这些都是小事情了。

看一下我的项目结构吧:

直接上代码了,注释都写在里面了。

为了方便理解,我们倒过来写。

新建login.jsp:

源码:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()+ path + "/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>手机登录</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><link rel="stylesheet" href="css/bootstrap.min.css" /><link rel="stylesheet" href="css/bootstrap-datetimepicker.min.css" /><script type="text/javascript" src="js/jquery-3.2.1.min.js"></script><script type="text/javascript" src="js/bootstrap.min.js"></script><style type="text/css">#login {width: 450px;height: 100px;margin: 126px auto;}#btn {margin-left: 100px;margin-top: -25px;width: 120px;height: 25px;font-size: 11px;}body {background-color: #ecfcf9;}</style></head><script type="text/javascript">var InterValObj; //timer变量,控制时间var count = 60; //间隔函数,1秒执行var curCount;//当前剩余秒数function sendMessage() {curCount = count;$("#btn").attr("disabled", "true");$("#btn").val(curCount + "秒后可重新发送");InterValObj = window.setInterval(SetRemainTime, 1000); //启动计时器,1秒执行一次请求后台发送验证码 TODO}//timer处理函数function SetRemainTime() {if (curCount == 0) {window.clearInterval(InterValObj);//停止计时器$("#btn").removeAttr("disabled");//启用按钮$("#btn").val("重新发送验证码");} else {curCount--;$("#btn").val(curCount + "秒后可重新发送");}}</script><body><div class="container"><div id="login"><fieldset><div id="legend" class=""><legend class="">用户登录</legend></div><form class="form-horizontal" role="form"><div class="form-group"><label class="col-sm-2 control-label">手机号</label><div class="col-sm-5"><input type="text" class="form-control" id="phone" name="phone"placeholder="请输入您的手机号" required></div></div><div class="form-group"><label class="col-sm-2 control-label">验证码</label><div class="col-sm-3"><input type="code" class="form-control" id="code" name="code"placeholder="验证码" required> <inputclass="btn btn-default" id="btn" name="btn" value="发送验证码"onclick="sendMessage()" /></div></div><div class="form-group"><div class="col-sm-offset-2 col-sm-10"><button type="button" class="btn btn-success" id="lo">手机号登录</button><a href="register.jsp" class="btn btn-info">邮箱注册</a></div></div></form></fieldset></div></div></body><script type="text/javascript">var sms = "";$("#btn").click(function() {var phone = $("#phone").val();if (phone != "") {$.ajax({url : "sendSMS", //发送请求 type : "post",data : {"phone" : phone},success : function(result) {sms = result;}});} else {alert("请输入手机号");return false;}});$("#lo").click(function() {var code = $("#code").val();if (code == "") {alert("请输入验证码");} else {if (sms == code) {window.location.href = "success.jsp";} else {alert("验证码错误");};};});</script></html>

根据ajax,我们 点击发送以后,会url : “sendSMS”, 发送请求到 sendSMS。

新建servlet类:

sendSMS.java:

package com.zout.controller;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 com.zout.util.GetMessageCode;/*** *@class_name:SendSms*@comments:登录 -发送手机短信验证码*@param:phone*@return: code*@author:邹涛/Zoutao*@createtime:2月23日*/@WebServlet("/sendSMS")public class SendSms extends HttpServlet {/** serialVersionUID*/private static final long serialVersionUID = 1L;@Overridepublic void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {String phone=req.getParameter("phone");//根据获取到的手机号发送验证码String code = GetMessageCode.getCode(phone); System.out.println(code);resp.getWriter().print(code);}}

在servlet当中我们调用GetMessageCode.getCode的方法,来发送短信。

新建GetMessageCode.java:

源码:

package com.zout.util;import .URLEncoderimport com.alibaba.fastjson.JSONObject;import mon.Config;import mon.HttpUtil;/*** *@class_name:GetMessageCode*@comments:调用手机短信API*@param:phone*@return: String*@author:邹涛/Zoutao*@createtime:2月22日*/public class GetMessageCode {private static String operation = "/industrySMS/sendSMS";//对应的API地址private static String accountSid = Config.ACCOUNT_SID;private static String to = "17121192629"; //改由前台传入private static String rod=smsCode(); //生成一个随机验证码private static String smsContent = "【柒晓白网络科技】您的验证码:"+rod+",如非本人操作,请忽略此短信。";//创建验证码public static String smsCode(){String random=(int)((Math.random()*9+1)*100000)+"";System.out.print("random验证码:"+random);return random;}//根据相应的手机号发送验证码public static String getCode(String phone){String tmpSmsContent = null;try{tmpSmsContent = URLEncoder.encode(smsContent, "UTF-8");}catch(Exception e){e.getMessage();}String url = Config.BASE_URL + operation;String body = "accountSid=" + accountSid + "&to=" + phone + "&smsContent=" + tmpSmsContent+ HttpUtil.createCommonParam();// 提交请求String result = HttpUtil.post(url, body);//(换行符) 剔除了平台无关性System.out.println("result:" + System.lineSeparator() + result);System.out.println(result.getClass());//字符串转json对象JSONObject jsonObject = JSONObject.parseObject(result); String respCode = jsonObject.getString("respCode");System.out.println(respCode);//反馈-00000状态码标识请求成功,String defaultRespCode="00000";if(defaultRespCode.equals(respCode)){return rod;}else{return defaultRespCode;}}}

注意:

在GetMessageCode类中,把smsContent改为你自己在平台上面建立的模板的样式,这里必须一致。

还有json是用的:import com.alibaba.fastjson.JSONObject;

阿里巴巴的jar包。

新建Config配置类

在mon包中新建Config.java:

源码:

package mon;/*** *@class_name:Config*@comments:系统常量*@param:自主填写API的授权码等信息*@return: String*@author:邹涛/Zoutao*@createtime:2月23日*/public class Config{/*** url前半部分*/public static final String BASE_URL = "/0822";/*** 开发者注册后系统自动生成的账号,可在官网登录后查看-修改为自己的。*/public static final String ACCOUNT_SID = "b38529a662bd4你自己的800f140";/*** 开发者注册后系统自动生成的TOKEN,可在官网登录后查看-修改为自己的。*/public static final String AUTH_TOKEN = "568ce19f6958467你自己的5080906341ae";/*** 响应数据类型, JSON或XML*/public static final String RESP_DATA_TYPE = "json";}

我标注的地方改成你自己的,(ACCOUNT_SID和AUTH_TOKEN)最好就改这两个就好了。去官网查询到自己的。上面有写。

新建HttpUtil请求类

在mon包中新建

HttpUtil.java 源码:

package mon;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import .URL;import .URLConnection;import java.text.SimpleDateFormat;import java.util.Date;import mons.codec.digest.DigestUtils;/*** *@class_name:HttpUtil*@comments:http请求工具*@param: 根据官网的API要求构建请求URL结构*@return: String结构*@author:邹涛/Zoutao*@createtime:2月23日*/public class HttpUtil{/*** 构造通用参数timestamp、sig和respDataType* * @return*/public static String createCommonParam(){// 时间戳SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");String timestamp = sdf.format(new Date());// 签名String sig = DigestUtils.md5Hex(Config.ACCOUNT_SID + Config.AUTH_TOKEN + timestamp);return "&timestamp=" + timestamp + "&sig=" + sig + "&respDataType=" + Config.RESP_DATA_TYPE;}/*** post请求* * @param url* 功能和操作* @param body* 要post的数据* @return* @throws IOException*/public static String post(String url, String body){System.out.println("url:" + System.lineSeparator() + url);System.out.println("body:" + System.lineSeparator() + body);String result = "";try{OutputStreamWriter out = null;BufferedReader in = null;URL realUrl = new URL(url);URLConnection conn = realUrl.openConnection();// 设置连接参数conn.setDoOutput(true);conn.setDoInput(true);conn.setConnectTimeout(5000);conn.setReadTimeout(20000);conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");// 提交数据out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");out.write(body);out.flush();// 读取返回数据in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));String line = "";boolean firstLine = true; // 读第一行不加换行符while ((line = in.readLine()) != null){if (firstLine){firstLine = false;} else{result += System.lineSeparator();}result += line;}} catch (Exception e){e.printStackTrace();}return result;}/*** 回调测试工具方法* * @param url* @param reqStr* @return*/public static String postHuiDiao(String url, String body){String result = "";try{OutputStreamWriter out = null;BufferedReader in = null;URL realUrl = new URL(url);URLConnection conn = realUrl.openConnection();// 设置连接参数conn.setDoOutput(true);conn.setDoInput(true);conn.setConnectTimeout(5000);conn.setReadTimeout(20000);// 提交数据out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");out.write(body);out.flush();// 读取返回数据in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));String line = "";boolean firstLine = true; // 读第一行不加换行符while ((line = in.readLine()) != null){if (firstLine){firstLine = false;} else{result += System.lineSeparator();}result += line;}} catch (Exception e){e.printStackTrace();}return result;}}

这个实际上就是要构建上面所写的API的请求体的方式。

必须按照人家官网的要求来,不然就接收不到你的短信发送请求。

对了,顺便在建立两个jsp文件:分别是fail.jsp和success.jsp,里面没有啥内容,就是标志一个成功一个失败即可。

上面就完成了整个手机短信发送的请求,于是我们在tomcat里面运行项目,看看:

浏览器输入:http://localhost:8080/EmailAndPhone/

手机验证码发送效果图:

输入手机号:

点击发送。

后台:

手机接收短信:

先输入错误的:

在输入正确的:

点击登录:

你可以在秒滴登录自己的账号,然后查看发送状态:

这就完成了一个手机验证码短信的发送过程。接下来是邮箱验证码的发送。

(提醒:一个手机号码一小时之类不能重复请求4次,你可以换号码来测试,注意看后台返回状态即可。)

二、邮箱验证码

在163和qq邮箱发送邮件之间,QQ比较难一些,所我们采用QQ邮箱来做。

2.1、开启POP3/SMTP协议

做这些之前,先要去QQ邮箱里帐号设置要开启POP3/SMTP协议。

选择账户,然后找到下面的地方,开启:

开启的时候,会给你一个java邮箱的授权码,你记得记录一下。网易同样道理。

比如我的:

成功开启POP3/SMTP服务: prktbfsmxxxxxj成功开启IMAP/SMTP服务: ehqvnfayxxxxxdf

由于java发送邮件这个功能比较简单,我们写一个java版和一个web版本来方便使用。

2.2、java版发送邮件:

在com.zout.util;包下新建一个Mail_java.java类来测试:

需要注意一点就是,在QQ中要求 开启SSL证书加密,否则会失败。

Mail_java.java:

package com.zout.util;import java.util.Properties;import javax.mail.Message;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;import com.sun.mail.util.MailSSLSocketFactory;/*** JavaMail发送邮件: java版本-与web无关* 前提是QQ邮箱里帐号设置要开启POP3/SMTP协议* * */public class Mail_java {public static void main(String[] args) throws Exception {Properties prop = new Properties();// 开启debug调试,以便在控制台查看prop.setProperty("mail.debug", "true");// 设置邮件服务器主机名prop.setProperty("mail.host", "");// 发送服务器需要身份验证prop.setProperty("mail.smtp.auth", "true");// 发送邮件协议名称prop.setProperty("mail.transport.protocol", "smtp");// 开启SSL加密,否则会失败MailSSLSocketFactory sf = new MailSSLSocketFactory();sf.setTrustAllHosts(true);prop.put("mail.smtp.ssl.enable", "true");prop.put("mail.smtp.ssl.socketFactory", sf);// 创建sessionSession session = Session.getInstance(prop);// 通过session得到transport对象Transport ts = session.getTransport();// 连接邮件服务器:邮箱类型,帐号,POP3/SMTP协议授权码 163使用:ts.connect("", "你自己的QQ", "prktbfsmrjhvbajj");// 创建邮件Message message = createSimpleMail(session);// 发送邮件ts.sendMessage(message, message.getAllRecipients());ts.close();}/*** @Method: createSimpleMail* @Description: 创建一封只包含文本的邮件*/public static MimeMessage createSimpleMail(Session session) throws Exception {// 获取6为随机验证码String[] letters = new String[] {"q","w","e","r","t","y","u","i","o","p","a","s","d","f","g","h","j","k","l","z","x","c","v","b","n","m","A","W","E","R","T","Y","U","I","O","P","A","S","D","F","G","H","J","K","L","Z","X","C","V","B","N","M","0","1","2","3","4","5","6","7","8","9"};String stringBuilder ="";for (int i = 0; i < 6; i++) {stringBuilder = stringBuilder + letters[(int)Math.floor(Math.random()*letters.length)];}// 创建邮件对象MimeMessage message = new MimeMessage(session);// 指明邮件的发件人message.setFrom(new InternetAddress("你自己的@"));// 指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发message.setRecipient(Message.RecipientType.TO, new InternetAddress("你自己的@"));// 邮件的标题message.setSubject("JavaMail测试");// 邮件的文本内容message.setContent("欢迎您注册【柒晓白网络科技】,账号注册验证码为(一分钟有效):"+stringBuilder+",请勿回复此邮箱", "text/html;charset=UTF-8");// 返回创建好的邮件对象return message;}}

以上需要导入jar包:

javax.mail-1.6.1.jar

把上面要求的地方改为你自己的。

然后运行java文件。不要告诉你不会?

效果图:如果出现报错:java.lang.ClassNotFoundException: javax.mail.internet.MimeMessage

解决办法: 导入activation-1.1.1.jar包。

上面是一个简单的java版本,现在写一个web版本。

2.3、web版邮箱发送

同样的,我们先写jsp页面吧:

新建一个register.jsp:

<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd"><html><head><base href="<%=basePath%>"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>邮箱注册</title><link rel="stylesheet" href="css/bootstrap.min.css" /><link rel="stylesheet" href="css/bootstrap-datetimepicker.min.css" /><script type="text/javascript" src="js/jquery-3.2.1.min.js"></script><script type="text/javascript" src="js/bootstrap.min.js"></script><style type="text/css">#register {width: 450px;height: 100px;margin: 50px auto;}#btn {margin-left: 197px;margin-top: -24px;width: 120px;height: 25px;font-size: 14px;color: #7904c9}body {background-color: #ecfcf9;}</style><script type="text/javascript">$(function(){$("#btn").click(function(){if($("#email").val()){$.ajax({type:"POST",url :"SendEmailServlet?random"+Math.random(),data:{email:$("#email").val(),},success:function(data){alert("验证码发送成功,请注意查收。");},})}else{alert("邮箱发送失败");$("#notice").html("请填写邮箱");setTimeout(function(){$("#notice").hide();},1000);}});// 判断用户是否可以注册$("#submit").click(function() {if ($("#email").val()) {$("#RegistForm").submit();} else {// 如果没有值$("#notice").html("请填写完整信息");setTimeout(function() {$("#notice").hide();}, 1000);}});});</script></head><body><div class="container"><div id="register"><form class="form-horizontal" id="RegistForm" method="post"action="${pageContext.request.contextPath}/RegistServlet"><fieldset><div id="legend" class=""><legend class="">用户注册</legend></div><div class="form-group"><!-- Text input--><label class="col-sm-2 control-label">账号</label><div class="col-sm-5"><input type="text" placeholder="请输入6位数账号..." class="form-control"required name="username"></div></div><div class="form-group"><label class="col-sm-2 control-label">密码</label><div class="col-sm-5"><input type="password" placeholder="请输入6位数密码..." requiredclass="form-control" name="password"></div></div><div class="form-group"><label class="col-sm-2 control-label">邮箱</label><div class="col-sm-5"><input type="email" placeholder="请填写邮箱地址..." class="form-control"id="email" name="email" required></div></div><div class="form-group"><label class="col-sm-2 control-label">验证码</label><div class="col-sm-5"><input type="text" name="code" id="code" placeholder="请输入邮箱的验证码"class="form-control" required> <input type="button" name="btn"class="btn btn-default" id="btn" value="发送验证码" /></div></div><span id="notice" class="hide">请先完成邮箱验证</span><br /><div class="form-group"><div class="col-sm-offset-2 col-sm-10"><a href="login.jsp" class="btn btn-success">返回登录</a> <inputclass="btn btn-info" type="submit" id="submit" value="邮箱注册" /></div></div></fieldset></form></div></div></body></html>

根据上面,我们点击发送验证码的时候,会请求:SendEmailServlet。

新建SendEmailServlet

于是新建一个SendEmailServlet.java:

package com.zout.controller;import java.io.IOException;import java.util.Properties;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.MimeMessage;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 com.zout.util.JavaMailUtil;import com.zout.util.RandomUtil;import com.zout.util.htmlText;/*** *@class_name:SendEmailServlet*@comments:注册- 发送邮箱验证码功能*@param:*@return: *@author:邹涛/Zoutao*@createtime:2月22日*/@WebServlet("/SendEmailServlet")public class SendEmailServlet extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("邮箱发送功能");try {String email = req.getParameter("email");JavaMailUtil.receiveMailAccount = email; // 给用户输入的邮箱发送邮件// 1、创建参数配置,用于连接邮箱服务器的参数配置Properties props = new Properties();// 开启debug调试props.setProperty("mail.debug", "true");// 发送服务器需要身份验证props.setProperty("mail.smtp.auth", "true");// 设置右键服务器的主机名props.setProperty("mail.host", JavaMailUtil.emailSMTPHost);// 发送邮件协议名称props.setProperty("mail.transport.protocol", "smtp");// 2、根据配置创建会话对象,用于和邮件服务器交互Session session = Session.getInstance(props);// 设置debug,可以查看详细的发送logsession.setDebug(true);// 3、创建一封邮件String code = RandomUtil.getRandom();System.out.println("邮箱验证码:" + code);String html = htmlText.html(code);MimeMessage message = JavaMailUtil.creatMimeMessage(session, JavaMailUtil.emailAccount,JavaMailUtil.receiveMailAccount, html);// 4、根据session获取邮件传输对象Transport transport = session.getTransport();// 5、使用邮箱账号和密码连接邮箱服务器emailAccount必须与message中的发件人邮箱一致,否则报错transport.connect(JavaMailUtil.emailAccount, JavaMailUtil.emailPassword);// 6、发送邮件,发送所有收件人地址transport.sendMessage(message, message.getAllRecipients());// 7、关闭连接transport.close();// 写入sessionreq.getSession().setAttribute("code", code);} catch (Exception e) {e.printStackTrace();req.getSession().setAttribute("error", "邮件发送失败");}}}

需要用到servlet的jar包哟,你有tomcat就会自动导入进去。

当中用到三个工具类,新建工具类。

新建工具类JavaMailUtil

在com.zout.util包下新建

JavaMailUtil.java

package com.zout.util;import java.io.IOException;import java.util.Date;import javax.mail.MessagingException;import javax.mail.Session;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;/*** *@class_name:JavaMailUtil*@comments:定义邮箱发送配置接口*@param:web版本*@return: *@author:邹涛/Zoutao*@createtime:2月23日*/public class JavaMailUtil {// 发件人的邮箱-修改为自己的public static String emailAccount = "你自己的@";// 发件人邮箱授权码-修改为自己的public static String emailPassword = "prktbf你自己vbajj";// 发件人邮箱服务地址-修改为自己的public static String emailSMTPHost = "";// 收件人邮箱public static String receiveMailAccount = "";/*** 创建一封邮件(发件人、收件人、邮件内容)* @param session* @param sendMail* @param receiveMail* @param html* @return* @throws MessagingException* @throws IOException * cc:抄送* Bcc:密送* To:发送*/public static MimeMessage creatMimeMessage(Session session,String sendMail,String receiveMail,String html) throws MessagingException, IOException {// 1、创建一封邮件对象MimeMessage message = new MimeMessage(session);// 2、From:发件人message.setFrom(new InternetAddress(sendMail, "发件人昵称", "UTF-8"));// 3、To:收件人(可以增加多个收件人:抄送或者密送)message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail, "张三", "UTF-8"));// 4、Subject:邮件主题message.setSubject("邮箱验证","UTF-8");// 5、Content:邮件正文(可以使用Html标签)message.setContent(html,"text/html;charset=UTF-8");// 6、设置发送时间message.setSentDate(new Date());// 7、保存设置message.saveChanges();// 8、将该邮件保存在本地//OutputStream out = new FileOutputStream("D://MyEmail" + UUID.randomUUID().toString() + ".eml");//message.writeTo(out);//out.flush();//out.close();return message;} }

把对应地方改为你自己的。

新建RandomUtil工具类

在com.zout.util包下新建RandomUtil;

RandomUtil.java:

package com.zout.util;/*** *@class_name:RandomUtil*@comments:生成随机6位数验证码*@param:*@return: *@author:邹涛/Zoutao*@createtime:2月23日*/public class RandomUtil {public static void main(String[] args) {// 控制台打印System.out.println(RandomUtil.getRandom());}// 生成6位数随机验证码public static String getRandom() {String[] letters = new String[] {"q","w","e","r","t","y","u","i","o","p","a","s","d","f","g","h","j","k","l","z","x","c","v","b","n","m","A","W","E","R","T","Y","U","I","O","P","A","S","D","F","G","H","J","K","L","Z","X","C","V","B","N","M","0","1","2","3","4","5","6","7","8","9"};String code ="";for (int i = 0; i < 6; i++) {code = code + letters[(int)Math.floor(Math.random()*letters.length)];}return code;}}

新建内容htmlText类

在com.zout.util包下新建

htmlText.java:

package com.zout.util;/*** *@class_name:htmlText*@comments:定义邮件内容*@param:*@return: *@author:邹涛/Zoutao*@createtime:2月23日*/public class htmlText {// 返回页面Html携带的6位随机码public static String html(String code) {String html = "Email地址验证<br/>"+ "这封邮件是由【柒晓白网络科技】发送的。<br/>"+"你收到这封邮件是【柒晓白网络科技】进行新用户注册或者用户修改Email使用这个地址。<br/>"+"账号激活声明<br/>"+"请将下面的验证码输入到提示框即可:<h3 style='color:red;'>" + code + "</h3><br/>";return html;}}

这就完成了邮件发送的功能。

然后我们还需要注册接收的servlet。

因为在jsp当中,点击注册的时候,发请求:RegistServlet。

新建一个servlet类:

RegistServlet.java

package com.zout.controller;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;/*** *@class_name:RegistServlet*@comments: 注册请求处理*@param:验证码校验 *@return: jsp跳转*@author:邹涛/Zoutao*@createtime:2月22日*/@WebServlet("/RegistServlet")public class RegistServlet extends HttpServlet{private static final long serialVersionUID = 1L;@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {// 获取session中的验证码String sessionCode = (String) req.getSession().getAttribute("code");System.out.println(sessionCode);if(sessionCode != null) {// 获取页面提交的验证码String inputCode = req.getParameter("code");System.out.println("页面提交的验证码:" + inputCode);if (sessionCode.toLowerCase().equals(inputCode.toLowerCase())) {String username = req.getParameter("username");String password = req.getParameter("password");System.out.println("页面提交:" + username+password);// 验证成功,跳转成功页面req.setAttribute("username", username);req.getRequestDispatcher("/success.jsp").forward(req, resp);}else {// 验证失败req.getRequestDispatcher("fail.jsp").forward(req, resp);}}else {// 验证失败req.getRequestDispatcher("fail.jsp").forward(req, resp);}// 移除session中的验证码req.removeAttribute("code");}}

接收一下注册请求,然后跳转到指定页面。

好了整个邮箱注册已经完成。开始运行我们的项目了。

浏览器输入:http://localhost:8080/EmailAndPhone/register.jsp

邮箱发送效果图:

输入邮箱地址:

带有校验,如果邮箱不是带有@符号,则出现错误提示。

点击发送验证码。

后台:

邮箱里面查看验证码:

输入错误的验证码就会提示错误,输入正确的就会跳转到成功页面。

好了,上诉就是整个关于最新web/java/jsp实现发送手机短信验证码和邮箱验证码的注册登录功能的过程了。

总结一下,其中需要导入对应的jar包(ali的json,java的email,activation-1.1.1.jar),boostrap的css,js,和juqery的js。这些都是网上可以下载的。你可以自己下载。

如图:

boostrap组件:

最后贴出整个项目的源码包下载地址:源码

没有积分,点个关注留下邮箱,我发给你。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。