校园论坛(Java)—— 登录注册和用户信息模块

news2025/1/11 17:14:28

校园论坛(Java)—— 登录注册和用户信息模块

文章目录

  • 校园论坛(Java)—— 登录注册和用户信息模块
    • 1、写在前面
    • 2、系统结构设计
      • 2.1 各个页面之间的调用关系
      • 2.2. 登录注册模块各层的设计
    • 3、登录注册模块设计
      • 3.1 用户注册功能
      • 3.2 用户登录功能
    • 4、用户个人信息
      • 4.1 查看个人信息
      • 4.2 修改个人信息
    • 7、项目代码


在这里插入图片描述


1、写在前面

  • Windows版本:Windows10
  • JDK版本:Java8
  • MySQL版本:MySQL5.7
  • Tomcat版本:Tomcat9.0
  • IDE:IntelliJ IDEA Ultimate2020.2.3

2、系统结构设计

2.1 各个页面之间的调用关系

在这里插入图片描述

登录管理模块

  • login.jsp:登录界面
  • check_login()函数:用于判断用户名和密码是否正确
  • home.jsp:登录成功进入主页界面

注册模块

  • register.jsp:该界面用于新用户注册
  • RegisterRepeatUserIdAck.jsp:提示当前注册的ID已经被注册过
  • number.jsp:注册时验证码的生成功能
  • login.jsp:新用户注册完成后跳转到登录界面

用户信息模块

  • individualinfo.jsp:显示个人信息的页面
  • updateinfo.jsp:修改个人信息界面
  • check_login()函数:修改功能会进行验证用户名和密码是否匹配

2.2. 登录注册模块各层的设计

  • Entity层

实体层声明普通帖子的user_id、user_name、user_password、user_sex、user_face、user_phone、user_email、user_from、isAdmin等变量以及对应的set、get方法

/**
 * TODO 用户实体类
 */
public class UserEntity {
    //	private String user_id;
    private int user_id;
    private String user_name;
    private String user_password;
    private String user_sex;
    private String user_face;
    private String user_phone;
    private String user_email;
    private String user_from;
    private int isAdmin;

    // 关联回复信息,一对多的关联
    private List<ReplyEntity> replyList = new ArrayList<ReplyEntity>();
    // 和帖子进行关联,一对多
    private List<ForumEntity> forumList = new ArrayList<ForumEntity>();


    public int getUser_id() {
        return user_id;
    }

    public void setUser_id(int user_id) {
        this.user_id = user_id;
    }

    public String getUser_name() {
        return user_name;
    }

    public void setUser_name(String user_name) {
        this.user_name = user_name;
    }

    public String getUser_password() {
        return user_password;
    }

    public void setUser_password(String user_password) {
        this.user_password = user_password;
    }

    public String getUser_sex() {
        return user_sex;
    }

    public void setUser_sex(String user_sex) {
        this.user_sex = user_sex;
    }

    public String getUser_face() {
        return user_face;
    }

    public void setUser_face(String user_face) {
        this.user_face = user_face;
    }

    public String getUser_phone() {
        return user_phone;
    }

    public void setUser_phone(String user_phone) {
        this.user_phone = user_phone;
    }

    public String getUser_email() {
        return user_email;
    }

    public void setUser_email(String user_email) {
        this.user_email = user_email;
    }

    public String getUser_from() {
        return user_from;
    }

    public void setUser_from(String user_from) {
        this.user_from = user_from;
    }



    public int getIsAdmin() {
        return isAdmin;
    }

    public void setIsAdmin(int isAdmin) {
        this.isAdmin = isAdmin;
    }

    public List<ReplyEntity> getReplyList() {
        return replyList;
    }

    public void setReplyList(List<ReplyEntity> replyList) {
        this.replyList = replyList;
    }

    public List<ForumEntity> getForumList() {
        return forumList;
    }

    public void setForumList(List<ForumEntity> forumList) {
        this.forumList = forumList;
    }

}
  • Dao层

Dao层分别实现一个interface接口类以及一个接口方法实现类

接口类:

public interface UserDaoInf {

    // TODO 登录时作用户的验证查询
    public UserEntity findUser(String userId, String passwd);

    // TODO 根据id查询用户
    public UserEntity findUserById(int id);

    // TODO 添加用户
    public int addUser(UserEntity user);

    // TODO 删除用户
    public void deleteUser(int uid);

    // TODO 修改用户
    public void updateUser(UserEntity user);

    // TODO 查询所有用户信息
    public List<UserEntity> findUserlist();
}

接口实现方法

public class UserDaoImpl implements UserDaoInf{
    public UserEntity findUser(String userId, String passwd) {
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = "select * from user_info where user_id=? and user_password=?";
        UserEntity user = null;
        try{
            conn = DBUtil.getConnection();
            ps = conn.prepareStatement(sql);
            ps.setString(1, userId);
            ps.setString(2, passwd);
            rs = ps.executeQuery();
            if(rs.next()){
                user = new UserEntity();

                user.setUser_id(rs.getInt(1));
                user.setUser_name(rs.getString(2));
                user.setUser_password(rs.getString(3));
                user.setUser_sex(rs.getString(4));
                user.setUser_face(rs.getString(5));
                user.setUser_phone(rs.getString(6));
                user.setUser_email(rs.getString(7));
                user.setUser_from(rs.getString(8));
                user.setIsAdmin(rs.getInt(9));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DBUtil.close(rs, ps, conn);
        }
        return user;
    }

    public int addUser(UserEntity user) {
        Connection conn = null;
        PreparedStatement ps = null;
        String isRepeatUserId = "";
        int i = 0;

        String repeatIDSql = "SELECT \"true\" FROM user_info where user_id = " + user.getUser_id();
        try {

            conn = DBUtil.getConnection();

            ps = conn.prepareStatement(repeatIDSql);

            ResultSet resultSet = ps.executeQuery();
            if (resultSet.next()) {
                isRepeatUserId = resultSet.getString(1);
            }
            System.out.println("查询完成!");
            if ("true".equals(isRepeatUserId)) {
                System.out.println(isRepeatUserId);
                return 0;
            } else {
                String sql = "insert into user_info(user_id,user_name,user_password,user_sex,user_face,user_phone,user_email,user_from) values(?,?,?,?,?,?,?,?)";

                System.out.println(user.getUser_id());

                try {
                    conn = DBUtil.getConnection();

                    ps = conn.prepareStatement(sql);
                    ps.setInt(1, user.getUser_id());
                    ps.setString(2, user.getUser_name());
                    ps.setString(3, user.getUser_password());
                    ps.setString(4, user.getUser_sex());
                    ps.setString(5, user.getUser_face());
                    ps.setString(6, user.getUser_phone());
                    ps.setString(7, user.getUser_email());
                    ps.setString(8, user.getUser_from());

                    i = ps.executeUpdate();

                    System.out.println("插入数据库成功");
                } catch (Exception e){
                    e.printStackTrace();
                } finally {
                    DBUtil.close(null, ps, conn);
                }
            }

        } catch (Exception e){
            e.printStackTrace();
        } finally {
            DBUtil.close(null, ps, conn);
        }

        return i;
    }

    public void deleteUser(int uid){
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;

        // TODO SQL:
        String sql = "delete from user_info where user_id = ?";

        try {
            conn = DBUtil.getConnection();
            ps = conn.prepareStatement(sql);
            ps.setInt(1, uid);
            ps.executeUpdate();

            System.out.println("删除用户成功!");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DBUtil.close(rs, ps, conn);
        }

    }

    public void updateUser(UserEntity user){
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql= "update user_info set user_name=?,user_password=?,user_sex=?,user_face=?,user_phone=?,user_email=?,user_from=? where user_id=?";
        try {
            conn = DBUtil.getConnection();
            ps = conn.prepareStatement(sql);

            ps.setString(1, user.getUser_name());
            ps.setString(2, user.getUser_password());
            ps.setString(3, user.getUser_sex());
            ps.setString(4, user.getUser_face());
            ps.setString(5, user.getUser_phone());
            ps.setString(6, user.getUser_email());
            ps.setString(7, user.getUser_from());
            ps.setInt(8, user.getUser_id());

            ps.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DBUtil.close(rs, ps, conn);
        }

    }

    public UserEntity findUserById(int id) {
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = "select * from user_info where user_id=?";
        UserEntity user = null;

        try{
            conn = DBUtil.getConnection();
            ps = conn.prepareStatement(sql);
            ps.setInt(1, id);
            rs = ps.executeQuery();
            if (rs.next()) {
                user = new UserEntity();
                user.setUser_id(rs.getInt(1));
                user.setUser_name(rs.getString(2));
                user.setUser_password(rs.getString(3));
                user.setUser_sex(rs.getString(4));
                user.setUser_face(rs.getString(5));
                user.setUser_phone(rs.getString(6));
                user.setUser_email(rs.getString(7));
                user.setUser_from(rs.getString(8));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DBUtil.close(rs, ps, conn);
        }
        return user;
    }

    public List<UserEntity> findUserlist(){
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;

        List<UserEntity> userlist = new ArrayList<UserEntity>();
        String sql="select * from user_info";

        try {
            conn=DBUtil.getConnection();
            ps=conn.prepareStatement(sql);
            rs=ps.executeQuery();

            while(rs.next()){
                UserEntity user = new UserEntity();
                user.setUser_id(rs.getInt(1));
                user.setUser_name(rs.getString(2));
                user.setUser_password(rs.getString(3));
                user.setUser_sex(rs.getString(4));
                user.setUser_face(rs.getString(5));
                user.setUser_phone(rs.getString(6));
                user.setUser_email(rs.getString(7));
                user.setUser_from(rs.getString(8));
                user.setIsAdmin(rs.getInt(9));

                userlist.add(user);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DBUtil.close(rs, ps, conn);
        }
        return userlist;
    }
}
  • service层

实现servlet层调用的方法,对数据库进行增删改查操作。

  • Servlet层

在该层,通过jsp页面传递的参数,调用相应的方法进行操作。

  • filter层

拦截过滤层,对注册用户时,验证码的过滤操作

public class EncodingFilter implements Filter {

    private String encode;

    public void destroy() {

    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        if (encode != null) {
            request.setCharacterEncoding(encode);
            response.setCharacterEncoding(encode);
        }
        chain.doFilter(request, response);
    }

    public void init(FilterConfig config) throws ServletException {
        encode = config.getInitParameter("encode");
    }

}

3、登录注册模块设计

3.1 用户注册功能

进入登录页面后,对于第一次登录的用户来说,首先需要注册,单击「新用户注册」按钮即可进入注册界面,注册完成后返回登录界面。然后,在对应的地方分别输入用户名和密码,点击「登录」按钮,系统即将用户名和密码发送到网络服务器上,与保存在服务器数据库中的信息进行核对。若核对正确,则进入帖子浏览的界面,若不正确,会有提示账号或者密码出错,随即重新返回登录界面。

注册界面如下所示:

在这里插入图片描述

register.jsp页面实现注册界面,同时判断用户ID是否已被注册过了,若被注册过,则RegisterRepeatUserIdAck.jsp会提示已注册。注册的最后一步需要通过验证码验证。信息填写完整并通过验证码验证后,由「注册」按钮实现用户增加的逻辑操作。

用户ID判空功能

在这里插入图片描述

学号判重

在这里插入图片描述

学号检验

在这里插入图片描述

联系电话检验

在这里插入图片描述

邮箱格式检验

在这里插入图片描述

验证码检验

在这里插入图片描述

3.2 用户登录功能

登录界面的制作

先考虑登录主界面的制作,再通过JavaScript标记语言判断输入的用户名和密码是否为空;

登录界面如下所示:

在这里插入图片描述

登录功能的实现

通过login.jsp界面传递参数user_iduser_passwordLoginServlet.java,然后查询数据库,判断用户名和密码是否正确,对于密码在传输的过程中会使用MD5进行加密(hex_md5(user_password))。若判断正确则为用户建立一个Session,并进入了Fosu校园论坛主界面。

4、用户个人信息

4.1 查看个人信息

在系统右上角选择个人信息一栏,即可查看个人信息。

如下图所示:
在这里插入图片描述

4.2 修改个人信息

选择「修改资料」按钮即可修改用户个人信息,包括用户名、密码、性别、联系电话、电子邮箱、地址、头像的更改。

如下图所示:

在这里插入图片描述

7、项目代码

  • GitHub
  • Gitee

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/50390.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HighTec 工程配置详解

HighTec 工程配置详解 编译配置 构建配置管理器 管理器内&#xff0c;可以创建各种不同用途的配置项。例如用于生产工程的 ROM 配置&#xff0c;用于调试工程的 Debug 配置。对于每个配置&#xff0c;所设置的工程属性是单独分开的&#xff0c;互相之间没有影响。 打开构建配…

[附源码]计算机毕业设计springboot咖啡销售平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Unity复刻骑砍中的帝国象棋(一)

Unity复刻骑砍中的帝国象棋&#xff08;一&#xff09; 起因和简介 这两天从一款游戏中发现了这么个棋类小游戏&#xff0c;觉得挺有意思&#xff0c;没错&#xff0c;就是下面这个&#xff1a; 作为程序员的我&#xff0c;一下就想到复刻它一下。这个棋类小游戏&#xff0c…

【程序人生】4年创作纪念日,不忘初心,继续前行

&#x1f4eb;作者简介&#xff1a;小明java问道之路&#xff0c;专注于研究 Java/ Liunx内核/ C及汇编/计算机底层原理/源码&#xff0c;就职于大型金融公司后端高级工程师&#xff0c;擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。 &#x1…

JavaScript --04. 流程控制语句介绍

文章目录流程控制1 代码块1.1 声明代码块1.2 let 和 var的作用域2 条件判断语句 -- if语句3 条件分支语句3.1 if-else语句3.2 if-else if-else语句3.3 练习4 Switch语句5 循环语句5.1 While循环5.2 do-while循环5.3 for循环5.4 嵌套循环6 break和continue6.1 break6.2 continue…

PTL智能拣货系统

一、PTL背景介绍 随着工业 4.0 理念持续扩展并被接受&#xff0c;智能制造将是中国制造业发展趋势。未来的生产企业不仅仅在生产过程中追求智能化&#xff0c;仓储、工具、设备智能化管理都会成为新的趋势。 现阶段物流仓储行业进入了一个快速的发展期&#xff0c;各种各样的…

辣椒疫霉RXLR效应子抑制植物免疫

文章信息 题目&#xff1a;A Phytophthora capsici RXLR effector targets and inhibits the central immune kinases to suppress plant immunity 刊名&#xff1a;New Phytologist 作者&#xff1a;Xiangxiu Liang&#xff0c;Daolong Dou et al. 单位&#xff1a;China …

微信无感知检测单项好友【WeTool 免费版】【微信如何检测单向好友?】

一.微信无感知检测单项好友 1.1 背景 因为最近业务的原因加了好多的陌生微信好友&#xff0c;难免有很多好友删了我&#xff0c;但是我还有他的微信&#xff0c;岂不是很占地方&#xff1f; 所以我琢磨如何检测这些单项好友【利用转账、拉群的方法太费时间】&#xff0c;我无…

[附源码]计算机毕业设计springboot拉勾教育课程管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

事件绑定(onclick,onfocus,onblur)

事件绑定(onclick,onfocus,onblur) 学习路线&#xff1a;JavaScript_DOM->事件绑定(onclick,onfocus,onblur)-> 事件绑定(onmouseout,onmouseover) ->事件绑定(onsubmit)表单提交 ->提交表单与验证表单案例 常用绑定方式 方式一&#xff1a;通过 HTML标签中的事…

Java Hash 碰撞

散列函数&#xff08;英语&#xff1a;Hash function&#xff09;又称散列算法、哈希函数&#xff0c;是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要&#xff0c;使得数据量变小&#xff0c;将数据的格式固定下来。 该函数将数据打乱混合…

获取windows硬件、软件信息的方法

1&#xff0c;方法1 systeminfo 该命令是Windows中用于显示关于计算机及其操作系统的详细配置信息&#xff0c;包括操作系统配置、安全信息、产品 ID 和硬件属性&#xff0c;如 RAM、磁盘空间和网卡和补丁信息等。 SYSTEMINFO [/S system [/U username [/P [password]]]] [/FO…

从阿里降薪百分之三十来了国企,没想到还是要加班!哭了!

从阿里进国企&#xff0c;图什么&#xff1f;图它降工资&#xff1f;图它技术强&#xff1f;当然是图它轻松不加班&#xff0c;稳定不裁员&#xff01;但如果像下面这位阿里程序员一样&#xff0c;降薪百分之三十进了国企&#xff0c;发现还是得加班&#xff0c;大概只能emo了.…

[附源码]Python计算机毕业设计Django的文成考研培训管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Ae 动态图形模板

哈喽&#xff0c;各位小伙伴&#xff01;今天我们来学习一下如何通过AePr导出和安装动态图形模板&#xff1f; 新建合成 首先&#xff0c;新建一个合成&#xff0c;然后点击文字工具&#xff0c;内容自定义&#xff08;例&#xff1a;一场彗星雨&#xff0c;隔断了时空&#…

【408篇】C语言笔记-第九章(数据结构概述)

文章目录第一节&#xff1a;逻辑结构与存储结构1. 逻辑结构2. 存储结构1. 顺序存储2. 链式存储3. 顺序存储与链式存储分析第二节&#xff1a;算法的评价&#xff08;时间复杂度与空间复杂度&#xff09;1. 算法定义2. 时间复杂度3. 空间复杂度第一节&#xff1a;逻辑结构与存储…

CentOS7安装GmSSL过程记录

近期因为项目需要上区块链&#xff0c;在集成过程中证书选择了国密SM2&#xff0c;于是开启了入坑之旅&#xff0c;由于整个过程反复多次&#xff0c;我的记录也可能存在遗漏&#xff0c;只能尽力记录&#xff0c;这也是我为什么熬夜也要写下这篇记录&#xff01; 环境说明Virt…

[附源码]Python计算机毕业设计Django的玉石交易系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;我…

【Pandas数据处理100例】(九十三):Pandas使用all()函数判断DataFrame中的元素是否都为True

前言 大家好,我是阿光。 本专栏整理了《Pandas数据分析处理》,内包含了各种常见的数据处理,以及Pandas内置函数的使用方法,帮助我们快速便捷的处理表格数据。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmPandas版本:1.3.5N…

数据库事务、连接与java线程之间的关系

最近在处理事务和多线程时&#xff0c;比较困扰数据库事务&#xff0c;数据库连接以及java线程之间的关系。 问题1&#xff1a;事务和连接的关系&#xff1f; 回答&#xff1a;对于数据库事务来说先有一个连接&#xff0c;才能有事务&#xff0c;一个连接里可以有一次或多次事…