springboot第二天web整合开发

Web整合相关

使用springboot
1)、创建SpringBoot应用,选中我们需要的模块;
2)、SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可以运行起来
3)、自己编写业务代码;

自动配置

xxxxAutoConfiguration:帮我们给容器中自动配置组件;
xxxxProperties:配置类来封装配置文件的内容;

SpringBoot对静态资源的映射
1、设置和静态资源有关的参数,缓存时间等

@ConfigurationProperties(prefix = "spring.resources", ignoreUnknownFields = false)
public class ResourceProperties implements ResourceLoaderAware {

2、静态资源文件映射
(1)、webjars/**
访问路径http://localhost:8080 /webjars/**
默认都去 classpath:/META-INF/resources/webjars/ 找资源;
webjars:以jar包的方式引入静态资源

<!--引入jquery-webjar-->在访问的时候只需要写webjars下面资源的名称即可
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>jquery</artifactId>
            <version>3.3.1</version>
        </dependency>

要想访问有关内容只需要访问http://localhost:8080/webjars/jquery/3.3.1/jquery.js

对于一些我们自己的资源,没有办法用jar包进行引入的,使用下面这种静态资源映射方式
(2)、/**即访问当前项目的任何资源,如果没有人处理,则去下面的这些路径下去寻找

"classpath:/META-INF/resources/", 
"classpath:/resources/",
"classpath:/static/", 
"classpath:/public/" 
"/":当前项目的根路径

比如localhost:8080/abc则表示去静态资源文件夹下找abc
比如把静态资源文件放在了这个路径下面classpath:/static/js/jquery.js,访问的时候只需要从js这个文件夹开始写路径即可,因为他会默认从静态资源文件夹找,即路径是localhost:8080/js/jquery.js

(3)、localhost:8080/找index页面
SpringBoot默认配置了欢迎页面的映射,如果直接写localhost:8080/,即默认去(2)中所说的静态资源文件夹下去找index页面

(4)、所有的 **/favicon.ico 都是在静态资源文件下找;
不管你那个页面需要这个图标,都会在静态资源文件夹下去寻找

注意:
当controller中所有的方法都返回的是字符串的时候,可以使用@RestController,但是此时不能进行跳转到页面。

模板引擎
SpringBoot推荐使用thymeleaf,语法更简单,功能更强大
1、引入thymeleaf

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
//要注意下面两个版本的对应
<!-- 布局功能的支持程序  thymeleaf3主程序  layout2以上版本 -->
<thymeleaf.version>3.0.2.RELEASE</thymeleaf.version>
<thymeleaf-layout-dialect.version>2.1.1</thymeleaf-layout-dialect.version>

2、Thymeleaf使用
只要我们把HTML页面放在classpath:/templates/,thymeleaf就能自动渲染;

Thymeleaf语法
通过th:来更改需要更改的内容

<body>
<h1>thymeleaf语法</h1>
<div th:text="${name}"></div>
<hr/>
//th:utext:显示结果不转义
//th:text:显示结果转义,比如<h1></h1>,会使里面标题内容变大
<div th:utext="${hello}"></div>
<div th:text="${hello}"></div>
<hr/>
//如果把th:each写到了h3标签中,遍历出几个结果就会生成几个标签
<h3 th:text="${user}" th:each="user:${users}"></h3>
<h3>
    //结果还可以使用[[要显示的内容]]== th:text,[(要显示的内容)]==th:utext
    <span th:each="user:${users}">[[${user}]]</span>
</h3>
</body>

Spring Boot 自动配置好了SpringMVC
但是仅仅是自动配置的,并不能满足我们的需求,所以我们要进行扩展SpringMVC的配置
扩展原理:
1)、WebMvcAutoConfiguration是SpringMVC的自动配置类
2)、在做其他自动配置时会导入;@Import(**EnableWebMvcConfiguration**.class)
实现原理:从容器中获取所有的WebMvcConfigurer,比如视图解析器:会将所有符合的都调用一遍,这样就实现了自己配置的和自动配置的都会使用。
——->容器中所有的WebMvcConfigurer都会一起起作用;
———->我们的配置类也会被调用;
​ 效果:SpringMVC的自动配置和我们的扩展配置都会起作用;

对于扩展,有一定的套路:
模式:
​ 1)、SpringBoot在自动配置很多组件的时候,先看容器中有没有用户自己配置的(@Bean、@Component)如果有就用用户配置的,如果没有,才自动配置;如果有些组件可以有多个(ViewResolver)将用户配置的和自己默认的组合起来;
​ 2)、在SpringBoot中会有非常多的xxxConfigurer帮助我们进行扩展配置
​ 3)、在SpringBoot中会有很多的xxxCustomizer帮助我们进行定制配置
扩展注意:
1、编写一个配置类(@Configuration),是WebMvcConfigurerAdapter类型;不能标注@EnableWebMvc

public class MyMvcConfig extends WebMvcConfigurerAdapter {
    //使用WebMvcConfigurerAdapter可以来扩展SpringMVC的功能
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        //super.addViewControllers(registry);
        registry.addViewController("/atiguigu").setViewName("success");
    }
}

全面接管SpringMVC
我们不使用SpringMVC自动配置的,而是全是用我们自己写的,此时我们需要在配置类中添加@EnableWebMvc注解,此时所有SpringMVC的自动配置都会全部失效
为什么使用了@EnableWebMvc注解,SpringMVC自动配置就失效了?
原理:
使用@EnableWebMvc会导入@Import(DelegatingWebMvcConfiguration.class)(委派的WebMvc配置),此时只会使用自己配置的,而在没有使用这个注解的时候导入的是@Import(**EnableWebMvcConfiguration**.class)(能够使用的WebMvc配置),而在这个里面有一个很重要的注解就是@ConditionalOnMissingBean(WebMvcConfigurationSupport.class),容器中没有这个组件的时候,会让自动配置类生效。

猜你喜欢

转载自blog.csdn.net/ilikejj0/article/details/81203897