汽车租赁系统(2)-完成登录功能

文章目录

  • 完成汽车租赁系统的登录功能
    • 分析登录功能:
    • 创建数据库的表
    • 用户表(sys_users)
    • 创建首页index.jsp
    • 创建实体类
    • 创建UserVo
    • 创建Mapper
    • 创建Mapper.xml
    • 创建UserService和UserServiceImpl
    • 创建LoginController
    • 创建system/main/index.jsp

这篇博客主要讲解登录功能的实现,工作台的开发以及很重要的菜单栏的加载三部分内容

前文推荐:
汽车租赁系统介绍以及数据库表介绍,环境搭建

完成汽车租赁系统的登录功能

演示登录功能

登录功能演示

注:这里没有添加验证码的验证的功能(为了方便登录,其实是因为我懒),在项目的最后会加上!!

分析登录功能:

  • 登录的实体就是用户,有用户才能登录
  • 怎么判断这个用户(输入的账号和密码)能不能允许登录?依靠数据库中有没有这个用户,要查询账号密码对应的用户在数据库中是否存在 ,需要数据库查询
  • 完成登录的逻辑,需要业务接口和实现类
  • 完成页面的跳转,需要控制器,控制页面跳转到登录页面,然后登录成功再跳转到首页.需要控制器

总结一下:

  1. 实体(User)
  2. UserMapper
  3. UserService
  4. UserController

创建数据库的表

字段和相应的解释

用户表(sys_users)

字段名字段说明类型是否主键备注
userid用户编号Int
loginname登陆名varchar
identity身份证号varchar
realname真实名称varchar
sex性别Int0女1男
address地址varchar
phone电话varchar
pwd密码varchar
position职位varchar
type用户类型Int1,超级管理员2,系统用户Where type<>1

创建首页index.jsp

<%--User: LYJDate: 2020年7月7日Time: 17:18:48
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>登陆页面</title>
</head>
<body><jsp:forward page="login/toLogin.action"></jsp:forward></body>
</html>

创建实体类

User代表我们的实体类

  • 如果会使用MyBatis的逆向工程,可以使用逆向工程,根据数据库快速的创建出实体类和Mapper以及Mapper.xml
package per.leiyu.sys.domain;public class User {private Integer userid;private String loginname;private String identity;private String realname;private Integer sex;private String address;private String phone;private String pwd;private String position;private Integer type;private Integer available;public Integer getUserid() {return userid;}public void setUserid(Integer userid) {this.userid = userid;}public String getLoginname() {return loginname;}public void setLoginname(String loginname) {this.loginname = loginname == null ? null : loginname.trim();}public String getIdentity() {return identity;}public void setIdentity(String identity) {this.identity = identity == null ? null : identity.trim();}public String getRealname() {return realname;}public void setRealname(String realname) {this.realname = realname == null ? null : realname.trim();}public Integer getSex() {return sex;}public void setSex(Integer sex) {this.sex = sex;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address == null ? null : address.trim();}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone == null ? null : phone.trim();}public String getPwd() {return pwd;}public void setPwd(String pwd) {this.pwd = pwd == null ? null : pwd.trim();}public String getPosition() {return position;}public void setPosition(String position) {this.position = position == null ? null : position.trim();}public Integer getType() {return type;}public void setType(Integer type) {this.type = type;}public Integer getAvailable() {return available;}public void setAvailable(Integer available) {this.available = available;}@Overridepublic String toString() {return "User{" +"userid=" + userid +", loginname='" + loginname + '\'' +", identity='" + identity + '\'' +", realname='" + realname + '\'' +", sex=" + sex +", address='" + address + '\'' +", phone='" + phone + '\'' +", pwd='" + pwd + '\'' +", position='" + position + '\'' +", type=" + type +", available=" + available +'}';}
}

创建UserVo

作为User的实体增强类,之后有有关用户管理的用户数据分页数据可能会用到,但是在登录功能中用不到.可以先创建出来

package per.leiyu.sys.vo;import per.leiyu.sys.domain.User;public class UserVo extends User {}

创建Mapper

package per.leiyu.sys.mapper;import per.leiyu.sys.domain.User;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;import java.util.List;@Repository
public interface UserMapper {int deleteByPrimaryKey(Integer userid);int insert(User record);int insertSelective(User record);User selectByPrimaryKey(Integer userid);int updateByPrimaryKeySelective(User record);int updateByPrimaryKey(User record);/*** 登陆*/User login(User user);}

创建Mapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="per.leiyu.sys.mapper.UserMapper"><resultMap id="BaseResultMap" type="per.leiyu.sys.domain.User"><id column="userid" jdbcType="INTEGER" property="userid" /><result column="loginname" jdbcType="VARCHAR" property="loginname" /><result column="identity" jdbcType="VARCHAR" property="identity" /><result column="realname" jdbcType="VARCHAR" property="realname" /><result column="sex" jdbcType="INTEGER" property="sex" /><result column="address" jdbcType="VARCHAR" property="address" /><result column="phone" jdbcType="VARCHAR" property="phone" /><result column="pwd" jdbcType="VARCHAR" property="pwd" /><result column="position" jdbcType="VARCHAR" property="position" /><result column="type" jdbcType="INTEGER" property="type" /><result column="available" jdbcType="INTEGER" property="available" /></resultMap><sql id="Base_Column_List">userid, loginname, identity, realname, sex, address, phone, pwd, position, type, available</sql><select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">select <include refid="Base_Column_List" />from sys_userwhere userid = #{userid,jdbcType=INTEGER}</select><delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">delete from sys_userwhere userid = #{userid,jdbcType=INTEGER}</delete><insert id="insert" parameterType="per.leiyu.sys.domain.User">insert into sys_user (userid, loginname, identity, realname, sex, address, phone, pwd, position, type, available)values (#{userid,jdbcType=INTEGER}, #{loginname,jdbcType=VARCHAR}, #{identity,jdbcType=VARCHAR}, #{realname,jdbcType=VARCHAR}, #{sex,jdbcType=INTEGER}, #{address,jdbcType=VARCHAR}, #{phone,jdbcType=VARCHAR}, #{pwd,jdbcType=VARCHAR}, #{position,jdbcType=VARCHAR}, #{type,jdbcType=INTEGER}, #{available,jdbcType=INTEGER})</insert><insert id="insertSelective" parameterType="per.leiyu.sys.domain.User">insert into sys_user<trim prefix="(" suffix=")" suffixOverrides=","><if test="userid != null">userid,</if><if test="loginname != null">loginname,</if><if test="identity != null">identity,</if><if test="realname != null">realname,</if><if test="sex != null">sex,</if><if test="address != null">address,</if><if test="phone != null">phone,</if><if test="pwd != null">pwd,</if><if test="position != null">position,</if><if test="type != null">type,</if><if test="available != null">available,</if></trim><trim prefix="values (" suffix=")" suffixOverrides=","><if test="userid != null">#{userid,jdbcType=INTEGER},</if><if test="loginname != null">#{loginname,jdbcType=VARCHAR},</if><if test="identity != null">#{identity,jdbcType=VARCHAR},</if><if test="realname != null">#{realname,jdbcType=VARCHAR},</if><if test="sex != null">#{sex,jdbcType=INTEGER},</if><if test="address != null">#{address,jdbcType=VARCHAR},</if><if test="phone != null">#{phone,jdbcType=VARCHAR},</if><if test="pwd != null">#{pwd,jdbcType=VARCHAR},</if><if test="position != null">#{position,jdbcType=VARCHAR},</if><if test="type != null">#{type,jdbcType=INTEGER},</if><if test="available != null">#{available,jdbcType=INTEGER},</if></trim></insert><update id="updateByPrimaryKeySelective" parameterType="per.leiyu.sys.domain.User">update sys_user<set><if test="loginname != null">loginname = #{loginname,jdbcType=VARCHAR},</if><if test="identity != null">identity = #{identity,jdbcType=VARCHAR},</if><if test="realname != null">realname = #{realname,jdbcType=VARCHAR},</if><if test="sex != null">sex = #{sex,jdbcType=INTEGER},</if><if test="address != null">address = #{address,jdbcType=VARCHAR},</if><if test="phone != null">phone = #{phone,jdbcType=VARCHAR},</if><if test="pwd != null">pwd = #{pwd,jdbcType=VARCHAR},</if><if test="position != null">position = #{position,jdbcType=VARCHAR},</if><if test="type != null">type = #{type,jdbcType=INTEGER},</if><if test="available != null">available = #{available,jdbcType=INTEGER},</if></set>where userid = #{userid,jdbcType=INTEGER}</update><update id="updateByPrimaryKey" parameterType="per.leiyu.sys.domain.User">update sys_userset loginname = #{loginname,jdbcType=VARCHAR},identity = #{identity,jdbcType=VARCHAR},realname = #{realname,jdbcType=VARCHAR},sex = #{sex,jdbcType=INTEGER},address = #{address,jdbcType=VARCHAR},phone = #{phone,jdbcType=VARCHAR},pwd = #{pwd,jdbcType=VARCHAR},position = #{position,jdbcType=VARCHAR},type = #{type,jdbcType=INTEGER},available = #{available,jdbcType=INTEGER}where userid = #{userid,jdbcType=INTEGER}</update><!--用户登陆--><select id="login" resultMap="BaseResultMap" >select<include refid="Base_Column_List" />from sys_userwhere loginname=#{loginname} and pwd=#{pwd}</select></mapper>

创建UserService和UserServiceImpl

是完成登录功能的业务类

UserService接口

package per.leiyu.sys.service;import per.leiyu.sys.domain.User;
import per.leiyu.sys.utils.DataGridView;
import per.leiyu.sys.vo.UserVo;/*** 用户服务接口*/
public interface IUserService {/*** 用户登陆* @param userVo* @return*/}

UserServiceImpl实现类

package per.leiyu.sys.service.impl;import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import per.leiyu.sys.constast.SysConstast;
import per.leiyu.sys.domain.Role;
import per.leiyu.sys.domain.User;
import per.leiyu.sys.mapper.RoleMapper;
import per.leiyu.sys.mapper.UserMapper;
import per.leiyu.sys.service.IUserService;import per.leiyu.sys.utils.DataGridView;
import per.leiyu.sys.vo.UserVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@Service
public class UserServiceImpl implements IUserService {@Autowiredprivate UserMapper userMapper;@Autowiredprivate RoleMapper roleMapper;/*** 用户登陆* @param userVo(User的视图对象(登录功能中使用的Uservo对象是无附加属性的,因此这里使用User对象也是可以的))* @return User对象*/@Overridepublic User login(UserVo userVo) {//明文123456//生成密文//使用的是//pwd对应的是name属性为pwd  ,进行了传参,这里使用了name属性传参,注意id属性在这里不能作传参的//这里使用的是Java自身集成的MD5加密计数,因为我们需要的最终结果是一个字符串(User中的属性pwd是String类型),因此使用md5DigestAsHex方法(需要传递一个byte类型的参数)String pwd = DigestUtils.md5DigestAsHex(userVo.getPwd().getBytes());System.out.println(pwd);userVo.setPwd(pwd);return userMapper.login(userVo);}}

创建LoginController

package per.leiyu.sys.controller;import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.LineCaptcha;
import per.leiyu.sys.constast.SysConstast;
import per.leiyu.sys.domain.User;
import per.leiyu.sys.service.ILogInfoService;
import per.leiyu.sys.service.IUserService;
import per.leiyu.sys.utils.WebUtils;import per.leiyu.sys.vo.LogInfoVo;
import per.leiyu.sys.vo.UserVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.Date;/*** 用户登陆控制器*/
@Controller
@RequestMapping("login")
public class LoginController {@Autowiredprivate IUserService userService;@Autowiredprivate ILogInfoService logInfoService;/*** 跳转到登陆页面*/@RequestMapping("toLogin")public String toLogin(){//注意这里转跳的index.jsp和之前的index.jsp不是一个jspreturn "system/main/login";}/*** 登陆方法* @param userVo* @return*/@RequestMapping("login")public String login(UserVo userVo,Model model){String code = WebUtils.getHttpSession().getAttribute("code").toString();
//        if (userVo.getCode().equals(code)){User user = this.userService.login(userVo);
//            System.out.println(user);if (null!=user){//放到sessionWebUtils.getHttpSession().setAttribute("user",user);//记录登陆日志 向sys_log_login里面插入数据//日志功能会在后面实现,这里做一个标记return "system/main/index";}else {model.addAttribute("error", SysConstast.USER_LOGIN_ERROR_MSG);return "system/main/login";}
//        }else {
//            model.addAttribute("error", SysConstast.USER_LOGIN_CODE_ERROR_MSG);
//            return "system/main/login";
//        }}
}

创建system/main/index.jsp

系统的首页

<%--Created by IntelliJ IDEA.User: YQFDate: 2019/9/28Time: 17:32
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><meta charset="utf-8"><title>首页-汽车出租系统</title><meta name="renderer" content="webkit"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta http-equiv="Access-Control-Allow-Origin" content="*"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"><meta name="apple-mobile-web-app-status-bar-style" content="black"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="format-detection" content="telephone=no"><link rel="icon" href="${leiyujia}/static/favicon.ico"><link rel="stylesheet" href="${leiyujia}/static/layui/css/layui.css" media="all"/><link rel="stylesheet" href="${leiyujia}/static/css/index.css" media="all"/><style>@font-face {font-family: "seraph";src: url('//at.alicdn.com/t/font_400842_q6tk84n9ywvu0udi.eot?t=1515415808033'); /* IE9*/src: url('//at.alicdn.com/t/font_400842_q6tk84n9ywvu0udi.eot?t=1515415808033#iefix') format('embedded-opentype'), /* IE6-IE8 */ url('data:application/x-font-woff;charset=utf-8;base64,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') format('woff'),url('//at.alicdn.com/t/font_400842_q6tk84n9ywvu0udi.ttf?t=1515415808033') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ url('//at.alicdn.com/t/font_400842_q6tk84n9ywvu0udi.svg?t=1515415808033#seraph') format('svg'); /* iOS 4.1- */}.seraph {font-family: "seraph" !important;font-size: 16px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;}.icon-caidan:before {content: "\e606";}</style>
</head>
<body class="main_body">
<div class="layui-layout layui-layout-admin"><!-- 顶部 --><div class="layui-header header"><div class="layui-main mag0"><a href="#" class="logo">汽车租赁</a><!-- 显示/隐藏菜单 icon-caidan --><a href="javascript:;" class="seraph hideMenu icon-caidan"></a><!-- 顶部右侧菜单 --><ul class="layui-nav top_menu"><li class="layui-nav-item" pc><a href="javascript:;" class="clearCache"><i class="layui-icon" data-icon="&#xe640;">&#xe640;</i><cite>清除缓存</cite><span class="layui-badge-dot"></span></a></li><li class="layui-nav-item lockcms" pc><%--<a href="javascript:;"><i class="seraph icon-lock"></i><cite>锁屏</cite></a>--%></li><li class="layui-nav-item" id="userInfo"><a href="javascript:;"><img src="${leiyujia}/static/images/face.jpg" class="layui-nav-img userAvatar"width="35" height="35"><citeclass="adminName">${user.realname}</cite></a><dl class="layui-nav-child"><dd><a href="javascript:;" data-url="${leiyujia}/static/page/user/userInfo.html"><iclass="seraph icon-ziliao" data-icon="icon-ziliao"></i><cite>个人资料</cite></a></dd><dd><a href="javascript:;" data-url="${leiyujia}/static/page/user/changePwd.html"><iclass="seraph icon-xiugai" data-icon="icon-xiugai"></i><cite>修改密码</cite></a></dd><dd><a href="javascript:;" class="showNotice"><iclass="layui-icon">&#xe645;</i><cite>系统公告</cite><spanclass="layui-badge-dot"></span></a></dd><dd pc><a href="javascript:;" class="functionSetting"><i class="layui-icon">&#xe620;</i><cite>功能设定</cite><spanclass="layui-badge-dot"></span></a></dd><dd pc><a href="javascript:;" class="changeSkin"><iclass="layui-icon">&#xe61b;</i><cite>更换皮肤</cite></a></dd><dd><a href="${leiyujia}" class="signOut"><iclass="seraph icon-tuichu"></i><cite>退出</cite></a></dd></dl></li></ul></div></div><!-- 左侧导航 --><div class="layui-side layui-bg-black"><div class="user-photo"><a class="img" title="我的头像"><img src="${leiyujia}/static/images/face.jpg" class="userAvatar"></a><p>你好!<span class="userName">${user.realname}</span>, 欢迎登录</p></div><!-- 搜索 --><div class="layui-form component"><select name="search" id="search" lay-search lay-filter="searchPage"><option value="">搜索页面或功能</option><option value="1">layer</option><option value="2">form</option></select><i class="layui-icon">&#xe615;</i></div><div class="navBar layui-side-scroll" id="navBar"><ul class="layui-nav layui-nav-tree"><li class="layui-nav-item layui-this"><a href="javascript:;" data-url="${leiyujia}/static/page/main.html"><i class="layui-icon" data-icon=""></i><cite>后台首页</cite></a></li></ul></div></div><!-- 右侧内容 --><div class="layui-body layui-form"><div class="layui-tab mag0" lay-filter="bodyTab" id="top_tabs_box"><ul class="layui-tab-title top_tab" id="top_tabs"><li class="layui-this" lay-id=""><i class="layui-icon">&#xe68e;</i> <cite>后台首页</cite></li></ul><ul class="layui-nav closeBox"><li class="layui-nav-item"><a href="javascript:;"><i class="layui-icon caozuo">&#xe643;</i>页面操作</a><dl class="layui-nav-child"><dd><a href="javascript:;" class="refresh refreshThis"><i class="layui-icon">&#xe669;</i>刷新当前</a></dd><dd><a href="javascript:;" class="closePageOther"><i class="seraph icon-prohibit"></i> 关闭其他</a></dd><dd><a href="javascript:;" class="closePageAll"><i class="seraph icon-guanbi"></i> 关闭全部</a></dd></dl></li></ul><div class="layui-tab-content clildFrame"><div class="layui-tab-item layui-show"><iframe src="${leiyujia}/desk/toDeskManager.action"></iframe></div></div></div></div><!-- 底部 --><div class="layui-footer footer"><p><span>copyright @2020 leiyu</span></p></div>
</div><!-- 移动导航 -->
<div class="site-tree-mobile"><i class="layui-icon">&#xe602;</i></div>
<div class="site-mobile-shade"></div><script type="text/javascript" src="${leiyujia}/static/layui/layui.js"></script>
<script type="text/javascript" src="${leiyujia}/static/js/cache.js"></script>
<script type="text/javascript">var $, tab, dataStr, layer;layui.config({base: "${leiyujia}/static/js/"}).extend({"bodyTab": "bodyTab"})layui.use(['bodyTab', 'form', 'element', 'layer', 'jquery'], function () {var form = layui.form,element = layui.element;$ = layui.$;layer = parent.layer === undefined ? layui.layer : top.layer;tab = layui.bodyTab({openTabNum: "50",  //最大可打开窗口数量url: "${leiyujia}/menu/loadIndexleftMenuJson.action" //获取菜单json地址});//通过顶部菜单获取左侧二三级菜单   注:此处只做演示之用,实际开发中通过接口传参的方式获取导航数据function getData(json) {$.getJSON(tab.tabConfig.url, function (data) {dataStr = data;//重新渲染左侧菜单tab.render();})}//页面加载时判断左侧菜单是否显示//通过顶部菜单获取左侧菜单$(".topLevelMenus li,.mobileTopLevelMenus dd").click(function () {if ($(this).parents(".mobileTopLevelMenus").length != "0") {$(".topLevelMenus li").eq($(this).index()).addClass("layui-this").siblings().removeClass("layui-this");} else {$(".mobileTopLevelMenus dd").eq($(this).index()).addClass("layui-this").siblings().removeClass("layui-this");}$(".layui-layout-admin").removeClass("showMenu");$("body").addClass("site-mobile");getData($(this).data("menu"));//渲染顶部窗口tab.tabMove();})//隐藏左侧导航$(".hideMenu").click(function () {if ($(".topLevelMenus li.layui-this a").data("url")) {layer.msg("此栏目状态下左侧菜单不可展开");  //主要为了避免左侧显示的内容与顶部菜单不匹配return false;}$(".layui-layout-admin").toggleClass("showMenu");//渲染顶部窗口tab.tabMove();})//通过顶部菜单获取左侧二三级菜单   注:此处只做演示之用,实际开发中通过接口传参的方式获取导航数据getData("contentManagement");//手机设备的简单适配$('.site-tree-mobile').on('click', function () {$('body').addClass('site-mobile');});$('.site-mobile-shade').on('click', function () {$('body').removeClass('site-mobile');});// 添加新窗口$("body").on("click", ".layui-nav .layui-nav-item a:not('.mobileTopLevelMenus .layui-nav-item a')", function () {//如果不存在子级if ($(this).siblings().length == 0) {addTab($(this));$('body').removeClass('site-mobile');  //移动端点击菜单关闭菜单层}$(this).parent("li").siblings().removeClass("layui-nav-itemed");})//清除缓存$(".clearCache").click(function () {window.sessionStorage.clear();window.localStorage.clear();var index = layer.msg('清除缓存中,请稍候', {icon: 16, time: false, shade: 0.8});setTimeout(function () {layer.close(index);layer.msg("缓存清除成功!");}, 1000);})//刷新后还原打开的窗口if (cacheStr == "true") {if (window.sessionStorage.getItem("menu") != null) {menu = JSON.parse(window.sessionStorage.getItem("menu"));curmenu = window.sessionStorage.getItem("curmenu");var openTitle = '';for (var i = 0; i < menu.length; i++) {openTitle = '';if (menu[i].icon) {if (menu[i].icon.split("-")[0] == 'icon') {openTitle += '<i class="seraph ' + menu[i].icon + '"></i>';} else {openTitle += '<i class="layui-icon">' + menu[i].icon + '</i>';}}openTitle += '<cite>' + menu[i].title + '</cite>';openTitle += '<i class="layui-icon layui-unselect layui-tab-close" data-id="' + menu[i].layId + '">&#x1006;</i>';element.tabAdd("bodyTab", {title: openTitle,content: "<iframe src='" + menu[i].href + "' data-id='" + menu[i].layId + "'></frame>",id: menu[i].layId})//定位到刷新前的窗口if (curmenu != "undefined") {if (curmenu == '' || curmenu == "null") {  //定位到后台首页element.tabChange("bodyTab", '');} else if (JSON.parse(curmenu).title == menu[i].title) {  //定位到刷新前的页面element.tabChange("bodyTab", menu[i].layId);}} else {element.tabChange("bodyTab", menu[menu.length - 1].layId);}}//渲染顶部窗口tab.tabMove();}} else {window.sessionStorage.removeItem("menu");window.sessionStorage.removeItem("curmenu");}});//打开新窗口function addTab(_this) {tab.tabAdd(_this);}
</script>
</body>
</html>

到这里基本的登录功能实现完成

其中在我们的Controller中我们将一些常量封装起来,这样就降低了耦合度.

package per.leiyu.sys.constast;/*** 常量接口*/
public interface SysConstast {String USER_LOGIN_ERROR_MSG = "用户名或密码不正确";String USER_LOGIN_CODE_ERROR_MSG = "验证码不正确";
}

我是雷雨,一个普本科的学生,主要专注于Java后端和大数据开发

如果你喜欢这样的文章,可以关注我,一起努力,一起努力拿大厂offer
如果这篇文章有帮助到你,希望你给我一个的赞
如果有什么问题,希望你能评论区和我一起研究.

如果您要转载请转载注明出处
https://blog.csdn.net/qq_40742223

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

公寓租赁管理系统

公寓租赁管理系统是深圳合众致达科技有限公司旗下一款面向长短租公寓的管理利器&#xff0c;包含租约管理、账单管理、房源数据、租客管理、水电费计算、收租提醒、远程抄表、智能用水用电的公寓管理系统。轻轻松松做房东&#xff0c;明明白白管账本。专业的智慧公寓管理系统&a…

基于Android的房屋租赁系统

需求信息&#xff1a; 房东客户端&#xff1a; 1&#xff1a;注册登录&#xff1a;使用分配的账号进行登录&#xff1b; 2&#xff1a;发布房源&#xff1a;房主可以发布自己的房源信息&#xff1b; 3&#xff1a;预约信息&#xff1a;查看租客的预约看房信息&#xff1b; 4&am…

汽车租赁系统(JAVA)

某汽车租赁公司出租多种轿车和客车&#xff0c;出租费用 以日为单位计算。出租车型及信息如下表所示 最终实现效果 1.首先创建一个父类 &#xff08;抽象类&#xff09; package test6; //父类 public abstract class Car {private String brand;private int dayRent;private …

基于 FastAPI 的房源租赁系统设计与实现

项目背景 传统的线下租房不便、途径少、信息更新慢&#xff0c;导致房屋租赁效率低。为了有效的提升租赁效率和房源信息管理、提供更优质的租赁服务。让房东出租宣传展示与房源管理、租客更好的检索房源信息、发布租房需求以及入住预定、后台房源管理、审核等一站式租赁服务平…

8.3.9 加载租赁数据至租赁事实表

1.创建转换 使用Kettle工具&#xff0c;创建一个转换load_fact_rental&#xff0c;并添加表输入控件、字段选择控件、过滤记录控件、计算器控件、增加常量控件、数据库查询控件、维度查询/更新控件、插入/更新控件以及Hop跳连接线 2.配置表输入 3.配置表输入2 4.配置字段选择 …

特色租房管理系统/租房管理系统/房屋租赁管理系统

摘 要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#xff0c;科学化的管理&#xff0c;使信息存…

房租租赁租房系统都包含哪些功能?

俗话说成家立业&#xff0c;现在一提到婚姻无非就是房车等&#xff0c;房子一直是排在首位的&#xff0c;但是伴随着连年上涨的房价&#xff0c;从两三千到现在得一两万甚至更高。一套房子买下来动辄上百万&#xff0c;要掏空两个家庭多个钱包还要欠银行一笔贷款&#xff0c;于…

我的 SAP 技术交流群里的真实案例,看样子 ChatGPT 能帮我回答不少问题了

请问下大家&#xff0c;Fiori Elements 里面我要怎么知道页面上的东西的 element ID 是啥&#xff1f;就是 byId 方法调用需要传入的那个参数… 我的人工回复&#xff1a; 不管是 freestyle 还是 Fiori Elements&#xff0c;SAP UI5 控件最后渲染出来的 HTML 原生代码里的 id…

chatgpt赋能python:Python交流微信群:打开学习和分享的大门

Python交流微信群&#xff1a;打开学习和分享的大门 Python是一种高级编程语言&#xff0c;得益于其灵活性&#xff0c;易学性和强大的社区支持&#xff0c;已经成为许多程序员首选的开发语言。但是&#xff0c;学习Python并没有那么容易&#xff0c;很多人可能会面临困惑和挫…

chatgpt赋能python:Python交流群:分享经验、解决问题、结交朋友

Python 交流群&#xff1a;分享经验、解决问题、结交朋友 Python 是一种高级编程语言&#xff0c;被广泛使用于数据科学、机器学习、人工智能、网络开发、游戏开发等众多领域。作为一个有着10年 Python 编程经验的工程师&#xff0c;我深感 Python 社区的活力和创新力。其中&a…

Android 动画(七)AnimatorSet组合动画

概述&#xff1a; ValueAnimator和ObjectAnimator都是针对单个动画的&#xff0c;虽然可以用PropertyValuesHolder实现一个View的多种动画&#xff0c;但是没办法实现多个View同时动画。如果要对多个View做动画&#xff0c;并且单个View上存在多种动画效果&#xff0c;这时候就…

chatgpt赋能python:Python做动画视频教程-如何入门

Python做动画视频教程-如何入门 Python是一种非常强大的编程语言&#xff0c;它可以用于很多领域&#xff0c;比如数据科学、机器学习和计算机视觉等。但是你曾想过用Python来制作动画视频吗&#xff1f;这不仅可以增强你的编程技能&#xff0c;而且还可以让你的创意更加丰富。…

chatgpt赋能python:Python做动画需要学习哪些东西?

Python做动画需要学习哪些东西&#xff1f; Python是一种高级编程语言&#xff0c;具有易读易学的特点&#xff0c;因此被广泛应用于图形设计、动画、游戏和科学计算等领域。Python使动画制作变得更加简单和快速&#xff0c;并且允许用户在更广泛的平台上实现创意想法。 在本…

chatgpt赋能python:Python做动画演示

Python做动画演示 Python是一种脚本语言&#xff0c;适用于广泛的应用&#xff0c;例如数据分析和机器学习。但是&#xff0c;Python也可以用于创建动画演示。本文将介绍Python如何用于制作动画演示&#xff0c;并提供一些最佳实践来帮助您获得最佳效果。 起步 首先&#xf…

不会做动画的程序猿不是好的动画师(如何用css3动画做动画)

“看清animation&#xff0c;transform&#xff0c; keyframes&#xff0c;transition这四个的脸&#xff0c;以后这四个来了就是要做动画了&#xff0c;看好你们的网页&#xff0c;除了这四个&#xff0c;谁管你们都不好使。” 一.transition&#xff08;过渡&#xff09;&…

[一起来做动图吧]Animate制作简单动图,包教包会,不会举报

这个是目录 首先&#xff0c;认识一下An吧①区&#xff0c;我不怎么用但其实很重要②区&#xff0c;要和④区混合食用选择&#xff0c;自由变形&#xff0c;套索工具绘图工具&#xff08;以线条为例&#xff09;填充和笔触&#xff1a;对象绘制模式&#xff1a;笔触、样式和宽度…

chatgpt赋能python:用Python来制作动画

用Python来制作动画 Python是一种高级编程语言&#xff0c;可以用于许多任务&#xff0c;包括数据分析、网络编程&#xff0c;甚至是制作动画。在这篇文章中&#xff0c;我们将讨论如何使用Python来制作动画。 Python中的动画库 Python中有许多用于制作动画的库。其中最流行…

ping命令 网络抓包 分析

首先&#xff0c;执行ipconfig确认自己电脑的ip地址 可以得到我的电脑的ip地址为192.168.43.15&#xff0c;网关地址为192.168.43.1 打开wireshark抓包工具&#xff0c;ping网关&#xff0c;看看会发生什么 命令行中&#xff0c;我们发送了4个具有32B的数据&#xff0c;从抓…

网络抓包-抓包工具tcpdump的使用与数据分析

1.测试背景 本次测试选用两台不同的服务器&#xff0c;ip分别为.233和.246,233服务器为客户端&#xff0c;246服务器为服务端。利用tcp协议就行socket通信。socket网络编程部分示例代码为基本的通信代码&#xff0c;需要了解tcp网络通讯的基本协议与过程。服务器上采用tcpdump…

通过抓包研究TCP的连接、传输、断开

1-建立连接TCP三次握手 建立一个 TCP 连接需要“三次握手”&#xff0c;缺一不可 &#xff1a; 一次握手:客户端发送带有 SYN&#xff08;SEQx&#xff09; 标志的数据包 -> 服务端&#xff0c;然后客户端进入 SYN_SEND 状态&#xff0c;等待服务器的确认&#xff1b;二次握…