通过之前整合mybatis框架之后,本文持续将springboot与springmvc进行整合.

MVC设计模式

MVC设计模式将零碎分为了三局部:
控制器(Controller)- 负责获取申请,解决申请,响应后果;
模型(Model) - 实现业务逻辑,数据逻辑实现;
视图(View) - UI设计人员进行图形界面设计,负责实现与用户交互;

MVC的首要职责:是让每个对象各司其职,各尽所能;
其次是:基于"高内聚,低耦合"的面向接口思维实现相干层与层对象之间的交互.

整合根本配置

增加依赖

首先须要增加springmvc依赖:
右键pom.xml-->spring-->Edit Starters-->搜寻spring WEB以及Thymeleaf,并将这两个依赖增加.

Web依赖提供了Spring MVC外围API,同时会嵌入一个Tomcat服务器;
Thymeleaf依赖提供了一个视图解析器对象以及数据绑定机制.
Thymeleaf是一个html模板引擎,提供了与Spring MVC进行整合的API,可作为MVC架构中Web利用的View层(曾经逐渐代替JSP进行应用).

配置外围

须要在application.properties配置文件中增加视图解析器配置(如果没有配置也会默认配置,在默认配置中prefix默认值为classpath:/templates/,后缀默认为.html)

#springthymeleafspring.thymeleaf.prefix=classpath:/templates/pages/spring.thymeleaf.suffix=.html

在这里咱们配置如上图所示.

留神:依据配置,咱们须要在src/main/resources目录下创立templates/pages目录.

thymeleaf目录下的html文件(模板文件)无奈间接拜访,若要间接拜访须要在src/main/resources目录下创立static目录(用于存储动态资源).

拜访实现

编写GoodsController类

代码如下:

@Controller@RequestMapping("/goods/")public class GoodsController {    @RequestMapping("doGoodsUI")    public String doGoodsUI() {        return "goods";    }}

通过增加@Controller注解将其交给spring治理,尽管是@Controller,但其实他并不属于MVC设计模式中的"C",而是Handler(处理器),可了解为一个后端控制器,但属于"M".

该办法是由前端控制器DispatcherServlet调用,返回值也是返回给前端控制器;返回值会被前端控制器调用视图解析器增加前后缀.

创立goods.html

因为GoodsController类最初会return "goods";所以咱们须要在/templates/pages/目录下创立goods.html文件.

那么当GoodsController类中return时,视图解析器会通过咱们所配置的前后缀,将其指向/templates/pages/目录下的goods.html文件,在网页中进行显示.

拜访测试

关上服务器(内嵌的tomcat),关上浏览器输出门路进行拜访测试

#serverserver.port=80

因为我将端口号改为了80,所以只需在浏览器输出:
localhost/goods/doGoodsUI即可胜利拜访.

业务实现

既然曾经能够胜利拜访后,能够与之前的Dao层的数据操作一起应用一下,看一下成果,这里以查问所有商品为实例.

@Controller@RequestMapping("/goods/")public class GoodsController {    @Autowired    private GoodsService goodsService;    @RequestMapping("doGoodsUI")    public String doGoodsUI(Model model) {        List<Goods> list = goodsService.findObjects();        model.addAttribute("list", list);        return "goods";    }}
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title></head><body>    <h1>the goods pages</h1>    <table>        <thead>            <tr>                <th>id</th>                <th>name</th>                <th>remark</th>                <th>createdTime</th>            </tr>        </thead>        <tbody>            <tr th:each="g:${list}">                <td th:text="${g.id}">1</td>                <td th:text="${g.name}">pathon</td>                <td th:text="${g.remark}">framwork</td>                <td th:text="${#dates.format(g.createdTime, 'yyyy/MM/dd HH:mm:ss')}">2020/8/3 17:33</td>            </tr>        </tbody>    </table></body></html>
@Mapperpublic interface GoodsDao {    @Select("select * from tb_goods")    public List<Goods> findObjects();}
public interface GoodsService {    public List<Goods> findObjects();}
@Servicepublic class GoodsServiceImpl implements GoodsService{    @Autowired    private GoodsDao goodsDao;    @Override    public List<Goods> findObjects() {        long t1=System.currentTimeMillis();        List<Goods> list = goodsDao.findObjects();        long t2=System.currentTimeMillis();        log.info("execute time:{}",(t2-t1));        return list;    }}

以上是代码实现,能够失去正确显示: