SpringBoot+Thymeleaf实现简单的MVC

一、阶段一:MVC的单向实现

主要内容:在Controller中实例化Model对象,通过thymeleaf引擎把Model对象渲染到View中,最终为用户返回融合生成后的html。

1.构建Model类User,存储用户信息

package com.zhbit.mpw.model;

import lombok.Data;

@Data
public class User {
    //用户ID
    private int id;
    //用户名
    private String name;
    //密码
    private String pwd;
}

注意:

  • 引入了lombok插件,在类定义时注解@Data;
  • Get&Set不会生成,程序标红但能编译;》解决办法:在IDE的Setting中更新lombok插件;

2.构建View的html模板页面,调用thymeleaf标签,注入对象变量

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=divice-width,initial-scale=1.0">
    <title>MVC-Show</title>
</head>
<body>
    <div>
        <div th:text="${user.id}"></div>
        <div th:text="${user.name}"></div>
        <div th:text="${user.pwd}"></div>
    </div>
</body>
</html>

注意:

  • thymeleaf的模板页面都存放在resources ->tempaltes中,以.html结尾。
  • 在html标签中,加入xmlns:th="www.thymeleaf.org,表示引入thymeleaf引擎;
  • content="width=divice-width,initial-scale=1.0 表示自适应设备屏幕宽度;满屏显示;
  • ${user.id}表示取user对象(Model)的id值,单个值。

3.构建控制器:实例化Model对象,通过模板引擎渲染到html模板中,并返回渲染后的html给用户

package com.zhbit.mpw.controller;

import com.zhbit.mpw.model.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import lombok.Data;

@Controller
public class MVCDemoController {

    @RequestMapping("/mvcdemo")
    public ModelAndView showUser(){

        User user = new User();
        user.setId(1);
        user.setName("jack");
        user.setPwd("123");

        ModelAndView mv = new ModelAndView("mvcshow");
        mv.addObject("user",user);
        return mv;
    }
}

注意:

  • @Controller表示一个普通的控制器,return时会自动去找thymeleaf的模板;(不能直接返回字符串String了。)
  • user的set方法是由插件lombok自动加载的,所以IDE可能会标红,表示没找到set方法,更新lombok插件就好了。
  • ModelAndView对象是用于把具体Model对象渲染至View页面中,并返回融合后的html页面。

二、阶段二:双向MVC

主要内容:

  1. 用户输入用户名和密码;

  2. Controller获取请求,并验证用户输入是否正确;

  3. 返回结果页面(登录成功进入main页,登录失败返回login页)

1.构建一个用于获取用户输入的表单页面form.html

<!DOCTYPE html>
<html lang="en"xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=divice-width,initial-scale=1.0">
    <title>Form</title>
</head>
<body>
<form th:action="@{/check}" th:object="${user}" method="post">
    <div>
        <div>
            <span>Name:</span>
            <span><input type="text" th:field="*{name}"/></span>
        </div>
        <div>
            <span>PWD:</span>
            <span><input type="password" th:field="*{pwd}"/></span>
        </div>
        <div>
            <button type="submit">提交</button>
        </div>
    </div>
</form>
</body>
</html>

Thymeleaf模板View存放在resources的templates文件夹下,Thymeleaf模板引擎将会自动加载。

2.在新建UserController,专门处理关于用户的所有请求

package com.zhbit.mpw.controller;

import com.zhbit.mpw.model.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class UserController {

    @GetMapping("/test")
    public String showLogin(User user){
        return "form";
    }
    @PostMapping("/check")
    public ModelAndView loginCheck(User user){
        String name = user.getName().toString();

        ModelAndView mv = new ModelAndView("mvcshow");
        mv.addObject("user",user);
        return mv;
    }
}

最终效果

用户访问:http://localhost:8088/test,输入用户名和密码,点击提交;

若用户和密码正确,跳转到使用模板mvcshow.html构建页面,并返回结果。

三、阶段三:加入登录时输入验证

(略)请查阅书本P99中的实例8

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