经过之前整合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)

#springthymeleaf
spring.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),打开浏览器输入路径进行访问测试

#server
server.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>
@Mapper
public interface GoodsDao {
    @Select("select * from tb_goods")
    public List<Goods> findObjects();
}
public interface GoodsService {
    public List<Goods> findObjects();
}
@Service
public 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;
    }
}

以上是代码实现,可以得到正确显示:

1596455966(1).png


迈克丝
82 声望5 粉丝

一步一步学技术,踏踏实实涨经验,兴趣广泛,广交好友,希望大家多多指正/批评.