校园论坛(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天前
|
小程序 前端开发 算法
|
28天前
|
Java Docker 容器
java版本学习网站又添加了一个libgdx模块
java版本学习网站之前添加了docker,想了想还是再把libgdx添加进去吧。
24 3
|
28天前
|
Java
Java 登录输入的验证码
Java 登录输入的验证码
21 1
|
3月前
|
存储 算法 Java
在Java中使用MD5对用户输入密码进行加密存储、同时登录验证。
这篇文章详细介绍了在Java项目中如何使用MD5算法对用户密码进行加密存储和登录验证,包括加入依赖、编写MD5工具类、注册时的密码加密和登录时的密码验证等步骤,并通过示例代码和数据库存储信息展示了测试效果。
在Java中使用MD5对用户输入密码进行加密存储、同时登录验证。
|
3月前
|
缓存 Java Maven
Java本地高性能缓存实践问题之缓存中获取用户信息的问题如何解决
Java本地高性能缓存实践问题之缓存中获取用户信息的问题如何解决
|
3月前
|
SQL Java 数据库连接
【Azure 应用服务】Java ODBC代码中,启用 Managed Identity 登录 SQL Server 报错 Managed Identity authentication is not available
【Azure 应用服务】Java ODBC代码中,启用 Managed Identity 登录 SQL Server 报错 Managed Identity authentication is not available
|
3月前
|
Java
Java Bean 注册对象
Java Bean 注册对象
18 0
|
3月前
|
缓存 Java Maven
Java本地高性能缓存实践问题之缓存中获取用户信息的问题如何解决
Java本地高性能缓存实践问题之缓存中获取用户信息的问题如何解决
|
3月前
|
小程序 前端开发 Java
|
4月前
|
缓存 开发者 Java
java枚举消除冗余代码问题之需要延迟注册枚举到缓存问题如何解决
java枚举消除冗余代码问题之需要延迟注册枚举到缓存问题如何解决