【SpringMvc】从零开始学SpringMvc之实现用户登录(三)

前言

大家好,在前2篇中,我们实现了SpringMvc的配置和数据库连接,这一篇我们来用html/ajax实现一个简单的登录功能。

准备

这里我们用到了Bootstrap(一个html/css前端框架)、JavaScriptAJAX,最好对这些有一定的了解,不太了解也没关系,本文也只是用到了一些最基本的。

  • 1.在WEB-INF文件夹下,创建html文件夹,在html文件夹创建login.htmlindex.html文件
  • 2.在login.html 的head标签中引入bootstrap
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://cdn.bootcss.com/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css">

html中,最外层是<html>标签,<head>标签中,可以引用一些js和css 等配置,<body>标签中放的是网页的内容

<html>
    <head></head>
    <body></body>
</html>
  • 3.在body标签中加入以下代码
<div class="login_div">

            <div class="input-group">
                <span class="input-group-addon">*</span>
                <input class="input_box" id="username" type="text" placeholder="请输入用户名" aria-describedby="basic-addon1">
            </div>

            <div class="input-group">
                <span class="input-group-addon">*</span>
                <input class="input_box" id="password" type="text" placeholder="请输入密码" style="-webkit-text-security:disc" aria-describedby="basic-addon1">
            </div>

            <div class="input-group">
                <button type="button" class="btn btn-default navbar-btn" onclick="login()">登录</button>
            </div>

        </div>

其中,div是相当于容器,其中可以存放其他元素;input 为输入框,button 为按钮;onclick="login()"为点击时,执行login()方法

  • 4.在head标签中加入如下代码
<style type="text/css">
            input {
                padding: 10px;
            }
            
            .login_div {
                margin: 15%;
                width: auto;
                height: 100%;
            }
            
            .input-group {
                margin: auto;
                margin-top: 20px;
                width: 300px;
            }
            
            .input_box {
                margin: auto;
                width: 100%;
            }
            
            .btn_div {
                margin: auto;
                width: 100%;
            }
            
            .btn {
                margin: auto;
                width: 100%;
            }
            
            body {
                background-image: url(img/login_bj.jpg);
                background-repeat: no-repeat;
                background-size: cover;
            }
        </style>

其中,“.”是class 选择器,用于描述一组元素的样式,class 选择器有别于id选择器,class可以在多个元素中使用。class 选择器在HTML中以class属性表示, 在 CSS 中,类选择器以一个点"."号显示;

  • 5.在后台代码中,创建IndexController,其中ControllerRequestMapping注解我们之前已经详细说过了
@Controller
@RequestMapping("")
public class IndexController extends BaseController {

    @RequestMapping("/index")
    public String hello() {
        return "index";
    }

    @RequestMapping("")
    public String index() {
        return "login";
    }

}

运行项目,然后在浏览器中输入http://localhost:8080/SpringMvc/,效果如下图

image.png

  • 6.在UserController中添加login方法,需要注意的是,一般我们不会在数据库中存储用户的明文密码,这里存储的是md5 加密后的密码。需要修改添加用户时,也为存储md5加密后的密码
    @ResponseBody
    @RequestMapping("/login")
    public BaseModel login(String username, String password) {
        if (TextUtils.isEmpty(username) || TextUtils.isEmpty(password)) {
            return makeModel(ERROR_CODE, "用户名和密码不能为空");
        } else {
            UserModel userModel = userdao.getUserByName(username);
            if (userModel == null) {
                return makeModel(ERROR_CODE, "用户不存在");
            }
            if (userModel.getPassword().equals(MD5Util.encode(password))) {
                return makeModel(SUCC_CODE, MSG_SUCC, userModel);
            } else {
                return makeModel(ERROR_CODE, "用户名或者密码不正确");
            }

        }
    }

MD5Util

    /**
     * md5加密的方法
     * 
     * @param text
     * @return
     */
    public static String encode(String text) {
        try {
            MessageDigest digest = MessageDigest.getInstance("MD5");
            byte[] result = digest.digest(text.getBytes());
            StringBuilder sb = new StringBuilder();
            for (byte b : result) {
                int number = b & 0xff;
                String hex = Integer.toHexString(number);
                if (hex.length() == 1) {
                    sb.append("0");
                }
                sb.append(hex);
            }
            return sb.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return "";
        }
    }
  • 7.到这里,后台的代码已经完成,我们在WEB-INF文件夹下,创建js文件夹,创建login.js文件,在其中添加如下代码
function login() {
    var username = $('#username').val();
    var password = $('#password').val();
    if(username.length <= 0) {
        alert("用户名不能为空")
        return;
    }
    if(password.length <= 0) {
        alert("密码不能为空")
        return;
    }

    var url = "http://localhost:8080/SpringMvc/user/login?username=" + username + "&password=" + password;
    $.get(url, function(data) {
        if(data.code == 1) {
            window.location.href = "index.html";
        } else {
            alert(data.msg)
        }
    });
}

其中,第一行为ajax 语法,意思是取得id为username的元素的值;$.get(url, function(data) {};为发起一个get 请求,第1个参数为请求地址,第2个参数为请求成功后的回调;请求成功后,跳转到index.html页面。

  • 8.最后,在login.html 的head标签中引用login.js
<script type="text/javascript" src="js/login.js"></script>

看到这里,还不快来试试?

最后献上源码Github

你的认可,是我坚持更新博客的动力,如果觉得有用,就请点个赞,谢谢

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,580评论 18 139
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,400评论 1 45
  • 我心里对说好了的事情 哪怕对方说一个不重要的人 因为先说好了 然后临时有个重要的人 来打岔 我潜意识里面,会有一个...
    boya1998阅读 203评论 0 1
  • annyliu2011阅读 229评论 0 0
  • 在一个小院里,一个少年正在挥汗如雨,他认真的练习着一套拳法,少年每打出一拳周围的空气都在扭曲,这拳法名为碎空拳是...
    燎原徐阅读 182评论 0 1