SpringBoot2.x入门到项目实战课程系列(第五章)( 六 )


5.3.4.5 th:object 直接取出对象

  • 使用th:object 直接取出对象 , 然后写对象里的属性名即可获取属性值
@RequestMapping("/study")public String study(Map map, HttpServletRequest request) { List userList = new ArrayList<>(); userList.add(new User("小星", 1)); userList.add(new User("小李", 2)); userList.add(new User("小张", 1)); map.put("userList", userList); // 1女, 2男 map.put("sex", 1); map.put("man", 2); // th:text th:utext map.put("desc", "欢迎来到程序员星仔"); request.getSession().setAttribute("user", new User("小不点", 2)); return "study";}姓名:xxxx
性别:xxxx
5.4 SpringBoot 热部署
  • 默认情况下 ,在开发中我们修改一个项目文件后 , 想看到效果不得不重启应用 , 这会导致浪费大量时间, 我们希望不重启应用的情况下 , 程序可以自动部署(热部署) 。
  • 如何能实现热部署?
1、关于模板引擎
  • 在 Spring Boot 开发环境下禁用模板缓存
#开发环境下关闭thymeleaf模板缓存 , thymeleaf默认是开启状态spring.thymeleaf.cache=false2、添加 Spring Boot Devtools 热部署依赖
org.springframework.boot spring-boot-devtools3、Intellij IEDA和Eclipse不同 , Intellij IDEA必须做一些小调整:
  • 在 Eclipse 中 , 修改文件后要手动进行保存 , 它就会自动编译 , 就触发热部署现象 。
  • 在Intellij IEDA 中 , 修改文件后都是自动保存 , 默认不会自动编译文件 , 需要手动编译按 Ctrl + F9 (推荐使用)或 Build -> Build Project ;或者进行以下设置才会自动编译(效果不明显)(File -> Settings -> Build, Execution, Deployment -> Compiler -> 勾选 Build project automatically)

SpringBoot2.x入门到项目实战课程系列(第五章)文章插图
5.5 分析 SpringMVC 自动配置Spring Boot 为 Spring MVC 提供了适用于多数应用的自动配置功能( WebMvcAutoConfiguration) 。 在Spring默认基础上 , 自动配置添加了以下特性:
  • 引入 ContentNegotiatingViewResolver 和 BeanNameViewResolver beans.
  • 自动配置了视图解析器ViewResolver(根据方法返回值获取视图对象View , 视图对象决定如何渲染?重定向Or 转发)
  • ContentNegotiatingViewResolver : 组合所有的视图解析器的(通过源码可分析出)
public class ContentNegotiatingViewResolver //146 public View resolveViewName(String viewName, Locale locale) throws Exception {RequestAttributes attrs = RequestContextHolder.getRequestAttributes();Assert.state(attrs instanceof ServletRequestAttributes, "No current ServletRequestAttributes");List requestedMediaTypes = this.getMediaTypes(((ServletRequestAttributes)attrs).getRequest());if (requestedMediaTypes != null) {//选择所有候选的视图对象List candidateViews = this.getCandidateViews(viewName, locale,requestedMediaTypes);//从候选中选择最合适的视图对象View bestView = this.getBestView(candidateViews, requestedMediaTypes,attrs);//存入所有视图解析器 private List viewResolvers; 107 protected void initServletContext(ServletContext servletContext) {Collection