• 【JAVA】网页版登录注册系统2.0


    前言

    JAVA实现网页的登录与注册2.0版

    一、环境的搭建

    导入1.0版本的项目Java实现网页版登录注册系统-Java文档类资源-CSDN文库可参考【JAVA】网页版登录注册系统_Lx_Hy_的博客-CSDN博客

    1.0版本项目目录                                                2.0版本目录

     

    1. 创建如上图框内所示的文件及文件夹并且将login.html和register.html中代码复制到相对应的jsp文件中 
    2. 在js文件夹中添加(这俩文件在可在官网下载也可在资源库下载Vue.js+axios.js文件-Javascript文档类资源-CSDN文库

    二、功能完善及优化

    1、登录功能

    1、在UserService中添加登录功能中调用数据库查询部分的方法

    1. //登录功能
    2. public User login(String username, String password) {
    3. //获取SqlSession
    4. SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
    5. //获取UserMapper
    6. UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    7. //调用方法
    8. User user = mapper.selectByConditionSingle_Log(username, password);
    9. //释放资源
    10. sqlSession.close();
    11. return user;
    12. }

     2、使用cookie-session技术优化LoginServlrt中的代码并且实现了客户端保存登录密码的功能 (可参考【JAVA】会话跟踪技术_Lx_Hy_的博客-CSDN博客

    1. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    2. //获取用户名和密码
    3. String username = request.getParameter("username");
    4. String password = request.getParameter("password");
    5. //获取复选框数据
    6. String remember = request.getParameter("remember");
    7. //调用service
    8. User user = service.login(username, password);
    9. //判断
    10. if(user!=null){
    11. //登录成功,跳转到查询信息
    12. //登录成功后的user对象,存储到session
    13. //判断用户是否勾选记住我
    14. if ("1".equals(remember)){
    15. //勾选
    16. //创建Cookie对象
    17. Cookie c_username=new Cookie("username",username);
    18. Cookie c_password=new Cookie("password",password);
    19. //设置Cookie存活时间
    20. c_username.setMaxAge(60*60);
    21. c_password.setMaxAge(60*60);
    22. //发送
    23. response.addCookie(c_username);
    24. response.addCookie(c_password);
    25. }
    26. HttpSession session = request.getSession();
    27. session.setAttribute("user",user);
    28. String contextPath = request.getContextPath();
    29. response.sendRedirect(contextPath+"/success.jsp");
    30. }else {
    31. //登陆失败,跳转到login.jsp
    32. //错误信息存储到request
    33. request.setAttribute("login_msg","用户名或密码错误");
    34. //跳转到login.jsp
    35. request.getRequestDispatcher("/login.jsp").forward(request,response);
    36. }

    3、在login.jsp中改变用户名和密码的value可使用cookie技术保存的用户名和密码

    1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    2. <%--页首插入这句--%>
    3. <%@page isELIgnored="false" %>
    4. html>
    5. <html lang="en">
    6. <head>
    7. <meta charset="UTF-8">
    8. <title>logintitle>
    9. <link href="css/login.css" rel="stylesheet">
    10. head>
    11. <body>
    12. <div id="loginDiv" style="height: 350px">
    13. <form action="/WebServer2/loginServlet" id="form">
    14. <h1 id="loginMsg">LOGIN INh1>
    15. <div id="errorMsg">${login_msg} ${register_msg}div>
    16. <p>Username:<input id="username" name="username" value="${cookie.username.value}" type="text">p>
    17. <p>Password:<input id="password" name="password" value="${cookie.password.value}" type="password">p>
    18. <p>Remember:<input id="remember" name="remember" value="1" type="checkbox">p>
    19. <div id="subDiv">
    20. <input type="submit" class="button" value="login up">
    21. <a href="register.jsp">没有账号?a>
    22. div>
    23. form>
    24. div>
    25. body>
    26. html>

    2、注册功能

    1、在UserService中添加注册功能中调用数据库查询及添加部分的方法

    1. //注册功能
    2. public boolean register(User user) {
    3. //获取SqlSession
    4. SqlSession sqlSession = sqlSessionFactory.openSession();
    5. //获取UserMapper
    6. UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    7. //判断用户是否存在
    8. User u = mapper.selectByUsername(user.getUsername());
    9. //调用方法
    10. if (u == null) {
    11. //用户名不存在
    12. mapper.add(user);
    13. sqlSession.commit();
    14. }
    15. sqlSession.close();
    16. return u == null;
    17. }

    2、使用cookie-session技术优化RegisterServlrt中的代码(可参考【JAVA】会话跟踪技术_Lx_Hy_的博客-CSDN博客

    1. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    2. //获取用户名和密码的数据
    3. String username = request.getParameter("username");
    4. boolean flag1 = service.checkUsername(username);
    5. String password = request.getParameter("password");
    6. //用户的封装
    7. User user = new User();
    8. user.setUsername(username);
    9. user.setPassword(password);
    10. //获取用户输入的验证码
    11. String checkCode = request.getParameter("checkCode");
    12. //程序输入的验证码
    13. HttpSession session = request.getSession();
    14. String checkCodeGen = (String) session.getAttribute("checkCodeGen");
    15. //比对验证码
    16. if (!checkCodeGen.equalsIgnoreCase(checkCode)) {
    17. //不允许注册
    18. request.setAttribute("register_msg", "验证码错误");
    19. request.getRequestDispatcher("/register.jsp").forward(request, response);
    20. return;
    21. }
    22. //调用service注册
    23. boolean flag = service.register(user);
    24. //判断是否注册成功
    25. if (flag) {
    26. //注册成功,跳转登陆页面
    27. request.setAttribute("register_msg", "注册成功,请登录");
    28. request.getRequestDispatcher("/login.jsp").forward(request, response);
    29. } else {
    30. //注册失败,跳转注册页面
    31. //request.setAttribute("register_msg","用户名已存在");
    32. request.getRequestDispatcher("/register.jsp").forward(request, response);
    33. }
    34. }

    3、注册实时检查功能

    (用户在输入完用户名之后实时查询用户名是否存在)

    1、在UserService中添加注册功能中调用数据库查询部分的方法

    1. //注册检查功能
    2. public boolean checkUsername(String username){
    3. //获取SqlSession
    4. SqlSession sqlSession = sqlSessionFactory.openSession();
    5. //获取UserMapper
    6. UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    7. //判断用户是否存在
    8. User u = mapper.selectByUsername(username);
    9. //判断
    10. if(u==null){
    11. return false;
    12. }
    13. return true;
    14. }

    2、使用Request&Response技术实现SelectUserServlet中的代码(可参考【JAVA】Request&Response_Lx_Hy_的博客-CSDN博客

    1. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    2. String username = request.getParameter("username");
    3. boolean flag1 = service.checkUsername(username);
    4. if (flag1) {
    5. request.setAttribute("register_msg", "用户名已存在");
    6. }
    7. response.getWriter().write("" + flag1);
    8. }

    3、在register.jsp使用axios技术在用户名输入框失去焦点事件时就进行用户名的重复判断(可参考【JAVA】AJAX&JSON_Lx_Hy_的博客-CSDN博客

    1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    2. <%--页首插入这句--%>
    3. <%@page isELIgnored="false" %>
    4. html>
    5. <html lang="en">
    6. <head>
    7. <meta charset="UTF-8">
    8. <title>欢迎注册title>
    9. <link href="css/register.css" rel="stylesheet">
    10. head>
    11. <body>
    12. <div class="form-div">
    13. <div class="reg-content">
    14. <h1>欢迎注册h1>
    15. <span>已有帐号?span> <a href="login.html">登录a>
    16. div>
    17. <form id="reg-form" action="/WebServer2/selectUserServlet" method="post">
    18. <table>
    19. <tr>
    20. <td>用户名td>
    21. <td class="inputs">
    22. <input name="username" type="text" id="username">
    23. <br>
    24. <span id="username_err" class="err_msg" style="display: none">用户名已存在span>
    25. td>
    26. tr>
    27. <tr>
    28. <td>密码td>
    29. <td class="inputs">
    30. <input name="password" type="password" id="password">
    31. <br>
    32. <span id="password_err" class="err_msg" style="display: none">密码格式有误span>
    33. td>
    34. tr>
    35. <tr>
    36. <td>验证码td>
    37. <td class="inputs">
    38. <input name="checkCode" type="text" id="checkCode">
    39. <img id="checkCodeImg" src="/WebServer2/checkCodeServlet">
    40. <a href="#" id="changeImg">看不清?a>
    41. td>
    42. tr>
    43. table>
    44. <div class="buttons">
    45. <input value="注 册" type="submit" id="reg_btn">
    46. div>
    47. <br class="clear">
    48. form>
    49. div>
    50. <script src="js/axios-0.18.0.js">script>
    51. <script>
    52. //给用户名输入框绑定 失去焦点事件
    53. document.getElementById("username").onblur = function () {
    54. //发送ajax请求
    55. let username = this.value;
    56. axios({
    57. method: "get",
    58. url: "http://localhost:8080/WebServer2/selectUserServlet?username="+ username,
    59. }).then(function (resp) {
    60. if(resp.data===true){
    61. //用户名存在,显示提示信息
    62. document.getElementById("username_err").style.display = '';
    63. } else {
    64. //用户名不存在,清除提示信息
    65. document.getElementById("username_err").style.display = 'none';
    66. }
    67. })
    68. }
    69. script>
    70. <script>
    71. //点击看不清按钮
    72. document.getElementById("changeImg").onclick = function () {
    73. document.getElementById("checkCodeImg").src = "/WebServer2/checkCodeServlet?" + new Date().getMilliseconds();
    74. }
    75. script>
    76. body>
    77. html>

    4、验证码功能

    1、利用CheckCodeUtil工具生成验证码(完整的工具包在资源中)

    1. /**
    2. * 生成随机验证码文件,并返回验证码值 (生成图片形式,用的较少)
    3. *
    4. * @param width 图片宽度
    5. * @param height 图片高度
    6. * @param os 输出流
    7. * @param verifySize 数据长度
    8. * @return 验证码数据
    9. * @throws IOException
    10. */
    11. public static String outputVerifyImage(int width, int height, File os, int verifySize) throws IOException {
    12. String verifyCode = generateVerifyCode(verifySize);
    13. outputImage(width, height, os, verifyCode);
    14. return verifyCode;
    15. }

    2、在CheckCodeServlet中利用response和session生成并将验证码存入session

    1. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    2. //生成验证码
    3. ServletOutputStream os = response.getOutputStream();
    4. String checkCode = CheckCodeUtil.outputVerifyImage(100, 50, os, 4);
    5. //存入Session
    6. HttpSession session=request.getSession();
    7. session.setAttribute("checkCodeGen",checkCode);
    8. }

    【效果】

    5、登录拦截功能

    (在未登录注册之前,不能对系统进行任何操作)

    1、使用过滤器Filter对可访问页面进行过滤(可参考【JAVA】Filter&Listener_Lx_Hy_的博客-CSDN博客),只保留与登录注册相关的文件可以访问

    1. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
    2. HttpServletRequest req = (HttpServletRequest) request;
    3. //判断访问的资源是否和登陆注册相关
    4. String[] urls = {"/login.jsp", "/imgs/", "/css/", "/loginServlet", "/register.jsp", "/registerServlet", "/checkCodeServlet","/selectUserServlet"};
    5. //获取当前访问的资源路径
    6. String url = req.getRequestURL().toString();
    7. //循环判断
    8. for (String u : urls) {
    9. if(url.contains(u)){
    10. //找到了
    11. //放行
    12. chain.doFilter(request, response);
    13. //没找到
    14. return;
    15. }
    16. }
    17. //判断session中是否有user
    18. HttpSession session = req.getSession();
    19. Object user = session.getAttribute("user");
    20. //判断user是否为null
    21. if (user != null) {
    22. //登陆过了
    23. //放行
    24. chain.doFilter(request, response);
    25. } else {
    26. //没有登录
    27. //req.setAttribute("login_msg", "您尚未登录");
    28. req.getRequestDispatcher("/login.jsp").forward(request, response);
    29. }
    30. }

    总结

    以上就是JAVA实现网页的登录与注册的全部内容,如有问题,可以私信讨论,感谢阅读!

    全部源码放在Java实现网页版登录注册系统2.0-Java文档类资源-CSDN文库

  • 相关阅读:
    LVGL双向链表学习笔记
    Redis的安装和使用
    Mybatis ResultType处理返回类型
    IntelliJ IDEA 2022.2正式发布,支持Spring Boot 3和Spring 6
    基于JAVA的幼儿园管理系统的设计与实现-计算机毕业设计
    Git 02: git管理码云代码仓库 + IDEA集成使用git
    解锁Mysql中的JSON数据类型,怎一个爽字了得
    Vue3 readonly 和 shallowReadonly
    通用分页02(前端)
    【异常】com.alicp.jetcache.support.CacheEncodeException: Java Encode error.
  • 原文地址:https://blog.csdn.net/huihu__/article/details/126437898