SpringMVC——注册登陆功能模块的实现

  • 本片博文记录登陆注册功能的开发,内容包括
    1)前端注册登陆页面的实现
    2)后端注册登陆行为逻辑代码的实现
    3)用户数据表的设计和实现
    4)前后台之间数据的交互

一、实体类和配置类

  • 先按照如下图,在项目目录里新建如下的 Package 目录:
    在这里插入图片描述

1、实体类

  • 在 domain 目录下新建三个实体类:Msg、User 和 UserInfo,这三个实体类的具体代码如下:
  • Msg 类:
    //IntelliJ IDEA
    //springmvcstudent
    //Msg
    //2021/1/7
    // Author:御承扬
    //E-mail:2923616405@qq.com
    
    package com.pyc.springmvcstudent.domain;
    
    public class Msg {
        private String title;
        private String content;
    
        public Msg(String title,String content){
            this.title=title;
            this.content=content;
        }
    
        public void setContent(String content) {
            this.content = content;
        }
    
        public void setTitle(String title) {
            this.title = title;
        }
    
        public String getTitle() {
            return title;
        }
    
        public String getContent() {
            return content;
        }
    }
    
  • User 类
    //IntelliJ IDEA
    //springmvcstudent
    //User
    //2021/1/7
    // Author:御承扬
    //E-mail:2923616405@qq.com
    
    package com.pyc.springmvcstudent.domain;
    
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    
    @Entity
    public class User {
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Id
        private long id;
        private String studentID;
        private String password;
    
        public User(){
            super();
        }
        public User(String studentID,String password){
            this.studentID=studentID;
            this.password=password;
        }
    
        public void setId(long id) {
            this.id = id;
        }
    
        public long getId() {
            return id;
        }
    
        public void setStudentID(String studentID) {
            this.studentID = studentID;
        }
    
        public String getStudentID() {
            return studentID;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public String getPassword() {
            return password;
        }
    }
    
  • 这个类由于使用了 @Entity 注解,因此相当于一个数据表,运行时,Hibernate 框架会根据该类的名称和属性,在数据库中新建对应的数据表。下面的 UserInfo 类也是如此。
  • UserInfo 类
    //IntelliJ IDEA
    //springmvcstudent
    //UserInfo
    //2021/1/7
    // Author:御承扬
    //E-mail:2923616405@qq.com
    
    package com.pyc.springmvcstudent.domain;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    
    @Entity
    public class UserInfo {
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Id
        private long id;
        private String stuID;
        private String name;
        private String profession;
        private String stuClass;    //年级
        private String broth;
        private String tel;
        private Boolean online;  //登陆状态
        public UserInfo(){
            super();
        }
        public UserInfo(String stuID,String name,String profession,String stuClass,String broth, String tel){
            this.stuID=stuID;
            this.name=name;
            this.profession=profession;
            this.stuClass=stuClass;
            this.broth=broth;
            this.tel=tel;
            this.online=false;
        }
    
        public void setId(long id) {
            this.id = id;
        }
    
        public long getId() {
            return id;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    
        public void setProfession(String profession) {
            this.profession = profession;
        }
    
        public String getProfession() {
            return profession;
        }
    
        public void setStuClass(String stuClass) {
            this.stuClass = stuClass;
        }
    
        public String getStuClass() {
            return stuClass;
        }
    
        public String getStuID() {
            return stuID;
        }
    
        public Boolean getOnline() {
            return online;
        }
    
        public String getBroth() {
            return broth;
        }
    
        public String getTel() {
            return tel;
        }
    
        public void setBroth(String broth) {
            this.broth = broth;
        }
    
        public void setOnline(Boolean online) {
            this.online = online;
        }
    
        public void setStuID(String stuID) {
            this.stuID = stuID;
        }
    
        public void setTel(String tel) {
            this.tel = tel;
        }
    }
    
    
  • 这些实体类的setter 和 getter,不用自己一个一个的敲,可以用 IDEA 的智能补充生成。

2、面向对象数据接口

  • 由于上一步新建了两个使用了 @Entity 注解的实体类,因此需要编写相应的 Repository 接口类,这两个接口类放在 Dao Package 目录下,分别取名为:UserRepository 和 UserInfoRepository。
  • UserRepository 接口类的代码如下:
    //IntelliJ IDEA
    //springmvcstudent
    //UserRepository
    //2021/1/7
    // Author:御承扬
    //E-mail:2923616405@qq.com
    
    package com.pyc.springmvcstudent.dao;
    
    import com.pyc.springmvcstudent.domain.User;
    import org.springframework.data.jpa.repository.JpaRepository;
    
    public interface UserRepository extends JpaRepository<User,Long> {
    }
    
    
  • 暂时先只继承 JpaRepository 类提供的查询方法,后面根据需要添加自定义查询方法。
  • UserInfoRepository 接口类代码如下:
    //IntelliJ IDEA
    //springmvcstudent
    //UserInfoRepository
    //2021/1/7
    // Author:御承扬
    //E-mail:2923616405@qq.com
    
    
    package com.pyc.springmvcstudent.dao;
    
    import com.pyc.springmvcstudent.domain.UserInfo;
    import org.springframework.data.jpa.repository.JpaRepository;
    
    public interface UserInfoRepository extends JpaRepository<UserInfo, Long> {
    }
    
    

3、WebMVCConfig

  • 由于本项目是基于 Spring MVC 的,因此需要一个类用于对 Spring MVC 的路径映射进行控制,将该类放在 Config Package 目录下,该类的详细代码如下:
    //IntelliJ IDEA
    //springmvcstudent
    //WebMVCConfig
    //2021/1/7
    // Author:御承扬
    //E-mail:2923616405@qq.com
    
    package com.pyc.springmvcstudent.config;
    
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    
    @Configuration
    public class WebMVCConfig implements WebMvcConfigurer {
        @Override
        public void addViewControllers(ViewControllerRegistry registry) {
            registry.addViewController("/index").setViewName("Index");
        }
    }
    
    

4、WebController

  • 对于不需要传递数据的页面,可以在 WebMVCConfig 中配置,对于需要传递数据的就需要用到 Controller 了,因此这里新建一个 WebController 放在 controller,其代码如下:
    //IntelliJ IDEA
    //springmvcstudent
    //WebController
    //2021/1/7
    // Author:御承扬
    //E-mail:2923616405@qq.com
    
    package com.pyc.springmvcstudent.controller;
    
    
    import com.pyc.springmvcstudent.dao.UserInfoRepository;
    import com.pyc.springmvcstudent.dao.UserRepository;
    import com.pyc.springmvcstudent.domain.Msg;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    @Controller
    public class WebController {
        final UserRepository userRepository;
        final UserInfoRepository userInfoRepository;
    
        public WebController(UserRepository userRepository,UserInfoRepository userInfoRepository){
            this.userInfoRepository=userInfoRepository;
            this.userRepository=userRepository;
        }
        @RequestMapping("/toSign")
        public String toSign(Model model){
            Msg msg = new Msg("系统提示","请按照格式进行注册");
            model.addAttribute("msg", msg);
            return "page/Sign";
        }
    }
    
    

二、视图页面

  • 这里需要编辑两个视图页面,即登陆页面和注册页面,这里将登陆页面设置为系统的index页。
  • 页面不用原生的HTML,而是用 Thymeleaf 模板页面,UI 框架使用 Bootstrap3.

1、Index 页

  • 首先是 Index 页,其代码如下:
    <!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org" lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css"
              integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
              crossorigin="anonymous">
    
        <!-- 可选的 Bootstrap 主题文件(一般不用引入) -->
        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap-theme.min.css"
              integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp"
              crossorigin="anonymous">
    
        <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
        <script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"
                integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
                crossorigin="anonymous"></script>
        <title>学生信息管理系统</title>
    </head>
    <body>
    <center>
        <div class="container">
            <div class="row" >
                <div>
                    <div class="col-md-8">
                        <br>
                        <br>
                        <br>
                        <div class="panel panel-primary">
                            <div class="panel-heading">
                                <h2 class="panel-title">
                                    提示信息
                                </h2>
                            </div>
                            <div class="panel-body">
                                <div class="panel-info">
                                    欢迎访问学生信息管理系统,若未注册请先进行注册,若已注册请使用注册账号和密码进行登陆!
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
               <div style="width: auto;height: 50px"></div>
                <div class="col-md-8">
                    <form class="form-horizontal" style="width: 500px">
                        <div class="form-group">
                            <label for="stuID" class="col-sm-2 control-label">StudentID:</label>
                            <div class="col-sm-10">
                                <input type="text" class="form-control" id="stuID" name="stuID" placeholder="StudentID">
                            </div>
                        </div>
                        <div class="form-group">
                            <label for="password" class="col-sm-2 control-label">Password:</label>
                            <div class="col-sm-10">
                                <input type="password" class="form-control" id="password" name="password" placeholder="password">
                            </div>
                        </div>
                        <div class="form-group">
                            <label for="checkPassword" class="col-sm-2 control-label">CheckPassword:</label>
                            <div class="col-sm-10">
                                <input type="password" class="form-control" id="checkPassword" name="CheckPassword" placeholder="Check Password">
                            </div>
                        </div>
                        <div class="form-group">
                            <div class="col-sm-offset-2 col-sm-10">
                                <button type="submit" class="btn btn-primary">Login</button>
                                &emsp;&emsp;&emsp;&emsp;
                                <button type="button" class="btn btn-default" onclick="window.location.href='/toSign'">Sign</button>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </center>
    </body>
    
  • 这里只布置一个登陆表单,表单的action暂时不写,表单输入框下边是两个按钮,一个是登陆按钮,一个注册按钮;登陆按钮的功能暂时置空,而注册按钮的功能就是跳转到注册页面。

2、注册页面

  • 注册页面的代码如下:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css"
          integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
          crossorigin="anonymous">

    <!-- 可选的 Bootstrap 主题文件(一般不用引入) -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap-theme.min.css"
          integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp"
          crossorigin="anonymous">

    <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"
            integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
            crossorigin="anonymous"></script>
    <title>用户注册</title>
</head>
<body>
<div class="container">
    <div class="row">
        <br>
        <br>
        <br>
        <div class="col-md-8">
            <div class="panel panel-primary">
                <div class="panel-heading">
                    <h2 class="panel-title">
                        提示信息:
                    </h2>
                </div>
                <div class="panel-body" th:if="${ not #lists.isEmpty(msg)}">
                    <div class="panel-info">
                        <h4 th:text="${msg.getTitle()}"></h4><h5 th:text="${msg.getContent()}"></h5>
                    </div>
                </div>
            </div>
        </div>
        <div class="col-md-8">
            <form class="form-horizontal" style="width: 500px">
                <div class="form-group">
                    <label for="stuID" class="col-sm-2 control-label">StudentID:</label>
                    <div class="col-sm-10">
                        <input type="text" class="form-control" id="stuID" name="stuID" placeholder="StudentID">
                    </div>
                </div>
                <div class="form-group">
                    <label for="password" class="col-sm-2 control-label">Password:</label>
                    <div class="col-sm-10">
                        <input type="password" class="form-control" id="password" name="password" placeholder="password">
                    </div>
                </div>
                <div class="form-group">
                    <label for="stuName" class="col-sm-2 control-label">Name:</label>
                    <div class="col-sm-10">
                        <input type="text" class="form-control" id="stuName" name="stuName" placeholder="Student Name">
                    </div>
                </div>
                <div class="form-group">
                    <label for="profession" class="col-sm-2 control-label">Profession</label>
                    <div class="col-sm-10">
                        <input type="text" class="form-control" id="profession" name="profession" placeholder="Profession">
                    </div>
                </div>
                <div class="form-group">
                    <label for="stuClass" class="col-sm-2 control-label">Class:</label>
                    <div class="col-sm-10">
                        <input type="text" class="form-control" id="stuClass" name="stuClass" placeholder="class">
                    </div>
                </div>
                <div class="form-group">
                    <label for="broth" class="col-sm-2 control-label">Broth:</label>
                    <div class="col-sm-10">
                        <input type="date" class="form-control" id="broth" name="broth" placeholder="1999-01-01">
                    </div>
                </div>
                <div class="form-group">
                    <label for="tel" class="col-sm-2 control-label">Tel:</label>
                    <div class="col-sm-10">
                        <input type="text" class="form-control" id="tel" name="tel" placeholder="Tel">
                    </div>
                </div>
                <div class="form-group">
                    <div class="col-sm-offset-2 col-sm-10">
                        <button type="submit" class="btn btn-primary">Sign</button>
                        &emsp;&emsp;&emsp;&emsp;
                        <button type="button" class="btn btn-default" onclick="window.location.href='/index'">Login</button>
                    </div>
                </div>
            </form>
        </div>
    </div>
</div>
</body>

3、测试页面显示是否正常

  • 这一步进行页面显示测试,运行项目访问 http://localhost:8080/index 会显示如下页面:
    在这里插入图片描述
  • 我这里浏览器开启了黑色模式,所以页面底色是黑色,在非黑色模式下页面底色是白色。
  • 点击注册按钮,正常情况下应该跳转到如下页面:
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

御承扬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值