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

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

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


1eacb2c9e5cd491aba393234dea780cc.jpeg



1、写在前面


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


2、系统结构设计

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

1.png

> 登录管理模块


  • 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 用户实体类*/publicclassUserEntity {
//  private String user_id;privateintuser_id;
privateStringuser_name;
privateStringuser_password;
privateStringuser_sex;
privateStringuser_face;
privateStringuser_phone;
privateStringuser_email;
privateStringuser_from;
privateintisAdmin;
// 关联回复信息,一对多的关联privateList<ReplyEntity>replyList=newArrayList<ReplyEntity>();
// 和帖子进行关联,一对多privateList<ForumEntity>forumList=newArrayList<ForumEntity>();
publicintgetUser_id() {
returnuser_id;
    }
publicvoidsetUser_id(intuser_id) {
this.user_id=user_id;
    }
publicStringgetUser_name() {
returnuser_name;
    }
publicvoidsetUser_name(Stringuser_name) {
this.user_name=user_name;
    }
publicStringgetUser_password() {
returnuser_password;
    }
publicvoidsetUser_password(Stringuser_password) {
this.user_password=user_password;
    }
publicStringgetUser_sex() {
returnuser_sex;
    }
publicvoidsetUser_sex(Stringuser_sex) {
this.user_sex=user_sex;
    }
publicStringgetUser_face() {
returnuser_face;
    }
publicvoidsetUser_face(Stringuser_face) {
this.user_face=user_face;
    }
publicStringgetUser_phone() {
returnuser_phone;
    }
publicvoidsetUser_phone(Stringuser_phone) {
this.user_phone=user_phone;
    }
publicStringgetUser_email() {
returnuser_email;
    }
publicvoidsetUser_email(Stringuser_email) {
this.user_email=user_email;
    }
publicStringgetUser_from() {
returnuser_from;
    }
publicvoidsetUser_from(Stringuser_from) {
this.user_from=user_from;
    }
publicintgetIsAdmin() {
returnisAdmin;
    }
publicvoidsetIsAdmin(intisAdmin) {
this.isAdmin=isAdmin;
    }
publicList<ReplyEntity>getReplyList() {
returnreplyList;
    }
publicvoidsetReplyList(List<ReplyEntity>replyList) {
this.replyList=replyList;
    }
publicList<ForumEntity>getForumList() {
returnforumList;
    }
publicvoidsetForumList(List<ForumEntity>forumList) {
this.forumList=forumList;
    }
}


  • Dao层


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


接口类:


publicinterfaceUserDaoInf {
// TODO 登录时作用户的验证查询publicUserEntityfindUser(StringuserId, Stringpasswd);
// TODO 根据id查询用户publicUserEntityfindUserById(intid);
// TODO 添加用户publicintaddUser(UserEntityuser);
// TODO 删除用户publicvoiddeleteUser(intuid);
// TODO 修改用户publicvoidupdateUser(UserEntityuser);
// TODO 查询所有用户信息publicList<UserEntity>findUserlist();
}
```>接口实现方法```publicclassUserDaoImplimplementsUserDaoInf{
publicUserEntityfindUser(StringuserId, Stringpasswd) {
Connectionconn=null;
PreparedStatementps=null;
ResultSetrs=null;
Stringsql="select * from user_info where user_id=? and user_password=?";
UserEntityuser=null;
try{
conn=DBUtil.getConnection();
ps=conn.prepareStatement(sql);
ps.setString(1, userId);
ps.setString(2, passwd);
rs=ps.executeQuery();
if(rs.next()){
user=newUserEntity();
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 (Exceptione) {
e.printStackTrace();
        } finally {
DBUtil.close(rs, ps, conn);
        }
returnuser;
    }
publicintaddUser(UserEntityuser) {
Connectionconn=null;
PreparedStatementps=null;
StringisRepeatUserId="";
inti=0;
StringrepeatIDSql="SELECT \"true\" FROM user_info where user_id = "+user.getUser_id();
try {
conn=DBUtil.getConnection();
ps=conn.prepareStatement(repeatIDSql);
ResultSetresultSet=ps.executeQuery();
if (resultSet.next()) {
isRepeatUserId=resultSet.getString(1);
            }
System.out.println("查询完成!");
if ("true".equals(isRepeatUserId)) {
System.out.println(isRepeatUserId);
return0;
            } else {
Stringsql="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 (Exceptione){
e.printStackTrace();
                } finally {
DBUtil.close(null, ps, conn);
                }
            }
        } catch (Exceptione){
e.printStackTrace();
        } finally {
DBUtil.close(null, ps, conn);
        }
returni;
    }
publicvoiddeleteUser(intuid){
Connectionconn=null;
PreparedStatementps=null;
ResultSetrs=null;
// TODO SQL:Stringsql="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 (Exceptione) {
e.printStackTrace();
        } finally {
DBUtil.close(rs, ps, conn);
        }
    }
publicvoidupdateUser(UserEntityuser){
Connectionconn=null;
PreparedStatementps=null;
ResultSetrs=null;
Stringsql="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 (Exceptione) {
e.printStackTrace();
        } finally {
DBUtil.close(rs, ps, conn);
        }
    }
publicUserEntityfindUserById(intid) {
Connectionconn=null;
PreparedStatementps=null;
ResultSetrs=null;
Stringsql="select * from user_info where user_id=?";
UserEntityuser=null;
try{
conn=DBUtil.getConnection();
ps=conn.prepareStatement(sql);
ps.setInt(1, id);
rs=ps.executeQuery();
if (rs.next()) {
user=newUserEntity();
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 (Exceptione) {
e.printStackTrace();
        } finally {
DBUtil.close(rs, ps, conn);
        }
returnuser;
    }
publicList<UserEntity>findUserlist(){
Connectionconn=null;
PreparedStatementps=null;
ResultSetrs=null;
List<UserEntity>userlist=newArrayList<UserEntity>();
Stringsql="select * from user_info";
try {
conn=DBUtil.getConnection();
ps=conn.prepareStatement(sql);
rs=ps.executeQuery();
while(rs.next()){
UserEntityuser=newUserEntity();
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 (Exceptione) {
e.printStackTrace();
        } finally {
DBUtil.close(rs, ps, conn);
        }
returnuserlist;
    }
}


  • service层


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


  • Servlet层


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


  • filter层


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


publicclassEncodingFilterimplementsFilter {
privateStringencode;
publicvoiddestroy() {
    }
publicvoiddoFilter(ServletRequestrequest, ServletResponseresponse, FilterChainchain) throwsIOException, ServletException {
if (encode!=null) {
request.setCharacterEncoding(encode);
response.setCharacterEncoding(encode);
        }
chain.doFilter(request, response);
    }
publicvoidinit(FilterConfigconfig) throwsServletException {
encode=config.getInitParameter("encode");
    }
}



3、登录注册模块设计

3.1 用户注册功能


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


注册界面如下所示:


2.png


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


用户ID判空功能

3.png


学号判重


4.png


学号检验


5.png

联系电话检验


6.png


邮箱格式检验


7.png

验证码检验


8.png

3.2 用户登录功能


登录界面的制作


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


登录界面如下所示:


9.png


登录功能的实现


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


4、用户个人信息

4.1 查看个人信息

 

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


10.png

4.2 修改个人信息


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


如下图所示:

12.png

7、项目代码


目录
相关文章
|
3月前
|
缓存 NoSQL Java
Java 项目实操高并发电商系统核心模块实现从基础到进阶的长尾技术要点详解 Java 项目实操
本项目实战实现高并发电商系统核心模块,涵盖商品、订单与库存服务。采用Spring Boot 3、Redis 7、RabbitMQ等最新技术栈,通过秒杀场景解决库存超卖、限流熔断及分布式事务难题。结合多级缓存优化查询性能,提升系统稳定性与吞吐能力,适用于Java微服务开发进阶学习。
118 0
|
4月前
|
搜索推荐 算法 Java
2025 年互联网大厂校园招聘 JAVA 工程师笔试题及备考要点解析
本文针对互联网大厂校招Java工程师笔试题进行解析,涵盖基础知识、面向对象编程、数据结构与算法、异常处理及集合框架等核心内容。从数据类型、运算符到流程控制语句,从类与对象、继承多态到数组链表、排序算法,再到异常捕获与集合框架应用,结合实际案例深入剖析,助你系统掌握考点,提升应试能力。资源链接:[点此获取](https://pan.quark.cn/s/14fcf913bae6)。
177 9
|
5月前
|
安全 Java API
Spring Boot 功能模块全解析:构建现代Java应用的技术图谱
Spring Boot不是一个单一的工具,而是一个由众多功能模块组成的生态系统。这些模块可以根据应用需求灵活组合,构建从简单的REST API到复杂的微服务系统,再到现代的AI驱动应用。
|
8月前
|
存储 缓存 Java
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
860 3
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
|
8月前
|
存储 小程序 前端开发
微信小程序与Java后端实现微信授权登录功能
微信小程序极大地简化了登录注册流程。对于用户而言,仅仅需要点击授权按钮,便能够完成登录操作,无需经历繁琐的注册步骤以及输入账号密码等一系列复杂操作,这种便捷的登录方式极大地提升了用户的使用体验
2495 12
|
8月前
|
缓存 Java 应用服务中间件
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
1378 5
|
10月前
|
存储 JavaScript 前端开发
基于 SpringBoot 和 Vue 开发校园点餐订餐外卖跑腿Java源码
一个非常实用的校园外卖系统,基于 SpringBoot 和 Vue 的开发。这一系统源于黑马的外卖案例项目 经过站长的进一步改进和优化,提供了更丰富的功能和更高的可用性。 这个项目的架构设计非常有趣。虽然它采用了SpringBoot和Vue的组合,但并不是一个完全分离的项目。 前端视图通过JS的方式引入了Vue和Element UI,既能利用Vue的快速开发优势,
367 13
|
11月前
|
小程序 前端开发 算法
|
Java Docker 容器
java版本学习网站又添加了一个libgdx模块
java版本学习网站之前添加了docker,想了想还是再把libgdx添加进去吧。
121 3
|
Java
Java 登录输入的验证码
Java 登录输入的验证码
128 1

热门文章

最新文章