【SpringMvc】從零開(kāi)始學(xué)SpringMvc之實(shí)現(xiàn)用戶登錄(三)

前言

大家好填抬,在前2篇中喧锦,我們實(shí)現(xiàn)了SpringMvc的配置和數(shù)據(jù)庫(kù)連接,這一篇我們來(lái)用html/ajax實(shí)現(xiàn)一個(gè)簡(jiǎn)單的登錄功能衬横。

準(zhǔn)備

這里我們用到了Bootstrap(一個(gè)html/css前端框架)、JavaScript终蒂、AJAX蜂林,最好對(duì)這些有一定的了解,不太了解也沒(méi)關(guān)系拇泣,本文也只是用到了一些最基本的噪叙。

  • 1.在WEB-INF文件夾下,創(chuàng)建html文件夾霉翔,在html文件夾創(chuàng)建login.htmlindex.html文件
  • 2.在login.html 的head標(biāo)簽中引入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" >

html中睁蕾,最外層是<html>標(biāo)簽,<head>標(biāo)簽中,可以引用一些js和css 等配置子眶,<body>標(biāo)簽中放的是網(wǎng)頁(yè)的內(nèi)容

<html>
    <head></head>
    <body></body>
</html>
  • 3.在body標(biāo)簽中加入以下代碼
<div class="login_div">

            <div class="input-group">
                <span class="input-group-addon">*</span>
                <input class="input_box" id="username" type="text" placeholder="請(qǐng)輸入用戶名" aria-describedby="basic-addon1">
            </div>

            <div class="input-group">
                <span class="input-group-addon">*</span>
                <input class="input_box" id="password" type="text" placeholder="請(qǐng)輸入密碼" 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是相當(dāng)于容器,其中可以存放其他元素臭杰;input 為輸入框粤咪,button 為按鈕;onclick="login()"為點(diǎn)擊時(shí)渴杆,執(zhí)行l(wèi)ogin()方法

  • 4.在head標(biāo)簽中加入如下代碼
<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可以在多個(gè)元素中使用。class 選擇器在HTML中以class屬性表示, 在 CSS 中点寥,類選擇器以一個(gè)點(diǎn)"."號(hào)顯示艾疟;

  • 5.在后臺(tái)代碼中,創(chuàng)建IndexController敢辩,其中ControllerRequestMapping注解我們之前已經(jīng)詳細(xì)說(shuō)過(guò)了
@Controller
@RequestMapping("")
public class IndexController extends BaseController {

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

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

}

運(yùn)行項(xiàng)目蔽莱,然后在瀏覽器中輸入http://localhost:8080/SpringMvc/,效果如下圖

image.png

  • 6.在UserController中添加login方法戚长,需要注意的是盗冷,一般我們不會(huì)在數(shù)據(jù)庫(kù)中存儲(chǔ)用戶的明文密碼,這里存儲(chǔ)的是md5 加密后的密碼同廉。需要修改添加用戶時(shí)仪糖,也為存儲(chǔ)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.到這里,后臺(tái)的代碼已經(jīng)完成迫肖,我們?cè)?code>WEB-INF文件夾下锅劝,創(chuàng)建js文件夾,創(chuàng)建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 語(yǔ)法,意思是取得id為username的元素的值隅津;$.get(url, function(data) {}诬垂;為發(fā)起一個(gè)get 請(qǐng)求,第1個(gè)參數(shù)為請(qǐng)求地址伦仍,第2個(gè)參數(shù)為請(qǐng)求成功后的回調(diào)结窘;請(qǐng)求成功后,跳轉(zhuǎn)到index.html頁(yè)面充蓝。

  • 8.最后隧枫,在login.html 的head標(biāo)簽中引用login.js
<script type="text/javascript" src="js/login.js"></script>

看到這里,還不快來(lái)試試?

最后獻(xiàn)上源碼Github

你的認(rèn)可悠垛,是我堅(jiān)持更新博客的動(dòng)力线定,如果覺(jué)得有用,就請(qǐng)點(diǎn)個(gè)贊确买,謝謝

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末斤讥,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子湾趾,更是在濱河造成了極大的恐慌芭商,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件搀缠,死亡現(xiàn)場(chǎng)離奇詭異铛楣,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)艺普,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門簸州,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人歧譬,你說(shuō)我怎么就攤上這事岸浑。” “怎么了瑰步?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵矢洲,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我缩焦,道長(zhǎng)读虏,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任袁滥,我火速辦了婚禮盖桥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘呻拌。我一直安慰自己葱轩,他們只是感情好睦焕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布藐握。 她就那樣靜靜地躺著,像睡著了一般垃喊。 火紅的嫁衣襯著肌膚如雪猾普。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,554評(píng)論 1 305
  • 那天本谜,我揣著相機(jī)與錄音初家,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛溜在,可吹牛的內(nèi)容都是我干的陌知。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼掖肋,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼仆葡!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起志笼,我...
    開(kāi)封第一講書(shū)人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤沿盅,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后纫溃,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體腰涧,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年紊浩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了窖铡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡坊谁,死狀恐怖万伤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情呜袁,我是刑警寧澤敌买,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站阶界,受9級(jí)特大地震影響虹钮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜膘融,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一芙粱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧氧映,春花似錦春畔、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至臼疫,卻和暖如春择份,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背烫堤。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工荣赶, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留凤价,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓拔创,卻偏偏與公主長(zhǎng)得像利诺,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子剩燥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理立轧,服務(wù)發(fā)現(xiàn),斷路器躏吊,智...
    卡卡羅2017閱讀 134,657評(píng)論 18 139
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5氛改? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 27,486評(píng)論 1 45
  • 我心里對(duì)說(shuō)好了的事情 哪怕對(duì)方說(shuō)一個(gè)不重要的人 因?yàn)橄日f(shuō)好了 然后臨時(shí)有個(gè)重要的人 來(lái)打岔 我潛意識(shí)里面比伏,會(huì)有一個(gè)...
    boya1998閱讀 212評(píng)論 0 1
  • annyliu2011閱讀 234評(píng)論 0 0
  • 在一個(gè)小院里胜卤,一個(gè)少年正在揮汗如雨,他認(rèn)真的練習(xí)著一套拳法赁项,少年每打出一拳周圍的空氣都在扭曲葛躏,這拳法名為碎空拳是...
    燎原徐閱讀 189評(píng)論 0 1