SpringMVC 的运行流程

今天一个同志在b站回复了我的回复,就是当时学习SpringBoot的时候的评论,大概的问题就是说在thymeleaf中没有办法使用 对象.对象的get方法,然后我就仔细的研究了一下。

下图大概就是问题

简单来说就是 使用thymeleaf的each之后,没有办法使用对象的get方法。
在这里插入图片描述
这里我就研究了一下SpringMVC的运行流程(之前也有涉及)

下面是之前的研究

先记住几个概念,前端控制器 DispatcherServlet,处理器映射器 HandlerMapping,处理器执行链 HandlerExecutionChain,处理器适配器 HandlerAdapter,视图解析器ViewResolver

1、客户端请求到前端控制器(dispatcherServlet)
2、前端控制器(dispatcherServlet)请求处理器映射器(HandlerMapping),
3、处理器映射器(HandlerMapping)根据url查找相应的处理器(Handler),返回处理器执行链(HandlerExecutionChain)给前端控制器(DispatcherServlet)
4、前端控制器(DispatcherServlet)请求处理器适配器(HandlerAdapter),
5、处理器适配器(HandlerAdapter)执行处理器(Handler),生成ModelAndView,返回ModelAndView给前端控制器(DispatcherServlet)
6、前端控制器(DispatcherServlet)请求视图解析器(ViewResolver)
7、视图解析器(ViewResovler)返回视图对象给前端控制器(DispatcherServlet)
8、最后渲染视图

Spring MVC的流程图

百度一大堆的
在这里插入图片描述

文章的主题

说白了,就是知识的科普,随便说说,自己来实现这个过程,就是从controller到View的数据传输。
下面就是实现这个过程,先声明,说思路,如果你照抄代码的很大可能是没有办法正常运行的。目的就是让读者能够真正的懂。

  • 定义一个Book类
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;

@Data  // 这里使用的是lombok的@Data注解,如果不使用这个注解,就要自定义getter和setter方法,如何使用lombok得自己百度一下
@AllArgsConstructor // 这个注解就是包含所有参数的构造方法
@NoArgsConstructor // 这个注解就是无参构造方法
public class Book {
    Long id;
    String bookName;
    Date date;
}
  • 定义一Controller
@Controller
public class BookController {

    @GetMapping(value = "/books")
    public String getBooks(Model model){
        /**
         * 这个类很简单,就是定义一个路径,返回到booksList这个界面,带着model数据
         */
        Book book = new Book((long) 1, "数据结构", new Date());  // Book导入自己方才定义的类, Date 也在util中
        List<Book> list = new ArrayList<>(); // List和ArrayList很清楚都在java.util中
        list.add(book);
        model.addAttribute("books", list);  // 这里model.add.. 就是用model来保存数据
        return "booksList"; // 这里的booksList就是View,就是解析器需要解析的
    }
}
  • 定义一个视图booksList
<table>
    <thead>
    <tr>
        <td>id</td>
        <td>name</td>
        <td>date</td>
    </tr>
    </thead>
    <tbody>
    <!--这里就是使用thymeleaf来获取数据,前提是文件得有xmlns:th="http://www.thymeleaf.org" 设置-->
    <!--th:each 基础使用-->
    <tr th:each="book:${books}">
        <td th:text="${book.getId()}"></td>
        <td th:text="${book.getBookName()}"></td>
        <td th:text="${book.getDate()}"></td>
    </tr>
    </tbody>
</table>

输出:
在这里插入图片描述

总结

不用说你们看完之后,代码完全不能用。
我这里提出三个注意点:
1、BookController是否使用了@Controller注解?
2、Book类属性是否有get方法?
3、booksList 上面是否有 设置 <html lang="en" xmlns:th="http://www.thymeleaf.org">?

慢慢的理解体会,多看一些文章,第一遍可能不懂,但是当你再次遇见,你再去看,你就会懂了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值