注册功能_功能分析

注册的后台功能代码

编写UserService的register方法测试

 @Testpublic void test03() {UserService userService = new UserService();User user = new User();user.setUsername("jackhello");user.setPassword("123456");user.setStatus('Y');int code = userService.register(user);System.out.println(code);}

编写UserDao的方法

  //select * from tab_user where username='jackhello3'User queryUsername(String username);//insert into tab_user values(null,...)void save(User user2);

编写对应的mysql语句

<select id="queryUsername" resultType="com.qst.bean.User"  parameterType="string">select * from tab_user where username=#{username}</select><insert id="save" parameterType="com.qst.bean.User" >insert into tab_user values(null,#{username},#{password},#{name},#{birthday},#{sex},#{telephone},#{email},#{status},#{code})</insert>

编写测试方法

 @Testpublic void test01(){UserDao userDao= MySessionUtils.getSession().getMapper(UserDao.class);User user=userDao.queryUsername("12");System.out.println(user);}@Testpublic void test02() {UserDao dao =    MySessionUtils2.getMapper(UserDao.class);User user= new User(33,"jackhello33","jackhello34",new Date(),"jack","男","3333","333@qq.com",'N',"ddd");// User(int uid, String username, String password, Date birthday, String name, String sex, String telephone, String email, char status, String code)dao.save(user);}

编写servlet

Map<String, String[]> map = request.getParameterMap();User user = new User();//将请求中的参数赋值给变量try {BeanUtils.populate(user,map);} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}System.out.println("注册数据1");//对参数处理UserService userService = new UserService();int code = userService.register(user);System.out.println("注册数据2");//响应给浏览器ResponseInfo info = new ResponseInfo();if(code==1){info.setData("注册成功");//用于注册成功后向邮箱发送信息激活/*MailUtils.sendMail(user.getEmail(),"<a href='http://localhost:8080/Lvyou/activeServlet?activeCode="+user.getCode()+"'>点击激活途牛旅游账户</a>","激活账户");*/}else{//-1,-2,-3info.setData("注册失败");}info.setCode(code);/*info.setCode(1);info.setData("注册成功");*/System.out.println(info.getCode()+info.getCode());String json =new ObjectMapper().writeValueAsString(info);System.out.println("注册数据3");response.getWriter().println(json);

验证码机制

图片验证码效果

Servlet随机生成一个字符串,然后将字符串转成图片,通过响应的字节流写到浏览器的img标签

图片验证码分析

验证码servlet开发

@WebServlet("/checkCode")
public class CheckCodeServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//服务器通知浏览器不要缓存response.setHeader("pragma","no-cache");response.setHeader("cache-control","no-cache");response.setHeader("expires","0");//在内存中创建一个长80,宽30的图片,默认黑色背景//参数一:长//参数二:宽//参数三:颜色int width = 80;int height = 30;BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);Random rd = new Random();//获取画笔Graphics g = image.getGraphics();//设置画笔颜色为灰色g.setColor(Color.GRAY);//填充图片g.fillRect(0,0, width,height);//产生4个随机验证码,12EyString checkCode = getCheckCode();//将验证码放入HttpSession中request.getSession().setAttribute("CHECKCODE_SERVER",checkCode);//设置画笔颜色为黄色g.setColor(Color.YELLOW);//设置字体的小大g.setFont(new Font("黑体",Font.BOLD,24));//向图片上写入验证码g.drawString(checkCode,15,25);for(int i=0;i<2;i++){g.setColor(new Color(rd.nextInt(120), rd.nextInt(120), rd.nextInt(120)));g.drawLine(rd.nextInt(75), rd.nextInt(28), rd.nextInt(75), rd.nextInt(28));}//将内存中的图片输出到浏览器//参数一:图片对象//参数二:图片的格式,如PNG,JPG,GIF//参数三:图片输出到哪里去ImageIO.write(image,"PNG",response.getOutputStream());}/*** 产生4位随机字符串 */private String getCheckCode() {String base = "0123456789ABCDEFGabcdefg";int size = base.length();Random r = new Random();StringBuffer sb = new StringBuffer();for(int i=1;i<=4;i++){//产生0到size-1的随机值int index = r.nextInt(size);//在base字符串中获取下标为index的字符char c = base.charAt(index);//将c放入到StringBuffer中去sb.append(c);}return sb.toString();}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request,response);}
}

前端验证码模块

             <tr><td class="td_left"><label for="check">验证码</label></td><td class="td_right check"><input type="text" id="check" name="check" class="check" autocomplete="off"><img src="checkCode" height="32px" alt="" onclick="changeCheckCode(this)"><script type="text/javascript">//图片点击事件function changeCheckCode(img) {img.src = "checkCode?" + new Date().getTime();}</script></td></tr>

后台获取验证码,并验证

  //从请求中获取check1码String check1 = request.getParameter("check");//从session中获取check2码String check2 = (String) request.getSession().getAttribute("CHECKCODE_SERVER");System.out.println(check1);System.out.println(check2);//从session中删除check2码request.getSession().removeAttribute("CHECKCODE_SERVER");//比较check1 与 check2//相同表示验证码不正确,将提示信息写到页面的错误提示if (check1 == null || !check1.equalsIgnoreCase(check2)) {//验证码不看大小写ResponseInfo info = new ResponseInfo();info.setCode(-4);info.setData("注册失败,验证码出错");//jsonString json = new ObjectMapper().writeValueAsString(info);response.getWriter().println(json);return;}

邮件激活

工具类


import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
public final class MailUtils {private static final String USER = "XXXX@163.com "; // 发件人称号,同邮箱地址private static final String PASSWORD = ""; // 客户端授权码,或者登录密码/* *** @param to 收件人邮箱* @param text 邮件正文* @param title 标题发送验证信息的邮件 */public static boolean sendMail(String to, String text, String title){try {final Properties props = new Properties();props.setProperty("mail.smtp.host", "smtp.163.com"); // 指定的smtp服务器props.setProperty("mail.smtp.auth", "true");props.setProperty("mail.transport.protocol", "smtp");//设置发送邮件使用的协议// 发件人的账号props.setProperty("mail.user", USER);//发件人的密码props.setProperty("mail.password", PASSWORD);// 构建授权信息,用于进行SMTP进行身份验证Authenticator authenticator = new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {// 用户名、密码String userName = props.getProperty("mail.user");String password = props.getProperty("mail.password");return new PasswordAuthentication(userName, password);}};// 使用环境属性和授权信息,创建邮件会话Session mailSession = Session.getInstance(props, authenticator);// 创建邮件消息MimeMessage message = new MimeMessage(mailSession);// 设置发件人String username = props.getProperty("mail.user");InternetAddress form = new InternetAddress(username);message.setFrom(form);// 设置收件人InternetAddress toAddress = new InternetAddress(to);message.setRecipient(Message.RecipientType.TO, toAddress);// 设置邮件标题message.setSubject(title);// 设置邮件的内容体message.setContent(text, "text/html;charset=UTF-8");// 发送邮件Transport.send(message);return true;}catch (Exception e){e.printStackTrace();}return false;}
}

测试代码


public class MailUtilsTest {@Testpublic void sendMail() {//参1 收件人//参2 内容//参3 标题MailUtils.sendMail("hadoop101@126.com","<a href='http://localhost:8080/lvyou_war_exploded/activeServlet?activeCode=bb26f0d05ea745c5986bc18ff7b4cef9'>点击激活途牛旅游账户</a>","激活账户");}
}

在注册业务方法中添加发邮件

 info.setData("注册成功");//用于注册成功后向邮箱发送信息激活        MailUtils.sendMail(user.getEmail(),"<a href='http://localhost:8080/Lvyou/activeServlet?activeCode="+user.getCode()+"'>点击激活途牛旅游账户</a>","激活账户");

途牛旅游项目—注册篇相关推荐

  1. 途牛旅游项目——注册邮箱激活

    UUID介绍 (1)什么是uuid 全球唯一的,不会重复的 固定长度的随机字符串 25fd9bcf50ad4dc39aa38f084d1801c8 (2)复制UUI工具类 com\wzx\util\U ...

  2. 途牛旅游项目——注册功能_功能分析

    注册的后台功能代码 编写UserService的register方法测试 com\wzx\service\TestUserService.java @Testpublic void test03() ...

  3. day17--途牛旅游项目-注册功能

    day17–途牛旅游项目-注册功能 注册功能_功能分析 注册功能_功能实现 Test方法 @Testpublic void test03() {UserService userService = ne ...

  4. 【途牛旅游项目】项目环境搭建,实现登陆功能

    项目准备 熟悉静态页面 查看真实在线的途牛旅游项目 其实也是一个商城而已,重点项目搭建,核心模块:登录 前言 (1)前言 为了巩固web基础知识,提升综合运用能力,故而讲解此案例. 要求,每位同学能够 ...

  5. 途牛旅游项目环境搭建

    途牛旅游项目环境搭建 准备工作 项目演示 熟悉静态页面 查看真实在线的途牛旅游项目 其实也是一个商城而已 重点项目搭建,核心模块:登录 准备工作 三层架构 (1)三层架构 (2)目录结构: 准备工作 ...

  6. 【途牛旅游项目】02 - 登录功能实现 - 验证码功能 - ajax实现登录

    文章目录 登录功能分析图解 最终实现截图 实现登录功能 1. 创建测试类 2. 创建业务层UserService 3. 创建实体类 - User用户类和Msg错误提示类 4. 创建dao层 5. 创建 ...

  7. 【途牛旅游项目】01 - 项目环境准备,实现登录功能

    文章目录 模仿途牛旅游网站的一个项目 项目初始化,目录结构 导入pom.xml依赖 创建数据库 模仿途牛旅游网站的一个项目 途牛地址:https://www.tuniu.com 项目初始化,目录结构 ...

  8. 【途牛旅游项目】03 - 注册功能实现(aJax提交,正则表达式判断,BeanUtils封装和注册转换器)

    文章目录 注册功能分析图解 实现样式截图 实现注册功能 1. 创建注册业务的测试方法 2. 创建业务层UserService的注册方法 3. 创建dao层接口方法 4. 创建dao的映射文件xml 5 ...

  9. 途牛旅游项目练习-登录篇

    项目准备工作 三层架构 准备工作 技术选型 (1)Web层 a)Servlet:前端控制器 b)html:视图 c)Filter:过滤器 d)BeanUtils:数据封装 e)Jackson:json ...

最新文章

  1. python求平方根的代码_Python求解平方根的方法
  2. BBC又一神作,豆瓣9.8分,美轮美奂的大自然不仅仅属于人类
  3. 程序员面试金典 - 面试题 17.08. 马戏团人塔(最长上升子序 DP/二分查找)
  4. Flume监控几种方式
  5. 【嵌入式Linux】嵌入式Linux应用开发基础知识之文件IO
  6. 利用环境变量LD_PRELOAD来绕过php disable_function执行系统命令
  7. AttributeError: 'NoneType' object has no attribute 'split' 报错处理
  8. 按值对对象属性进行排序
  9. 关于BDC、SSP搜索相关解决方案 的数据结构
  10. python递归实例_Python函数递归(带实例演示)
  11. 苹果手机android解锁,解锁教程:Android和iOS手机锁屏密码忘了怎么办?
  12. c语言回溯法解决倒桥本分数式,回溯法 经典题目 八皇后 桥本分数
  13. 小程序获取用户唯一id php_微信小程序配合PHP获取用户OpenID标识
  14. 我们应该怎样做需求分析?(一)需求调研
  15. 【NOIP2015模拟10.27】魔道研究题解
  16. Unity PS4/PS5开发环境搭建
  17. 使用 nginx 做加速
  18. 背记不如实战系列-javaGUI实例-计算器制作
  19. 太原linux运维学校,山西太原linux运维培训班价格思诺培训价格表
  20. jsp连接数据库一直是null的问题

热门文章

  1. java攻击力与命中_JAVA写一个怪物的类,类中有属性姓名,攻击力,有打人的方法。...
  2. 管理感悟:沟通,沟通,再沟通
  3. freshclam更新clamav病毒库失败(connection failed)
  4. 什么是信创产品?怎么成为信创产品?
  5. 分析 源码 的一些方法
  6. 键盘字母打字打出来是数字解决方法
  7. css伪元素层级在父元素之下
  8. 四条建议助力APP软件开发者直击幼教蓝海
  9. Comsol5.5 简单管道声场特性仿真
  10. matlab 多序列比对,MAFFT 进行多序列比对