登陆注册小Demo实现

1.基础部件

  • 数据库
  • 服务器
  • 程序

2.详细配置

2.1创建项目并搭建服务器,使它们可以运行

2.2 配置数据库

字段要求:除了u_id 和 u_tel外,其他均是 Varchar类型

2.3 整体认知

  • 项目结构

    以下均为架包

    dao:数据库操作接口定义

    ​ daoimpl:接口的实现

    daomain:类的定义

    service:调用dao方法的接口定义

    ​ serviceimpl:接口的实现

    servlet:和jsp交互

    exception:定义异常

    util:数据库工具

  • 数据流

    jsp<–>servlet<—>serviceimpl<–>daoimpl<—>DB

2.4 具体代码

  • 类代码

    • 和数据库对应的类的代码

      package com.itt.w.domain;public class User {private int u_id;private String u_name;private String u_password;private int u_age;private String u_eamil;private String u_tel;public void setU_id(int u_id) {this.u_id = u_id;}public void setU_name(String u_name) {this.u_name = u_name;}public void setU_password(String u_password) {this.u_password = u_password;}public void setU_age(int u_age) {this.u_age = u_age;}public void setU_eamil(String u_eamil) {this.u_eamil = u_eamil;}public void setU_tel(String u_tel) {this.u_tel = u_tel;}public int getU_id() {return u_id;}public String getU_name() {return u_name;}public String getU_password() {return u_password;}public int getU_age() {return u_age;}public String getU_eamil() {return u_eamil;}public String getU_tel() {return u_tel;}}
    • 用于用户注册时对输入信息检验的类的代码

      package com.itt.w.domain;import java.util.HashMap;
      import java.util.Map;public class UserConfig {private int u_id;private String u_name;private String u_password;private String u_repassword;private int u_age;private String u_eamil;private String u_tel;//验证错误消息集private Map<String,String> msg = new HashMap<String,String>();public boolean validate(){//检验用户名合法性if ("".equals(u_name)) {msg.put("name","用户名不能为空!");}else if (!u_name.matches("\\w{2,12}")){msg.put("name","用户名必须为2~12位的字母数字组成!");}//检验密码合法性if ("".equals(u_password)) {msg.put("password","密码不能为空!");}else if (!u_password.matches("\\d{6,12}")){msg.put("password","密码必须为6~12位的数字组成!");}//检验二次密码的正确性if (!u_repassword.equals(u_password)) {msg.put("repassword","两次密码不一致!");}//验证邮箱合法性if ("".equals(u_eamil)) {msg.put("eamil","密码不能为空!");}else if (!u_eamil.matches("\\b^['_a-z0-9-\\+]+(\\.['_a-z0-9-\\+]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*\\.([a-z]{2}|aero|arpa|asia|biz|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|nato|net|org|pro|tel|travel|xxx)$\\b")){msg.put("eamil","邮箱格式不正确!");}//验证电话合法性if ("".equals(u_tel)) {msg.put("tel","电话不能为空!");}else if (!u_tel.matches("\\d{11}")){msg.put("tel","电话格式不正确");}
      //        //验证日期
      //        if("".equals(birthday)){//            msg.put("birthday", "生日不能为空!");
      //        }else {//            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
      //            try {//                sdf.parse(birthday);
      //            } catch (ParseException e) {//                msg.put("birthday", "生日格式不正确!");
      //            }
      //        }
      //        for(Map.Entry<String, String> m: msg.entrySet()){//            System.out.println(m);
      //        }//错误会放到这个集合中,若集合为空,返回True,表示用户的注册信息合法return msg.isEmpty();}public void setU_id(int u_id) {this.u_id = u_id;}public void setU_name(String u_name) {this.u_name = u_name;}public void setU_password(String u_password) {this.u_password = u_password;}public void setU_repassword(String u_repassword) {this.u_repassword = u_repassword;}public void setU_age(int u_age) {this.u_age = u_age;}public void setU_eamil(String u_eamil) {this.u_eamil = u_eamil;}public void setU_tel(String u_tel) {this.u_tel = u_tel;}public int getU_id() {return u_id;}public String getU_name() {return u_name;}public String getU_password() {return u_password;}public String getU_repassword() {return u_repassword;}public int getU_age() {return u_age;}public String getU_eamil() {return u_eamil;}public String getU_tel() {return u_tel;}public Map<String, String> getMsg() {return msg;}
      }
  • 数据库操作的工具类代码(此处的C3P0只是个名称,内部使用DBUtil实现操作)

    package com.itt.w.util;import com.mchange.v2.c3p0.ComboPooledDataSource;import java.sql.*;public class C3P0Util {private static ComboPooledDataSource dataSource = new ComboPooledDataSource();public static Connection getConnection(){String driver = "com.mysql.cj.jdbc.Driver";String url = "jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8";String username = "root";String password = "123456";Connection conn = null;try {try {Class.forName(driver); //classLoader,加载对应驱动conn = DriverManager.getConnection(url, username, password);return conn;} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}} catch (Exception e) {throw new RuntimeException("服务器忙");}finally {return conn;}}public static void release(Connection con, Statement st, ResultSet set){if (set != null) {try {set.close();} catch (SQLException e) {e.printStackTrace();}set = null;}if (st != null) {try {st.close();} catch (SQLException e) {e.printStackTrace();}st = null;}if (con != null) {try {con.close();} catch (SQLException e) {e.printStackTrace();}con = null;}}
    }
  • dao

    • dao代码

      package com.itt.w.dao;import com.itt.w.domain.User;public interface UserDao {/** 添加用户* */public void addUser(User user) throws Exception;/** 查找用户* */public User findUser(User user) throws Exception;/** 根据用户名查询用户是否存在* */public boolean findUserByName(String name);
      }
    • daoimpl代码

      package com.itt.w.dao.impl;import com.itt.w.dao.UserDao;
      import com.itt.w.domain.User;
      import com.itt.w.exception.U_ExitException;
      import com.itt.w.util.C3P0Util;import java.sql.Connection;
      import java.sql.PreparedStatement;
      import java.sql.ResultSet;public class UserDaoImpl implements UserDao {@Overridepublic void addUser(User user) throws Exception {Connection con = null;PreparedStatement ps = null;try {con = C3P0Util.getConnection();ps = con.prepareStatement("insert into user (u_name, u_password, u_eamil, u_tel) values(?, ?, ?, ?)");ps.setString(1, user.getU_name());ps.setString(2, user.getU_password());ps.setString(3, user.getU_eamil());ps.setString(4, user.getU_tel());ps.executeUpdate();} catch (Exception e) {e.printStackTrace();}finally {C3P0Util.release(con, ps, null);}}@Overridepublic User findUser(User user) throws Exception {Connection con = null;PreparedStatement ps = null;ResultSet set = null;User u = null;try {con = C3P0Util.getConnection();ps = con.prepareStatement("select * from user where u_name = ? and u_password = ? ");ps.setString(1, user.getU_name());ps.setString(2, user.getU_password());set = ps.executeQuery();if (set.next()){u = new User();u.setU_id(set.getInt(1));u.setU_name(set.getString(2));u.setU_password(set.getString(3));u.setU_age(set.getInt(4));u.setU_eamil(set.getString(5));u.setU_tel(set.getString(6));}}catch (Exception e){e.printStackTrace();}finally {C3P0Util.release(con, ps, set);}return u;}@Overridepublic boolean findUserByName(String name){Connection con = null;PreparedStatement ps = null;ResultSet set = null;try {con = C3P0Util.getConnection();ps = con.prepareStatement("select * from user where u_name = ?");ps.setString(1, name);set = ps.executeQuery();if (set.next()){return true;}} catch (Exception e){e.printStackTrace();}finally {C3P0Util.release(con, ps, set);}return false;}
      }
  • service

    • service代码

      package com.itt.w.service;import com.itt.w.domain.User;
      import com.itt.w.exception.U_Exception;
      import com.itt.w.exception.U_ExitException;public interface Userservice {/*** 注册* */public void register (User user) throws Exception;/*** 登陆* */public User login(User user) throws U_Exception;/** 根据用户名查询用户是否存在* */public boolean findUserByName(String name) throws U_ExitException;
      }
    • serviceimpl代码

      package com.itt.w.service.impl;import com.itt.w.dao.UserDao;
      import com.itt.w.dao.impl.UserDaoImpl;
      import com.itt.w.domain.User;
      import com.itt.w.exception.U_Exception;
      import com.itt.w.exception.U_ExitException;
      import com.itt.w.service.Userservice;public class UserServiceImpl implements Userservice {UserDao userDao = new UserDaoImpl();@Overridepublic void register(User user) throws Exception {userDao.addUser(user);}@Overridepublic User login(User user) throws U_Exception {User u = null;try {u = userDao.findUser(user);if (u == null) {throw new U_Exception("用户名和密码错误");}} catch (Exception e) {e.printStackTrace();}return u;}@Overridepublic boolean findUserByName(String name) throws U_ExitException{boolean b = userDao.findUserByName(name);if (b) {throw new U_ExitException("用户名已存在");}return b;}
      }
  • servlet代码

    • regServlet(注册)

      package com.itt.w.web.servlet;import com.itt.w.domain.User;
      import com.itt.w.domain.UserConfig;
      import com.itt.w.exception.U_ExitException;
      import com.itt.w.service.Userservice;
      import com.itt.w.service.impl.UserServiceImpl;
      import org.apache.commons.beanutils.BeanUtils;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 java.io.IOException;@WebServlet("/reg")
      public class regServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("UTF-8");resp.setContentType("text/html;charset=UTF-8");UserConfig uf = new UserConfig();try {BeanUtils.populate(uf, req.getParameterMap());} catch (Exception e) {e.printStackTrace();}if (!uf.validate()) {//非空证明有错误req.setAttribute("uf",uf);req.getRequestDispatcher("reg.jsp").forward(req,resp);return;}User u = new User();try {BeanUtils.populate(u, req.getParameterMap());Userservice userservice = new UserServiceImpl();//查找用户名是否被注册,已注册会抛出异常System.out.println(u);boolean s = userservice.findUserByName(u.getU_name());userservice.register(u);}catch (U_ExitException e) {e.printStackTrace();req.setAttribute("user_Exit","用户名已存在");req.getRequestDispatcher("reg.jsp").forward(req, resp);} catch (Exception e) {e.printStackTrace();}resp.getWriter().write("注册成功,2秒后跳转至登陆界面!");resp.setHeader("refresh","2;login.jsp");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doPost(req, resp);}
      }
    • loginServlet代码(登陆)

      package com.itt.w.web.servlet;import com.itt.w.domain.User;
      import com.itt.w.exception.U_Exception;
      import com.itt.w.service.Userservice;
      import com.itt.w.service.impl.UserServiceImpl;
      import org.apache.commons.beanutils.BeanUtils;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 java.io.IOException;@WebServlet("/login_test")
      public class loginServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{req.setCharacterEncoding("UTF-8");User user = new User();try {BeanUtils.populate(user, req.getParameterMap());} catch (Exception e) {e.printStackTrace();}Userservice userservice = new UserServiceImpl();User u;try {u = userservice.login(user);if (u != null) {//登陆成功,user对象放入Session中req.getSession().setAttribute("u", user);req.getRequestDispatcher("index.jsp").forward(req, resp);}} catch (U_Exception e) {e.printStackTrace();//错误,跳转回登陆界面req.setAttribute("msg", e.getMessage());resp.sendRedirect(req.getContextPath()+"/login.jsp");
      //            req.getRequestDispatcher("login.jsp").forward(req, resp);}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
      }
    • ​ logoutServlet(注销代码)

      package com.itt.w.web.servlet;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 java.io.IOException;@WebServlet("/logout")
      public class logoutSerlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//销毁Sessionreq.getSession().invalidate();resp.sendRedirect("index.jsp");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doPost(req, resp);}
      }
  • 前端代码

    • login.jsp

      <%@ page import="java.util.HashMap" %>
      <%@ page import="java.util.Map" %>
      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <%String name = "";Cookie[] cookies = request.getCookies();for (int i = 0; cookies != null && i < cookies.length; i++) {if (name.equals(cookies[i].getName())) {name = cookies[i].getValue();}}
      %><html>
      <head><title>Title</title>
      </head>
      <body><div id="form" class="form_table"><%--action="ss"--%><form action="login_test" method="get"><%String msg = (String) request.getSession().getAttribute("msg");if (msg != null) {out.write(msg);}%><div id="form_username"><span>用户名:</span><input type="text" name="u_name" class="input_text" value=<%=name%> ></div><br><div id="form_password"><span>密&nbsp;&nbsp;&nbsp;&nbsp;码: </span><input type="password" name="u_password" class="input_text" ></div><br><br><input type="submit" value="登陆" onclick="login()"></form>
      </div>
      </body>
      </html>
    • reg.jsp

      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <html>
      <head><title>register</title>
      </head>
      <body>
      <form action="reg" method="get"><%String msg = (String) request.getSession().getAttribute("user_Exit");if (msg != null) {out.write(msg);}%><div id="form_username"><span>用户名:</span><input type="text" name="u_name" class="input_text" value=${uf.u_name}>${uf.msg.name}${requestScope.get("user_Exit")}</div><br><div id="reg_password"><span>密&nbsp;&nbsp;码: </span><input type="password" name="u_password" class="input_text" >${uf.msg.password}</div><br><div id="reg_repassword"><span>再次输入密码: </span><input type="password" name="u_repassword" class="input_text" >${uf.msg.repassword}</div><br><div id="reg_age"><span>年&nbsp;&nbsp;&nbsp;&nbsp;龄: </span><input type="text" name="u_age" class="input_text" value="${uf.u_age}" ></div><br><div id="reg_eamil"><span>eamil: </span><input type="text" name="u_eamil" class="input_text" value="${uf.u_eamil}">${uf.msg.eamil}</div><br><div id="reg_tel"><span>电&nbsp;&nbsp;&nbsp;&nbsp;话: </span><input type="text" name="u_tel" class="input_text" value="${uf.u_tel}">${uf.msg.tel}</div><br><br><input type="submit" value="注册">
      </form>
      </body>
      </html>
    • Start.html

      <!DOCTYPE html>
      <html lang="en">
      <head><meta http-equiv="Content-Type" content="text/html" charset="UTF-8"><title>Start</title><link rel="stylesheet" type="text/css" href="css/myStyle.css"><!--<script type="text/javascript" src="js/myjs.js"></script>-->
      </head>
      <body><div style="align:center;"><a href="/login.jsp">登陆</a><a href="/reg.jsp">注册</a></div>
      </body>
      </html>
    • index.jsp(登陆成功界面)

      <%@ page import="javax.naming.InitialContext" %>
      <%@ page import="javax.naming.Context" %>
      <%@ page import="javax.sql.DataSource" %>
      <%@ page import="java.sql.Connection" %><%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
      <html><head><title>My Web Test</title></head><body><c:if test="${empty u}"><a href="login.jsp">登陆</a></c:if><c:if test="${not empty u}">欢迎您:${u.u_name}<a href="logout">注销</a></c:if></body>
      </html>

登陆注册小Demo实现相关推荐

  1. Vue + Element UI 实现 登陆注册基本demo实例

    Vue + Element UI 实现权限管理系统 前端篇(二):Vue + Element 案例 导入项目 打开 Visual Studio Code,File --> add Folder ...

  2. 小程序登陆注册功能的实现

    我们在开发小程序时,难免会用到登陆注册功能.通常小程序有为我们提供用户授权登陆的功能,但是这个只能获取用户的头像和昵称,我们该怎么样来实现小程序账号密码的注册和登陆呢,今天就来手把手的带大家学习小程序 ...

  3. 微信小程序-登陆注册滑块验证

    微信小程序-登陆注册滑块验证 一.创建自定义组件MoveVerify 二.在index页面使用 一.创建自定义组件MoveVerify MoveVerify.js Component({/*** 组件 ...

  4. 利用Bmob快速实现安卓的简单登陆注册功能Bmobsdk3.6.9版本亲测可用(详细图文攻略附带处理小bug)

    前言:从其他人的留言中我知道Bmob这个云数据库,之前我一直在自己写后台但是发现太慢了要学的东西超级多,脚手架也不知道为什么老是搭不上很蛋疼,然后春节又必须回来老家山区里面有些事情耽搁了后台也凉了,后 ...

  5. 2020-2-15一个web登录注册小程序与Spring初始+作业

    文章目录 建立一个Web登录注册小程序 1.先在Mysql数据库中新建一个数据库 2.在IDEA中新建一个工程 3.对项目进行简单分层 4.设计一个实体类 5.引入一个jdbc工具类 6.写一个测试类 ...

  6. 运用vue.js写的表格小demo

    2019独角兽企业重金招聘Python工程师标准>>> 最近在学习vue.js,我把工作中项目里面的一个小实例用vue.js重构了下,写成一个小demo,巩固自己所学,并与大家分享, ...

  7. 云服务器apache mysql php_服务器配置教程:阿里云服务器安装PHP环境(附PHP+MySQL+Apache后台小Demo)...

    前言 搭建Apache HTTP Server往往都会安装PHP环境,因为很多人都使用PHP做web.其实相对我而言,我是用PHP做后台.主要是因为我是移动端方向:做iOS和Android.往往需要通 ...

  8. 从一个小demo开始,体验“API经济”的大魅力

    写在前面 "API经济"这个词是越来越火了,但是"API经济"具体指的是什么,相信很多人还没有个明确的认识.不过今天我可不打算长篇大论的去讲解一些概念,我们就以 ...

  9. 结束python服务器进程_服务器端后台持续执行python程序小demo

    冰先生:python小脚本,爬天气预报并定时发邮件提醒(适合小情侣的甜蜜打开方式)​zhuanlan.zhihu.com 上一篇写了做个可以发送邮件的小demo,这一篇呢我们来谈一谈如何让他更加方便的 ...

最新文章

  1. SpringBoot(1.5.6.RELEASE)源码解析(一)
  2. C# WInForm中 窗体的this.width和this.height的属性值不能大于显示器的最大分辨率
  3. php保存成乱序,PHP实现断点续传乱序合并文件的方法
  4. 递归_三要素_基础算法必备
  5. arkit技术介绍_面向移动AR的触觉技术:如何以“触摸”感增强ARKit应用
  6. html table vtop,PART2HTML语言.doc
  7. 服务器文件夹变成自读,服务器终端改文件读写权限
  8. 三步教你配置Java环境
  9. html中居中方法,HTML中5种常见的居中方法
  10. 云服务器配置价格表内容
  11. vc语言c1083错误,vc++常见错误之二:“fatal error C1083: ”无法打开包括文件-Go语言中文社区...
  12. GO语言-panic和recover
  13. C语言实现拟合直线方程
  14. 聪明的猴子(BZOJ 2429)
  15. 计算机任意字符替换,Word中级技巧之同类字符的精确替换
  16. 题解 P1757 【通天之分组背包】
  17. gradle7打包libs目录中的jar生成fat jar
  18. 站在山顶上看golang的前世今生与未来展望
  19. 软件测试项目管理系统系统描述
  20. 技术资料收集 技术大牛及网站推荐 待研究方向

热门文章

  1. python输出数字怎么办_python怎么输出数字
  2. 管路流体仿真matlab,MathWorks 在 Simscape 中新增建模和仿真流体系统功能
  3. 软件测试作业1 令我印象深刻的bug
  4. Django admin修改app名称
  5. k8s健康检查(七)
  6. 也来谈谈人工智能的罪与罚
  7. 站在两个世界的边缘——知无崖
  8. html css标记文本,HTML图像标记和CSS核心基础和文本相关样式
  9. HTML5之 Microdata微数据
  10. win10 设备管理器中没端口选项解决方法