IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> SpringBoot Web开发 -> 正文阅读

[Java知识库]SpringBoot Web开发

自动装配

springboot到底帮我们配置了什么?我们能不能进行修改?能修改那些东西?
能不能扩展?

  • xxxAutoConfigruation… 向容器中自动配置组件
  • xxxProperties:自动配置类,装配配置文件中自定义一些内容

要解决的问题:

  • 导入静态资源,…
  • 首页
  • jsp、模板引擎Thymeleaf
  • 装配扩展springMvc
  • 增删改查
  • 拦截器
  • 国际化!

静态资源探究

public: 一般放公共资源
static:一般放静态资源,图片这些
resources:一般放acloud上传的包

        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            if (!this.resourceProperties.isAddMappings()) {
                logger.debug("Default resource handling disabled");//这是自定义路径,只要自定义了默认的路径就会失效
            } else {
                this.addResourceHandler(registry, "/webjars/**", "classpath:/META-INF/resources/webjars/");
                this.addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(), (registration) -> {
                    registration.addResourceLocations(this.resourceProperties.getStaticLocations());
                    if (this.servletContext != null) {
                        ServletContextResource resource = new ServletContextResource(this.servletContext, "/");
                        registration.addResourceLocations(new Resource[]{resource});
                    }

                });
            }
        }

这就是自定义路径的参数,要自定义了默认的路径就会失效,所以我们不推荐自定义路径

spring:
  mvc:
    static-path-pattern: /hello/

通过以上源码我们可以得出结论:
1、在springbbot,我们可以使用以下方式处理静态资源

  • webjars localhost:8080/webjars/
  • public、static、/**、resources localhost:8080/

2.优先级:resources > static(默认) > public

首页和图标定制

图标(favicon.ico)定制在springboot2.20 的时候已经被删除了

thymeleaf模板

在这里插入图片描述

模板引擎的作用就是我们来写一个页面模板,比如有些值呢,是动态的,我们写一些表达式。而这些值,从哪来呢,我们来组装一些数据,我们把这些数据找到。然后把这个模板和这个数据交给我们模板引擎,模板引擎按照我们这个数据帮你把这表达式解析、填充到我们指定的位置,然后把这个数据最终生成一个我们想要的内容给我们写出去,这就是我们这个模板引擎,不管是jsp还是其他模板引擎,都是这个思想。只不过呢,就是说不同模板引擎之间,他们可能这个语法有点不一样。其他的我就不介绍了,我主要来介绍一下SpringBoot给我们推荐的Thymeleaf模板引擎,这模板引擎呢,是一个高级语言的模板引擎,他的这个语法更简单。而且呢,功能更强大。

我们呢,就来看一下这个模板引擎,那既然要看这个模板引擎。首先,我们来看SpringBoot里边怎么用。

第一步:引入thymeleaf,怎么引入呢,对于springboot来说,什么事情不都是一个start的事情嘛,我们去在项目中引入一下。给大家三个网址:
1、Thymeleaf官网:https://www.thymeleaf.org/
2、Thymeleaf在Github的主页:https:/github.com/thymeleaf/thymeleaf
3、Spring官方文档:“https://docs.spring.io/spring-boot/docs/2.6.0-SNAPSHOT/reference/htmlsingle/#using.build-systems.starters",找到我们对应的版本

依赖:

 <!--Thymeleaf,我们都是3.x开发,如果是2.x直接报错-->
 <dependency>
     <groupId>org.thymeleaf</groupId>
     <artifactId>thymeleaf-spring5</artifactId>
 </dependency>
 <dependency>
     <groupId>org.thymeleaf.extras</groupId>
     <artifactId>thymeleaf-extras-java8time</artifactId>
 </dependency>

通过maven 下好的jar包
在这里插入图片描述
结论:只要需要使用thymeleaf,只需要导入对应的依赖就可以了。
在这里插入图片描述
我们通过源码可以发现,使用thymeleaf模板,路径是在"classpath:/templates/"这个路径下,后缀是以.html结尾的,我们将html放在我们的templates目录下
在这里插入图片描述

在这里插入图片描述
IndexController组件:

//在templates目录下的所有页面,只有通过controller来跳转
@Controller
public class IndexController {
    @RequestMapping("/test")
    public String index(Model model) {
        model.addAttribute("msg","hello,springboot");
        return "test";
    }

}

test.html

<!doctype html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
<!--所有的html元素都可以被thymeleaf替换接管:th:元素名-->
<div th:text="${msg}"></div>
</body>
</html>

执行结果:
在这里插入图片描述

SpringMVC自动配置

在进行测试前,我们还需要知道一个东西,就是SpringBoot对我们的SpringMVC还做了哪些配置,包括如何扩展,如何定制。只有把这些都搞清楚了,我们在之后使用才会更加得心应手。
途径一:源码分析
途径二:官方文档
地址:https://docs.spring.io/spring-boot/docs/2.6.0-SNAPSHOT/reference/htmlsingle/#web.servlet.spring-mvc.auto-configuration

在这里插入图片描述

  • 引入ContentNegotiatingViewResolver和BeanNameViewResolver beans。
  • 对静态资源的支持,包括对WebJars的支持。
  • 自动注册Converter,GenericConverter,Formatter beans。
  • 对HttpMessageConverters的支持。
  • 自动注册MessageCodeResolver。
  • 对静态index.html的支持。
  • 对自定义Favicon的支持。
  • 字段使用 ConfigurableWebBindingInitializer bean
    注意点(重点结论):
    (1)自动配置了ViewResolver(视图解析器:根据方法的返回值得到视图对象(View),视图对象决定如何渲染(是转发还是重定向)页面);
    (2)ContentNegotiatingViewResolver:组合所有的视图解析器的;
    (3)如何定制自己的视图解析器?我们可以自己给容器中添加一个视图解析器,SpringBoot会自动的将其组合进来;因为从源码分析可以返现ContentNegotiatingViewResolver所组合的视图解析器都是从容器中获取的。

在这里插入图片描述
如果你想定制化的功能,只要卸这个组件,然后将它交给springbboot,springboot它就会帮我们自动装配

//全面扩展springMvc
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
    //ViewResolver 实现了视图解析器接口的类,我们就可以把它看做视图解析器
    @Bean
    public ViewResolver myViewResolver() {
        return new MyViewResolver();
    }

    //自定义了一个自己的视图解析器MyViewResolver
    public static class MyViewResolver implements ViewResolver {

        @Override
        public View resolveViewName(String s, Locale locale) throws Exception {
            return null;
        }
    }
}

格式化转换器

我们以日期格式举例,我们可以看出在源码中默认的日期格式:
在这里插入图片描述

修改SpringBoot的默认配置

方式一
这么多的自动配置,原理都是一样的,通过这个WebMVC的自动配置原理分析,我们要学会一种学习方式,通过源码探究,得出结论;这个结论一定是属于自己的,而且一通百通。

SpringBoot的底层,大量用到了这些设计细节思想,所以,没事需要多阅读源码!得出结论;

SpringBoot在自动配置很多组件的时候,先看容器中有没有用户自己配置的(如果用户自己配置@bean),如果有就用用户配置的,如果没有就用自动配置的;如果有些组件可以存在多个,比如我们的视图解析器,就将用户配置的和自己默认的组合起来!

扩展使用Spring Mvc

我们要做的就是编写一个@Configuration注解类,并且类型要为WebMvcConfigurer,还不能标注@EnableWebMvc注解;我们去自己写一个;

我们新建一个包叫config,写一个类MyMvcConfig;
在这里插入图片描述

在springboot中,有非常多的xxxConfiguration 帮助我们进行扩展配置,只要看见了这个东西,我们就要注意了!

按官方的说法,@EnableWebMvc表示完全自己控制mvc配置,也就是说所有配置自己重写,所有默认配置都没了!有时会导致很多请求进不来,或者参数转换出错之类的,因为spring mvc默认的转换器已经不生效了。

//如果我们要扩展springmvc,官方建议我们这样去做
@Configuration
//@EnableWebMvc //这个注解就是导入一个类,DelegatingWebMvcConfiguration:从容器中获取所有的webmvcconfig
              //只要导入了这个注解,所有的自动配置
public class MyMvcConfig implements WebMvcConfigurer {
    //视图跳转
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/acoffee").setViewName("test");
    }
}

官方文档译文:如果你想保持那些Spring Boot MVC定制,并进行更多的MVC定制(拦截器、格式化器、视图控制器和其他特性),你可以添加你自己的@Configuration类,类型为WebMvcConfigurer,但不需要@EnableWebMvc。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-05 17:11:57  更:2021-08-05 17:15:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/12 7:50:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码