SpringBoot核心整理第四章SpringBoot与Web开发

41 篇文章 0 订阅
16 篇文章 0 订阅

提示这是我的个人IT资源网站,所有资源都免费,注册登录后就可以看到密码,需要什么大家尽情选取!

最近打算将SpringBoot一些核心的东西整理一遍,将分成十六个章节,相信这些知识对大家是有用的。
一、SpringBoot入门
二、SpringBoot配置
三、SpringBoot与日志
四、SpringBoot与Web开发
五、SpringBoot与Docker
六、SpringBoot与数据访问
七、SpringBoot启动配置原理
八、SpringBoot自定义starters
九、SpringBoot与缓存
十、SpringBoot与消息
十一、SpringBoot与检索
十二、SpringBoot与任务
十三、SpringBoot与安全
十四、SpringBoot与分布式
十五、SpringBoot与开发热部署
十六、SpringBoot与监控管理

四、Web开发

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

自动配置原理
这个场景SpringBoot帮我们配置了什么?能不能修改?能修改哪些配置?能不能扩展?

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

2、SpringBoot对静态资源的映射规则

protected void addResourceHandlers(ResourceHandlerRegistry registry) {
    super.addResourceHandlers(registry);
    if (!this.resourceProperties.isAddMappings()) {
        logger.debug("Default resource handling disabled");
    } else {
        ServletContext servletContext = this.getServletContext();
        this.addResourceHandler(registry, "/webjars/**", "classpath:/META-INF/resources/webjars/");
        this.addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(), (registration) -> {
            registration.addResourceLocations(this.resourceProperties.getStaticLocations());
            if (servletContext != null) {
                registration.addResourceLocations(new Resource[]{new ServletContextResource(servletContext, "/")});
            }

        });
    }
}
  • 所有/webjars/**,都去classpath:/META-INF/resources/webjars/找资源;
    webjars:以jar包的方式引入静态资源
    https://www.webjars.org/
    在这里插入图片描述
    访问localhost:8080/webjars/jquery/3.3.1/jquery.js,就可以看到引入的jquery.js文件内容
<!--引入jquery-webjar-->在访问的时候只需要写webjars下面资源
<dependency>
	<groupId>org.webjars</groupId>
	<artifactId>jquery</artifactId>
	<version>3.3.1</version>
</dependency>
  • "/**"访问当前项目的任何资源(静态资源的文件夹)
"classpath:/META-INF/resources/"
"classpath:/resources/"
"classpath:/static/"
"classpath:/public/"
"/":当前项目的根路径
  • 欢迎页,静态资源文件夹下的所有index.html页面,被"/**"映射,localhost:8080/找index页面
  • 所有的**/favicon.ico都是在静态资源文件下找

3、模版引擎

  • 引入thymeleaf

JSP、Velocity、Freemarker、Thymeleaf
在这里插入图片描述
SpringBoot推荐的Thymeleaf;
语法更简单,功能更强大;

  • Thymeleaf使用&语法
@ConfigurationProperties(
    prefix = "spring.thymeleaf"
)
public class ThymeleafProperties {
    private static final Charset DEFAULT_ENCODING;
    public static final String DEFAULT_PREFIX = "classpath:/templates/";
    public static final String DEFAULT_SUFFIX = ".html";
    private boolean checkTemplate = true;
    private boolean checkTemplateLocation = true;
    private String prefix = "classpath:/templates/";
    private String suffix = ".html";
    private String mode = "HTML";
    //只要我们把HTML页面放在classpath:/templates/,thymeleaf就能自动渲染 

https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.pdf

点击连接可以下载thymeleaf的文档
1、导入thymeleaf的名称空间

<html lang="en" xmlns:th="http://www.thymeleaf.org">

2、使用thymeleaf的语法

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>成功!</h1>
    <!--th:text 将div里面的文本内容设置为-->
    <div th:text="${hello}"></div>
</body>
</html>

3、语法规则
th:text:改变当前元素里面的文本内容
th:任意html属性;来替换原生属性的值
在这里插入图片描述
表达式?表达式的使用可以在线或者下载文档参考使用,都有例子
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

@Controller
public class HelloController {

    @ResponseBody
    @RequestMapping("/hello")
    public String hello(){
        return "Hello World";
    }

    //查出一些数据,在页面展示
    @RequestMapping("/success")
    public String success(Map<String,Object> map){
        //classpath:/templates/success.html
        map.put("hello", "<h1>你好</h1>");
        map.put("users", Arrays.asList("zhangsan","lisi","wangwu"));
        return "success";
    }
}
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>成功!</h1>
    <!--th:text 将div里面的文本内容设置为-->
    <div th:text="${hello}"></div>
    <div th:utext="${hello}"></div>

    <h4 th:text="${user}" th:each="user : ${users}"></h4>
    <hr/>
    <h4>
        <span th:each="user : ${users}"> [[${user}]] </span>
    </h4>
</body>
</html>

4、SpringMVC自动配置
编写一个配置类(@Configuration),是WebMvcConfigurerAdapter类型,不能标注@EnableWebMvc;
既保留了所有的自动配置,也能用我们扩展的配置

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

原理:

  • WebMvcAutoConfiguration是SpringMVC的自动配置类
  • 在做其他自动配置时会导入@Import(EnableWebMvcConfiguration.class)
  • 容器中所有的WebMvcConfigurer都会一起起作用
  • 我们的配置类也会被调用

效果:SpringMVC的自动配置和我们的扩展配置都会起作用

全面接管SpringMVC
SpringBoot对SpringMVC的自动配置不需要了,所有都是我们自己配置,所有的SpringMVC的自动配置都失效了
我们需要在配置类中添加@EnableWebMvc即可

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

原理:
为什么@EnableWebMvc自动配置就失效了

  • @EnableWebMvc的核心
    @Import(DelegatingWebMvcConfiguration.class)
    public @interface EnableWebMvc{
    
  • 导入的DelegatingWebMvcConfiguration继承WebMvcConfigurationSupport
    @Configuration
    public class DelegatingWebMvcConfiguration extends WebMvcConfigurationSupport{
    
  • WebMvc自动配置判断容器中没有这个组件的时候,这个自动配置类才生效
    @Configuration
    @ConditionalOnWebApplication
    @ConditionalOnClass({Servlet.class,DispatcherServlet.class,WebMvcConfigurerAdapter.class})
    //容器中没有这个组件的时候,这个自动配置类才生效
    @ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
    @AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10)
    @AutoConfigureAfter({DispatcherServletAutoConfiguration.class,ValidationAutoConfiguration.class})
    public class WebMvcAutoConfiguration{
    

5、如何修改SpringBoot的默认配置
模式:

  • SpringBoot在自动配置很多组件的时候,先看容器中有没有用户自己配置的(@Bean、@Component)如果有就用用户配置的,如果没有,才自动配置;如果有些组件可以有多个(ViewResolver)将用户配置和自己默认的组合起来
  • 在SpringBoot中会有非常多的xxxxConfigurer帮助我们进行扩展配置
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值