校园论坛(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、项目代码


目录
相关文章
|
23小时前
|
Java
校园帮【JSP+Servlet+JavaBean】(Java课设)
校园帮【JSP+Servlet+JavaBean】(Java课设)
6 1
|
1天前
|
前端开发 JavaScript Java
前端和Java验签以太坊钱包签名实现中心化登录
前端和Java验签以太坊钱包签名实现中心化登录
21 8
|
22天前
|
JavaScript Java 测试技术
基于Java的新冠病毒校园监控平台的设计与实现(源码+lw+部署文档+讲解等)
基于Java的新冠病毒校园监控平台的设计与实现(源码+lw+部署文档+讲解等)
22 0
|
22天前
|
JavaScript Java 测试技术
基于Java的校园二手物品交易平台的设计与实现(源码+lw+部署文档+讲解等)
基于Java的校园二手物品交易平台的设计与实现(源码+lw+部署文档+讲解等)
23 1
|
22天前
|
JavaScript Java 测试技术
基于Java的校园兼职管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的校园兼职管理系统的设计与实现(源码+lw+部署文档+讲解等)
32 0
|
22天前
|
JavaScript Java 测试技术
基于Java的校园疫情管控系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的校园疫情管控系统的设计与实现(源码+lw+部署文档+讲解等)
6 1
|
23天前
|
JavaScript Java 测试技术
基于Java的校园报修管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的校园报修管理系统的设计与实现(源码+lw+部署文档+讲解等)
39 6
|
23天前
|
JavaScript Java 测试技术
基于Java的大学生校园招聘网的设计与实现(源码+lw+部署文档+讲解等)
基于Java的大学生校园招聘网的设计与实现(源码+lw+部署文档+讲解等)
31 3
|
23天前
|
JavaScript Java 测试技术
基于Java的校园驿站全天候辅助取货管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的校园驿站全天候辅助取货管理系统的设计与实现(源码+lw+部署文档+讲解等)
28 4
|
23天前
|
JavaScript Java 测试技术
基于Java的校园体育赛事管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的校园体育赛事管理系统的设计与实现(源码+lw+部署文档+讲解等)
29 2