JavaWeb项目(登录注册页面)全过程详细总结 您所在的位置:网站首页 javaweb接口如何替换null JavaWeb项目(登录注册页面)全过程详细总结

JavaWeb项目(登录注册页面)全过程详细总结

2024-06-29 22:46| 来源: 网络整理| 查看: 265

JavaWeb项目(登录注册页面)全过程总结

文章目录 JavaWeb项目(登录注册页面)全过程总结一、环境准备与开发工具二、创建 JavaWeb 项目2.1 新建Dynamic Web Project项目2.2 创建前端页面2.2.1 登录页面1.login.jsp2. login.js3. time.js4. focus.js + animate.js 2.2.2 注册页面(register.jsp)2.2.3 修改密码的页面(change_pwd.jsp)2.2.4 登录成功的页面(success.jsp) 2.3 创建相关配置类2.3.1 DAO类(DAO.java)2.3.2 JDBCUtil类(JDBCUtil.java)2.3.3 JsonResult类(JsonResult.java)2.3.4 MailUtil类(MailUtil.java)2.3.5 User类(User.java) 2.4 创建 Servlet2.4.1 登录界面的Servlet(LoginServlet)2.3.2 注册界面的Servlet(RegisterServlet)2.3.3 修改密码的Servlet(HandlePwdServlet)2.3.4 发送邮件的Servlet(EmailServlet)

项目需求:

实现登录页面: 顶部有logo栏目左侧提供轮播图提供两种登录方式:①账号密码登录 ②邮箱+验证码登录登录成功后跳到显示“登录成功”四字的页面(简单设计)有修改密码的功能 注册页面数据统一存储在数据库 一、环境准备与开发工具

此次项目用到的工具是:

① 前端:HTML + CSS + JS

② 后端:Tomcat 9 + Servlet

③ 项目开发工具 :Eclipse(Java EE IDE) java运行环境是:jdk 15

④ 数据库:Mysql + Navicat 15 for MySQL

       此次实验需要提前安装配置好Eclipse、jdk、tomcat,tomcat的安装和servlet的基本使用请见另两篇文章:Servlet的使用 和 Tomcat的使用

 

二、创建 JavaWeb 项目 2.1 新建Dynamic Web Project项目 image-20211121155204030

里面的Dynamic Web module version 我使用的2.5

image-20211121155413481

项目的目录结构如下: image-20211121155735914 image-20211121155615544

 

2.2 创建前端页面

这里只展示 jsp 和 js 文件的代码,页面中的 icon 是使用的 icomoon

2.2.1 登录页面 1.login.jsp DOCTYPE html> LARP-LOGIN Load Assessment And Risk Prediction 运动员负荷评估和风险预测系统 LARP数据可视化管理平台   账号登录 邮箱登录 修改密码 未注册,先去注册 其他登录方式 -Directed By Elvira-

 

2. login.js

功能讲解:

① 登录方式 tab 栏切换

       最开始我是在 login.jsp 把两种登录方式的 html 代码都写上,然后再父盒子上使用的display:none 和 block 来切换实现,在显示上是可以做到切换显示和隐藏,但是再代码层两种方式的代码都存在,在表单提交时,就会出现问题,因为其提交的时两种方法中4个输入框中的内容,且无法通过 required 约束表单不能为空,造成表单不能提交(因为其要求了4个输入框都需要填内容,而有两个输入框隐藏)。

转换思路:

在 login.jsp 中使用一个容器来占位 通过 js 控制具体显示的是哪种登录方法的 html 代码在 login.js 中定义 html 模板以及变量 isAccount,给 tab 栏的登录方式添加点击事件,点击到哪种方法就展示哪个方法对应的 html 模板和样式

② 邮箱登录方式下获取验证码按钮点击后禁用,10s后解禁

思想:

定义定时器 setInterval 和变量 second(定义要禁用的时间)禁用点击按钮用 innerText 替换按钮中的文字,定时器每隔1s刷新一次按钮中的文字,seond自减1若 second // 将用户密码方法的html代码渲染,必须放在前面,不然获取不到元素 input_box.innerHTML = user_template //获取输入框中的值 var input_user = document.querySelector('#username') isAccount = true account_a.style.color = '#03a9f4' phone_a.style.color = '#666' forget_pwd.style.display = 'block' input_user.focus() // 解决切换页面后输入框的聚焦问题 }) // 给手机登录的链接添加事件 phone_a.addEventListener('click', function () { // 将手机号验证码方法的html代码渲染,必须放在前面,不然获取不到元素 input_box.innerHTML = phone_template //获取元素 var phone_input = document.querySelector('.phone_input') //输入框中的值 var input_phone = document.querySelector('#phone') isAccount = false account_a.style.color = '#666' phone_a.style.color = '#03a9f4' forget_pwd.style.display = 'none' phone_input.style.marginBottom = '8.1vh' input_phone.focus() // 创建XMLHttpRequest function CreateXmlHttp() { // 定义XMLHttpRequest对象 var xhr = null // 创建XMLHttpRequest对象 if (window.XMLHttpRequest) { // 其他浏览器 xhr = new XMLHttpRequest() } else if (window.ActiveXObject) { // IE浏览器 IE5 IE6 xhr = new ActiveXObject('Microsoft.XMLHTTP') } return xhr } // 获取点击获取验证码的按钮 var getCodeBtn = document.querySelector(".getCode"); // 获取验证码点击按钮点击后禁用 getCodeBtn.addEventListener("click", function() { // 点击按钮后,将按钮禁用10秒钟 getCodeBtn.disabled = true; var second = 10; var timer = setInterval(function () { getCodeBtn.innerText = second + "s 后可重新获取" if (second if (xhr.readyState == 4) { // 请求已经完成,信息已经成功返回,开始处理信息 if ((xhr.status >= 200 && xhr.status alert(jsonObj.error); } else { alert("邮箱发送成功,请查阅邮箱,尽快认证") } } else { alert("邮箱发送失败") } } } xhr.open('POST','/my_login/EmailServlet',true) // 设置HTTP的输出内容类型为json格式数据:application/x-www-form-urlencoded xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded') // 设置浏览器不使用缓存,服务器不从缓存中找,重新执行代码,而且服务器返回给浏览器的时候,告诉浏览器也不要保存缓存。 xhr.setRequestHeader('If-Modified-Since', '0') // 发送请求 xhr.send("email="+email); }) }) })

 

3. time.js

顶部导航栏动态显示时间

// 获取时间 window.addEventListener('load', function () { // 获取元素 var date = document.querySelector('.date') var sec = document.querySelector('.second') setInterval(function () { // 获取当前时间 var d = new Date() var year = d.getFullYear() // 获取年 var month = d.getMonth() + 1 // 获取月 var day = d.getDate() // 获取日期 var hour = d.getHours() // 获取小时 var minute = d.getMinutes() // 获取分钟 var second = d.getSeconds() // 获取秒 if (month arrow_l.style.display = 'block' arrow_r.style.display = 'block' clearInterval(timer) timer = null //清除定时器变量,让图片静止 }) //鼠标离开focus 就隐藏左右按钮 focus.addEventListener('mouseleave', function () { arrow_l.style.display = 'none' arrow_r.style.display = 'none' timer = setInterval(function () { //手动调用点击事件 arrow_r.click() }, 3500) }) // 3、动态生成小圆圈,有几张图片就有几个小圆圈 var ul = focus.querySelector('ul') var ol = focus.querySelector('.circle') for (var i = 0; i // 干掉所有人 ,把所有的小li 清除current 类名 for (var i = 0; i if (flag) { flag = false // 如果走到了最后一张复制的图片,此时ul要快速复原left为0 if (num == ul.children.length - 1) { ul.style.left = 0 num = 0 } num++ animate(ul, -num * focusWidth, function () { flag = true // 只有一张图片播放完了才展示下一张,点击多快都没有用 }) circle++ //如果circle=4,说明走到克隆的那张图片了 if (circle == ol.children.length) { circle = 0 } circleChange() } }) // 8.左侧按钮 arrow_l.addEventListener('click', function () { if (flag) { flag = false if (num == 0) { num = ul.children.length - 1 //num=3 ul.style.left = -num * focusWidth + 'px' } num-- animate(ul, -num * focusWidth, function () { flag = true }) circle-- //circle为序号 // if (circle < 0) { // circle = ol.children.length - 1; //circle=2 // } circle = circle ol.children[i].className = '' } // 当前的留下current ol.children[circle].className = 'current' } //自动播放模块 var timer = setInterval(function () { //手动调用点击事件 arrow_r.click() }, 2000) })

animate.js

function animate(obj, target, callback) { //前面必须要加function关键字 clearInterval(obj.timer); obj.timer = setInterval(function () { var step = (target - obj.offsetLeft) / 10; step = step > 0 ? Math.ceil(step) : Math.floor(step); if (obj.offsetLeft == target) { //停止动画 本质停止定时器 clearInterval(obj.timer); //回调函数写到定时器结束里面 // if (callback) { // //调用函数 // callback(); // } callback && callback(); //短路的思想 } obj.style.left = obj.offsetLeft + step + 'px'; },15); }

登录页面界面如下:

image-20211121172817745 image-20211121173349267

2.2.2 注册页面(register.jsp) DOCTYPE html> LARP-REGISTER 新用户注册 用户名称: 设置密码: 确认密码:

注册页面界面如下:

image-20211121173253448

 

2.2.3 修改密码的页面(change_pwd.jsp) DOCTYPE html> 修改密码 修改密码 登录名称: 修改密码: 确认密码:

修改密码界面如下: image-20211121174050743

2.2.4 登录成功的页面(success.jsp) DOCTYPE html> success body { display: flex; min-height: 100vh; margin: 0; } .success { height: 18vh; width: 25vw; line-height: 18vh; margin: auto; font-size: 2.4em; text-align: center; letter-spacing: 0.3em; background-color: rgba(255, 255, 255, 0.815); } #background_video { overflow: hidden; width: 100%; position: fixed; z-index: -1; } 登录成功

登录成功界面: image-20211121174132288

 

2.3 创建相关配置类 2.3.1 DAO类(DAO.java)

DAO 类增加数据库查询用户的功能

JDBC开发的步骤:

① 导入驱动jar包 mysql-connector-java-5.1.47-bin.jar

复制粘贴到lib

右键点击 build path -> add to bulid path (在java 工程当中引入了 jar 包)

② 注册驱动

③ 获取数据库的连接对象 Connection

④ 基本操作:执行sql

定义sql语句获取执行sql语句的对象 Statement执行sql,用 ResultSet 接收返回的结果集遍历处理结果集

⑤ 释放资源

以上的步骤2、3、5 都是在 JDBCUtil.java 中完成的

package modle; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; public class DAO { // 登录验证 public User login(Connection conn,User user) throws Exception{ User resultUser = null; // sql 查询语句 String sql="select * from users where username=? and password=?"; // 获得执行sql语句的对象 PreparedStatement pstatement =conn.prepareStatement(sql); pstatement.setString(1, user.getUsername()); pstatement.setString(2, user.getPassword()); // 执行sql语句获得结果集 ResultSet rs = pstatement.executeQuery(); if(rs.next()){ resultUser = new User(); resultUser.setUsersname(rs.getString("username")); resultUser.setPassword(rs.getString("password")); } return resultUser; } // 修改密码查找用户 public User searchUser(Connection conn,User user) throws Exception { User resultUser = null; // sql 查询语句 String sql="select * from users where username=?"; // 获得执行sql语句的对象 PreparedStatement pstatement =conn.prepareStatement(sql); pstatement.setString(1, user.getUsername()); // 执行sql语句获得结果集 ResultSet rs = pstatement.executeQuery(); if(rs.next()){ resultUser = new User(); resultUser.setUsersname(rs.getString("username")); } return resultUser; } // 注册验证 public boolean register(Connection conn,User user) throws Exception { boolean flag = false; // sql 查询语句 String sql="insert into users(username,password)values(?,?)"; // 获得执行sql语句的对象 PreparedStatement pstatement =conn.prepareStatement(sql); pstatement.setString(1, user.getUsername()); pstatement.setString(2, user.getPassword()); // 执行sql语句获得结果集 int res = pstatement.executeUpdate(); if(res > 0) { flag = true; } return flag; } } 2.3.2 JDBCUtil类(JDBCUtil.java)

JDBCUtil类提供与数据库连接时 jdbc 的相关配置

package modle; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class JDBCUtil { // 数据库的参数 private String dbUrl="jdbc:mysql://localhost:3306/my_login?useSSL=false"; private String dbUsername="root"; private String dbPassword="XXXX"; // 自己的密码 // 与数据库连接 public Connection getConn() { try { // 加载驱动 Class.forName("com.mysql.jdbc.Driver"); } catch (Exception e) { e.printStackTrace(); } Connection conn = null; try { // 获得连接,返回connection 对象 conn = DriverManager.getConnection(dbUrl, dbUsername, dbPassword); } catch (Exception e) { e.printStackTrace(); } return conn; } // 释放资源 // 关闭结果集 ResultSet public void close(ResultSet resultSet) throws Exception { if(resultSet != null) { resultSet.close(); } } // 关闭 sql 语句对象 Statement public void close(Statement statement) throws Exception { if(statement != null) { statement.close(); } } // 关闭连接对象 Connection public void close(Connection conn) throws Exception { if(conn != null) { conn.close(); } } } 2.3.3 JsonResult类(JsonResult.java)

JsonResult类处理 Json 返回的数据。

package modle; public class JsonResult { private int type; //0为失败, 1为成功 private String error; //错误信息 public int getType() { return type; } public void setType(int type) { this.type = type; } public String getError() { return error; } public void setError(String error) { this.error = error; } }

 

2.3.4 MailUtil类(MailUtil.java)

MailUtil 类提供调用邮件发邮件时的相关配置。这里我用的126邮箱,记得去打开邮箱中的 POP3和SMTP服务,记住授权密码,需要导入 javax.mail.jar 包: image-20211122141057536

开启服务后的界面: image-20211122141143233

package modle; import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; public class MailUtil { /** * @param email 登录用户的邮件 * @param emailMsg 发送的邮件信息 * @throws Exception */ public void sendMail(String userEmail, String emailMsg) throws Exception { // 1. 创建一封邮件,创建一个程序与邮件服务器会话对象session Properties props = new Properties(); props.setProperty("mail.transport.protocol", "SMTP"); props.setProperty("mail.host", "smtp.126.com"); //smtp.126.com为SMTP服务器地址,为指定这个服务器发送邮件 props.setProperty("mail.smtp.auth", "true"); // 指定验证为true // 创建验证器 Authenticator auth = new Authenticator() { public PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("xxxx", "xxxx"); //参数分别为:用户名和授权密码 } }; // 用于连接邮件服务器的参数配置(发送邮件时需要用到) Session session= Session.getInstance(props,auth); // 根据参数配置,创建会话对象(为了发送邮件准备的) // 2.创建邮件对象message,相当于邮件内容 Message message = new MimeMessage(session); // From: 发件人 // 其中 InternetAddress 的三个参数分别为: 邮箱, 显示的昵称(只用于显示, 没有特别的要求), 昵称的字符集编码 // 真正要发送时, 邮箱必须是真实有效的邮箱。 message.setFrom(new InternetAddress("xxxxxxx")); // To: 收件人 设置收件人和发送方式 message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(userEmail)); // Subject: 邮件主题 message.setSubject("邮箱验证"); // Content: 邮件正文(可以使用html标签) message.setContent(emailMsg, "text/html;charset=UTF-8"); // 3. 创建 transport 用于将邮件发出 Transport.send(message); } }

 

2.3.5 User类(User.java)

User类提供用户基本信息的配置

package modle; public class User { private String username; private String password; // 构造函数 public User() {} public User(String username, String password) { this.username = username; this.password = password; } // 获取用户名 public String getUsername() { return username; } // 设置用户名 public void setUsersname(String username) { this.username = username; } // 获取密码 public String getPassword() { return password; } // 设置密码 public void setPassword(String password) { this.password = password; } }

 

2.4 创建 Servlet 2.4.1 登录界面的Servlet(LoginServlet)

主要思想:

接收前台传来的值:账号和密码、邮箱和验证码,通过判断账号和密码或是邮箱和验证码谁不为空判断出前台使用的哪种登录方式邮箱和验证码登录方式中:检验验证码是否正确是从 session 中取出 emailCode 的内容(在EmailServlet.java中在随机创建出6位的验证码后就把其存入 session 中了)与用户输入的进行核对。但其不够完美,因为有时间限制,超出时间后 session 就失效了。 package controller; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; 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.alibaba.fastjson.JSON; import modle.DAO; import modle.JDBCUtil; import modle.JsonResult; import modle.User; /** * 登录的 Servlet */ public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 接收前台传来的值 账号和密码 或是 邮箱和验证码 String username = request.getParameter("username"); String password = request.getParameter("password"); String email = request.getParameter("email"); String code = request.getParameter("code"); System.out.println(password); System.out.println(email); System.out.println(code); response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); // 账号密码登录的方式 if(username != null && password != null) { //解决中文字符乱码 byte[] bytes = username.getBytes("ISO-8859-1"); username = new String(bytes,"utf-8"); System.out.println(username); JDBCUtil db = new JDBCUtil(); // 创建一个用户保存下将密码和用户名保存 User user = new User(username,password); DAO dao = new DAO(); try { //数据库连接 Connection conn = db.getConn(); if(dao.login(conn, user) != null) { request.getSession().setAttribute("user", user); response.sendRedirect("jsp/success.jsp"); } else { out.println("用户名或者密码错误,验证失败"); out.println("3秒以后跳转回登录页面"); response.setHeader("Refresh", "3;url=jsp/login.jsp"); } } catch (Exception e) { e.printStackTrace(); } finally { out.close(); } } else if(email != null && code != null) { //邮箱验证码方式 // 判断emailCode是否正确 String s_emailCode = (String)request.getSession().getAttribute("emailCode"); JsonResult jr = new JsonResult(); if(!code.equalsIgnoreCase(s_emailCode)) { out.println("邮件验证码错误,验证失败"); out.println("3秒以后跳转回登录页面"); response.setHeader("Refresh", "3;url=jsp/login.jsp"); } else { // 验证成功 response.sendRedirect("jsp/success.jsp"); } out.close(); } } }

 

2.3.2 注册界面的Servlet(RegisterServlet) package controller; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import modle.DAO; import modle.JDBCUtil; import modle.User; /** * 注册的servlet */ public class RegisterServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取注册名和密码 String username = request.getParameter("username").trim(); String password = request.getParameter("password").trim(); String again_password = request.getParameter("again_password").trim(); //解决中文字符乱码 byte[] bytes = username.getBytes("ISO-8859-1"); username = new String(bytes,"utf-8"); response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); JDBCUtil db = new JDBCUtil(); // 创建一个用户保存下将密码和用户名保存 User user = new User(username,password); DAO dao = new DAO(); try { //数据库连接 Connection conn = db.getConn(); if(!password.equals(again_password)) { out.println("两次输入的密码不一致"); out.println("3秒以后返回注册页面"); response.setHeader("Refresh", "3;url=jsp/register.jsp"); } else { if(dao.register(conn, user)) { out.println("注册新用户成功"); out.println("3秒以后跳转回注册页面"); response.setHeader("Refresh", "3;url=jsp/login.jsp"); } else { out.println("注册新用户失败,用户名已经存在"); out.println("3秒以后跳转回注册页面"); response.setHeader("Refresh", "3;url=jsp/register.jsp"); } } } catch (Exception e) { e.printStackTrace(); } finally { out.close(); } } }

 

2.3.3 修改密码的Servlet(HandlePwdServlet) package controller; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.PreparedStatement; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import modle.DAO; import modle.JDBCUtil; import modle.User; /** * 修改密码的 servlet */ public class HandlePwdServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取数据 String username = request.getParameter("username").trim(); String password = request.getParameter("password").trim(); String again_password = request.getParameter("again_password").trim(); //解决中文字符乱码 byte[] bytes = username.getBytes("ISO-8859-1"); username = new String(bytes,"utf-8"); response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); JDBCUtil db = new JDBCUtil(); // 创建一个用户保存下将密码和用户名保存 User user = new User(username,password); DAO dao = new DAO(); try { //数据库连接 Connection conn = db.getConn(); // 数据库中没有该用户 if(dao.searchUser(conn, user) == null) { out.println("该用户不存在,请先去注册"); out.println("3秒以后返回修改密码页面"); response.setHeader("Refresh", "3;url=jsp/change_pwd.jsp"); } else { if(!password.equals(again_password)) { out.println("两次输入的密码不一致"); out.println("3秒以后返回修改密码页面"); response.setHeader("Refresh", "3;url=jsp/change_pwd.jsp"); } else { String sql="update users set password=? where username=?"; // 获得执行sql语句的对象 PreparedStatement pstatement =conn.prepareStatement(sql); pstatement.setString(1, user.getPassword()); pstatement.setString(2, user.getUsername()); // 返回受影响修改的行数 int res = pstatement.executeUpdate(); if(res != 0) { out.println("修改密码成功"); out.println("3秒以后跳转回登录页面"); response.setHeader("Refresh", "3;url=jsp/login.jsp"); } else { out.println("修改密码失败"); out.println("3秒以后返回修改密码页面"); response.setHeader("Refresh", "3;url=jsp/change_pwd.jsp"); } } } } catch (Exception e) { e.printStackTrace(); } finally { out.close(); } } }

 

2.3.4 发送邮件的Servlet(EmailServlet)

主要思想:

获取前台用户的邮箱随机生成6位数的验证码(需要导入commons-lang3-3.12.0.jar包)在服务器端通过 session 保存验证码通过 MailUtil 中对邮箱的配置发送邮件 package controller; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang3.RandomStringUtils; import com.alibaba.fastjson.JSON; import modle.JsonResult; import modle.MailUtil; import net.sf.json.JSONObject; /** * 处理邮件的Servlet */ public class EmailServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取邮箱 String email = request.getParameter("email"); System.out.println(email); // 获取随机的6位数 String num = RandomStringUtils.randomNumeric(6); // 邮件内容 String emailMsg = "邮箱验证码为:"+ num +"请勿泄漏给他人!"; // 在服务器端保存邮件验证码 request.getSession().setAttribute("emailCode", num); JsonResult jr = new JsonResult(); try { MailUtil mail = new MailUtil(); // 发送邮件 mail.sendMail(email, emailMsg); jr.setType(1); // 发送成功 response.getWriter().write(JSON.toJSONString(jr)); return; } catch (Exception e) { e.printStackTrace(); jr.setType(0); // 发送失败 jr.setError("邮件发送失败"); response.getWriter().write(JSON.toJSONString(jr)); return; } } }

注意:

在运行过程中,mail.sendMail(email, emailMsg); 这部总是报 java.lang.ClassNotFoundException: javax.activation.DataHandler的错误,查找资料下载导入了 javax.activation-1.2.0.jar就解决问题了

使用 JSON.toJSONString(jr)是导入了第三方的包来对 Json 进行快速处理,使用该方法可以导入两种类型的包:

① 导入fastjson-1.2.75.jar 一个包就行, 下载地址:Maven Repository: com.alibaba » fastjson (mvnrepository.com)

② 导入 6 个包:

commons-beanutils-1.9.4.jar

commons-collections4-4.4.jar

commons-lang3-3.12.0.jar

commons-logging-1.2.jar

ezmorph-1.0.6.jar

json-lib-2.4-jdk15.jar

可以在下面的地址中下载:

http://commons.apache.org/index.html

http://json-lib.sourceforge.net/

http://ezmorph.sourceforge.net/

http://www.docjar.com/



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有