通过之前整合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; }}
以上是代码实现,能够失去正确显示: