Web-注册登陆

文章目录

      • Register.html
      • RegistUserServlet
      • UserServiceImpl.
      • UserDaoImpl.
      • 发送邮件 (填写好邮件工具类)
      • UserServiceImpl
      • UserDaoImpl.
        • ActiveUserServlet
      • head.html

在这里插入图片描述

Register.html

在这里插入图片描述

<script>/*表单校验:1.用户名:单词字符,长度8202.密码:单词字符,长度8203.email:邮件格式4.姓名:非空5.手机号:手机号格式6.出生日期:非空7.验证码:非空*///校验用户名//单词字符,长度820位function checkUsername() {//1.获取用户名值var username = $("#username").val();//2.定义正则var reg_username = /^\w{8,20}$/;//3.判断,给出提示信息var flag = reg_username.test(username);    //test:验证是否满足正则表达式if(flag){//用户名合法$("#username").css("border","");      //当我们用户名符合正则表达式后变回原来的样子}else{//用户名非法,加一个红色边框$("#username").css("border","1px solid red");}return flag;                             //这里一定记得返回flag}//校验密码function checkPassword() {//1.获取密码值var password = $("#password").val();//2.定义正则var reg_password = /^\w{8,20}$/;//3.判断,给出提示信息var flag = reg_password.test(password);if(flag){//密码合法$("#password").css("border","");}else{//密码非法,加一个红色边框$("#password").css("border","1px solid red");}return flag;}//校验邮箱function checkEmail(){//1.获取邮箱var email = $("#email").val();//2.定义正则		itcast@163.comvar reg_email = /^\w+@\w+\.\w+$/;//3.判断var flag = reg_email.test(email);if(flag){$("#email").css("border","");}else{$("#email").css("border","1px solid red");}return flag;}$(function () {                //当页面框架加载完成就执行//当表单提交时,调用所有的校验方法$("#registerForm").submit(function(){//1.发送数据到服务器if(checkUsername() && checkPassword() && checkEmail()){//校验通过,发送ajax请求,提交表单的数据 this指代registerForm表单提交数据序列化为:username=zhangsan&password=123$.post("registUserServlet",$(this).serialize(),function(data){//处理服务器响应的数据  data  {flag:true,errorMsg:"注册失败"}//Data是页面的响应数据if(data.flag){//注册成功,跳转成功页面location.href="register_ok.html";}else{//注册失败,给errorMsg添加提示信息$("#errorMsg").html(data.errorMsg);}});}//2.不让页面跳转return false;            //没有满足输入要求一定这里记得要返回false 阻止表单提交//如果这个方法没有返回值,或者返回为true,则表单提交,如果返回为false,则表单不提交});//当某一个组件失去焦点是,调用对应的校验方法 $("#username").blur(checkUsername);  //这里没有括号,老是搞忘把括号加上了$("#password").blur(checkPassword);$("#email").blur(checkEmail);});</script>

发送ajax异步请求到registUserServlet
处理客户端传来的HTTP请求,并返回一个响应

RegistUserServlet

这里原本分的两步,先保存操作在验证码操作,验证码比较简单就直接一步啦

@WebServlet("/registUserServlet")
public class RegistUserServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//验证校验//获取输入的验证码String check = request.getParameter("check");//从sesion中获取验证码HttpSession session = request.getSession();String checkcode_server = (String) session.getAttribute("CHECKCODE_SERVER");session.removeAttribute("CHECKCODE_SERVER");//为了保证验证码只能使用一次//比较if(checkcode_server == null || !checkcode_server.equalsIgnoreCase(check)){//验证码错误ResultInfo info = new ResultInfo();//注册失败info.setFlag(false);info.setErrorMsg("验证码错误");//将info对象序列化为jsonObjectMapper mapper = new ObjectMapper();String json = mapper.writeValueAsString(info);response.setContentType("application/json;charset=utf-8");response.getWriter().write(json);return;}//1.获取数据表单的所有数据Map<String, String[]> map = request.getParameterMap();//2.将数据封装实体类对象User user = new User();try {BeanUtils.populate(user,map);} catch ( Exception e) {}  //3.调用service完成注册UserService service = new UserServiceImpl();//Service使用regist,调用dao的查询和保存boolean flag = service.regist(user);ResultInfo info = new ResultInfo();//4.响应结果if(flag){//注册成功info.setFlag(true);}else{//注册失败info.setFlag(false);info.setErrorMsg("注册失败!");}//将info对象序列化为jsonObjectMapper mapper = new ObjectMapper();String json = mapper.writeValueAsString(info);//将json数据写回客户端//设置content-typeresponse.setContentType("application/json;charset=utf-8");response.getWriter().write(json);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}
}

UserServiceImpl.

 public class UserServiceImpl implements UserService {private UserDao userDao = new UserDaoImpl();/*** 注册用户* @param user* @return*/@Overridepublic boolean regist(User user) {//1.根据用户名查询用户对象User u = userDao.findByUsername(user.getUsername());//判断u是否为nullif(u != null){//用户名存在,注册失败return false;}//2.保存用户信息userDao.save(user);return true;}
}

UserDaoImpl.

public class UserDaoImpl implements UserDao {//本地的JDBCUtilsprivate JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());@Overridepublic User findByUsername(String username) {User user = null;try {//1.定义sqlString sql = "select * from tab_user where username = ?";//2.执行sqluser = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), username);} catch (Exception e) {}return user;}@Overridepublic void save(User user) {//1.定义sqlString sql = "insert into tab_user(username,password,name,birthday,sex,telephone,email,status,code) values(?,?,?,?,?,?,?,?,?)";//2.执行sqltemplate.update(sql,user.getUsername(),user.getPassword(),user.getName(),user.getBirthday(),user.getSex(),user.getTelephone(),user.getEmail(),user.getStatus(),user.getCode());}

正确输入信息后数据库中有了数据
发送邮件,携带点击激活地址+激活码.

发送邮件 (填写好邮件工具类)

在这里插入图片描述

UserServiceImpl

 @Overridepublic boolean regist(User user) {//1.根据用户名查询用户对象User u = userDao.findByUsername(user.getUsername());//判断u是否为nullif(u != null){//用户名存在,注册失败return false;}//2.保存用户信息//2.1设置激活码,唯一字符串user.setCode(UuidUtil.getUuid());//2.2设置激活状态user.setStatus("N");userDao.save(user);//3.激活邮件发送,邮件正文?String content="+user.getCode()+"'>点击激活【黑马旅游网】";MailUtils.sendMail(user.getEmail(),content,"激活邮件");return true;}/*** 激活用户* @param code* @return*/@Overridepublic boolean active(String code) {//1.根据激活码查询用户对象//先调用dao的findByCode查询激活码是否正确,正确:更改用户的激活状态为  'Y'User user = userDao.findByCode(code);if(user != null){//2.调用dao的修改激活状态的方法userDao.updateStatus(user);return true;}else{return false;}

UserDaoImpl.

 /*** 根据激活码查询用户对象* @param code* @return*/@Overridepublic User findByCode(String code) {User user = null;try {String sql = "select * from tab_user where code = ?";user = template.queryForObject(sql,new BeanPropertyRowMapper<User>(User.class),code);} catch (DataAccessException e) {e.printStackTrace();}return user;}/*** 修改指定用户激活状态* @param user*/@Overridepublic void updateStatus(User user) {String sql = " update tab_user set status = 'Y' where uid=?";template.update(sql,user.getUid());}/*** 根据用户名和密码查询的方法* @param username* @param password* @return*/@Overridepublic User findByUsernameAndPassword(String username, String password) {User user = null;try {//1.定义sqlString sql = "select * from tab_user where username = ? and password = ?";//2.执行sqluser = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), username,password);} catch (Exception e) {}return user;}
ActiveUserServlet
@WebServlet("/activeUserServlet")
public class ActiveUserServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.获取激活码String code = request.getParameter("code");if(code != null){//2.调用service完成激活UserService service = new UserServiceImpl();boolean flag = service.active(code);//3.判断标记String msg = null;if(flag){//激活成功msg = "激活成功,请登录";}else{//激活失败msg = "激活失败,请联系管理员!";}response.setContentType("text/html;charset=utf-8");response.getWriter().write(msg);}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}
}

在这里插入图片描述

在这里插入图片描述
说不安全被拦截了,手动点击地址
在这里插入图片描述
在这里插入图片描述
设置页面头部的用户名.
在这里插入图片描述

head.html

<!-- 头部 start -->
<script>$(function () {$.get("findUserServlet",{},function (data) {//{uid:1,name:'李四'}var msg = "欢迎回来,"+data.name;$("#span_username").html(msg);}); });</script>


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部