配置thymeleaf模板引擎:
想要什么功能在pom文件里加入starter就行了:
<!-- 导入thymeleaf模板引擎 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
想看默认的版本这样做:
在pom文件最上面先点这里
进去的最上面就看到了,然后点击标红的地方:
往下翻找可以看到:
对版本有要求的网上有设置的方法,很好改的。
我小白一个,现在对这些start的作用过程一概不懂,但是配了这个start,thymeleaf的自动配置类ThymeleafAutoConfiguration就已经生效了,然后ThymeleafProperties类里的配置就是他的默认配置,这些我们还是要知道的:
然后在controller里就可以mapping了比如我返回一个字符串"login",就会自动去找classpath:/templates/login.html这个资源。翻看以前的spring的项目似乎已经自动配置了视图解析到webcontent下:
(这上面一句回看发现说错了,Curd.jap路径前面没加 / 说不定是直接访问同级目录下静态资源的方式,因为好像有些文件夹是虚拟的,发布到服务器之后会去掉,这个servlet类和Curd.jsp页面在不在同一个目录下我就不知道了)
反正现在知道要配置视图解析器了,这是我们现在见到的第二个组件吧,昨天那个是负责静态资源映射的,这个thymeleaf引擎的视图解析当然也是可以在配置文件改的,不过我们说过如果我们配置文件有的话那springboo自己的他就不配置了,所以我们可以用添加bean到容器中的方式,多个bean可以共同起作用嘛,新建一个bean:
package com.myfirstspringboot.bookmanage.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
@Configuration
public class MyConfig implements WebMvcConfigurer {
//资源映射的组件
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/img/**").addResourceLocations("classpath:/static/img/");
}
//视图解析的组件
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/login").setViewName("login");
}
}
这个类是配置类,我们知道配置类自己也会加入到容器中,所以重写了他的方法就会起作用,别小看这一个类,昨天今天遇到的问题他都给我们解决了
记得以前学spring mvc的时候和springboot有很多不同,在这里记录一下:
1.在访问资源的时候,就算两边都做了这样的配置
springbooot:
registry.addResourceHandler("/img/**").addResourceLocations(“classpath:/static/img/”);
spring-mvc:
<mvc:default-servlet-handler/>
<mvc:resources location=“classpath:static/js/” mapping="/js/**"/>
<mvc:resources location=“classpath:static/bootstrap-3.3.7-dist/css/” mapping="/bootstrap-3.3.7-dist/css/**"/>
<mvc:resources location=“classpath:static/bootstrap-3.3.7-dist/js/” mapping="/bootstrap-3.3.7-dist/js/**"/>
<mvc:resources location=“classpath:static/bootstrap-3.3.7-dist/fonts/” mapping="/bootstrap-3.3.7-dist/fonts/**"/>
但是在网页里访问资源的时候spring-mvc需要带上项目名,像这样:
<script src="/DontKonwWTI/js/jquery.min.js" charset=“utf-8”>
或者这样:
<%
pageContext.setAttribute(“APP_PATH”, request.getContextPath());
%>
<script src="${APP_PATH }/js/jquery.min.js" charset=“utf-8”>
而springboot请求资源就不需要带上项目名,这肯定是因为 “/” 的表示有歧义,springmvc似乎前端网页里的 “/” 指的是不带项目名的根目录,后台页面指的是带项目名的根目录,而springboot似乎把这两个统一了,都指不带项目名的根目录 ,百度查绝对路径和相对路径的写法还是什么的我上次也看到一个谁提了说前端和后端的根目录代表不同的意思,有细微的差别
2.视图解析的路径写法springboot更加严格了:
比如同样都配了视图解析器的前缀是 WEB-INF/views/ 后缀是 .jsp ,在springmvc里你去 login 或者 /login 都能找到,而springboot拼串的限制很严格,只能写 login
把两个对比起来好累啊,还想讲这两个分别对于资源映射和视图解析的默认配置是什么样的,但是mvc的都不记得了,好像没有默认配置吧哈哈。springboot的话默认资源映射我知道是那5个地方,默认视图解析的话是有一个 InternalResourceViewResolver类,不知道有没有默认的前缀后缀呢,贴个别人的博客以后再看,大佬的博客,再见 (≧∀≦)ゞ