SpringBoot 与 Web开发(1)

在这里插入图片描述

  1. 创建SpringBoot 应用,选中我们需要的模块
    在这里插入图片描述

从autoconfigur 的jar 包中就能找到对应的配置文件配置:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2)选完以后,我们就能直接使用里面的模块了,因为SpringBoot 已经帮我们配置好了,所以我们直接在配置文件中进行相关配置,就能直接使用了。如果忘了相关模块的配置怎么写,可以去autuoconfigure jar 包下直接找对应的类,然后找到@EnableConfigurationProperties 这个注释,点进去就能看见相关配置怎么写了。

3)自己编写业务代码:
完成功能:完成一个Restful 风格的CURD ,利用Bootstrap 框架显示在页面上。
目前只需要web 模块
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

先看这一段:
在这里插入图片描述

翻译过来就是:所有 /webjars/** ,都去 classpath:/META-INF/resources/webjars/ 找资源;
这个webjars 是一个提供了一个包结构规范,然后里面还包含了很多我们想要的组件依赖的的一个包。
webjars 是以jar包的方式引入静态资源。通过这个网站:https://www.webjars.org/ 找到。
比如我们导入一个webjars 包结构的jquery 依赖:
在这里插入图片描述
按照SpringBoot 配置的webjars 的访问规则:我们要访问juqery 的资源(classpath:/META-INF/resources/webjars/) ,访问路径了就是:localhost:端口号/webjars/jquery/3.3.1/jquery.js
在这里插入图片描述

能访问到js 的资源:
在这里插入图片描述

以上我们访问SpringBoot 配置的静态资源访问形式,那如果使用我们自己写的静态资源,该如何访问?
点进:staticPathPattern
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
结合以上源码得出:
“/**” 访问当前项目的任何资源,都去(静态资源的文件夹)找映射
“classpath:/META‐INF/resources/” :可以在resources 中创建一个META‐INF 文件夹,里面还可以包含一个resources 目录,这是能访问到的,。
“classpath:/resources/”:resources 文件夹下还能再由一个resources,这是能访问到的,。
“classpath:/static/”,
“classpath:/public/” “/”:当前项目的根路径

在我们项目中,java 包下和resources 包下都是classpath: 的根路径
在这里插入图片描述

比如现在想访问一个asserts 文件下的静态资源:
在这里插入图片描述

注意:如果引入了webjars 依赖,那么要访问webjars 中的资源的话,路径就是/META-INF/resuorces/webjars/ 下找了
在这里插入图片描述
在这里插入图片描述

3)、欢迎页; 静态资源文件夹下的所有index.html页面;被"/**"映射;
在这里插入图片描述

在这里插入图片描述
比如我想访问index.html 首页:http://localhost:8080/index.html
在这里插入图片描述

4)、所有的 **/favicon.ico 都是在静态资源文件下找;
**/favicon.ico :这个是SpringBoot 用来定位图片资源的。即不用我们发送请求去访问这个图片资源,SpringBoot 会帮我们去找这个 /favicon.ico
可以通过spring.mvc.favicon.enabled= false; 来关闭这个功能。这个功能是默认开启的。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

当访问Index.html 时:
在这里插入图片描述

自定义SpringBoot 的静态资源路径:
在这里插入图片描述
在这里插入图片描述

模板引擎:
在这里插入图片描述

引入thymeleaf 依赖:
在这里插入图片描述

引入的thymeleaf 版本:2.1.6,有点低。那应该怎么更换版本呢?
在这里插入图片描述
换成3.0.9 版本的,这样就能覆盖掉之前引入的版本
布局功能的支持程序,thymeleaf 3主程序 适配layout2以上版本
thymeleaf2 适配 layout1
在这里插入图片描述

如何使用thymeleaf?
去到autofigure 包中查看相关配置:
在这里插入图片描述

在这里插入图片描述
可以看到:只要把页面写在templates 文件下,就能使用thymeleaf 功能。
在这里插入图片描述

要访问templates 文件下的success 页面
在这里插入图片描述
success 页面:
在这里插入图片描述

访问路径:http://localhost:8080/success
在这里插入图片描述

在要使用thymeleaf 页面上引入thymeleaf 的模板引擎:
在这里插入图片描述

简单模拟后端传输到thymeleaf 页面显示:
在这里插入图片描述
在这里插入图片描述

success 页面:
在这里插入图片描述

thymeleaf 语法规则:
thymeleaf 的语法遇到html 的语法,前者数据会覆盖后者数据
在这里插入图片描述

thymeleaf 属性的优先级(优先解析):
在这里插入图片描述

表达式:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

SprignMVC 自动配置原理:

  1. Spring MVC auto-configuration
    以下是SpringBoot对SpringMVC的默认配置:(WebMvcAutoConfiguration)
    Inclusion of ContentNegotiatingViewResolver and BeanNameViewResolver beans
    自动配置了ViewResolver(视图解析器:根据方法的返回值得到视图对象(View),视图对象决定如何 渲染(转发?重定向?))
    ContentNegotiatingViewResolver:组合所有的视图解析器的;
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
ContentNegotiatingViewResolver:组合所有的视图解析器的;
视图解析器从哪来?
从BeanFactoryUtils 中获取到所有的ViewResolver。所以如果我们想自定义视图解析器,我们就可以往BeanFactoryUtils (即容器中)添加视图解析器,ContentNegotiatingViewResolver 就会拿到所有的视图解析器并作用。
在这里插入图片描述

自定义视图解析器,并加入到容器中
在这里插入图片描述

验证自定义视图解析器是否有加入到容器中,去DispatcherServlet 中看,这个类是所有请求一进来,都由它来转发。
在这里插入图片描述

让项目运行,然后前端发送一个请求。
在这里插入图片描述

Support for serving static resources, including support for WebJars (see below).静态资源文件夹路 径,webjars
Static index.html support. 静态首页访问
Custom Favicon support (see below). favicon.ico
自动注册了 Converter , GenericConverter , Formatter beans

Converter:转换器; public String hello(User user):前端数据传来,要数据类型要转换成后端数据类型,类型转换使用Converter

Formatter 格式化器; 2017.12.17===Date;
如果在配置文件中date-format 属性进行格式设置的话,那Formatter 才能生效。
在这里插入图片描述
把生成的Formatter 注入到容器中。
在这里插入图片描述

Support for HttpMessageConverters (see below)
HttpMessageConverter:SpringMVC用来转换Http请求和响应的;User—Json;
自己给容器中添加HttpMessageConverter,只需要将自己的组件注册容器中 (@Bean,@Component)
在这里插入图片描述

Automatic registration of MessageCodesResolver (see below).定义错误代码生成规则

Automatic use of a ConfigurableWebBindingInitializer bean (see below). 我们可以配置一个ConfigurableWebBindingInitializer来替换默认的;(添加到容器)。ConfigurableWebBindingInitializer :用来绑定请求数据和JavaBean 之间的数据,之间的数据类型转换,格式化都会用到上面的Converter,和Formatter组件
在这里插入图片描述

在这里插入图片描述

2、扩展SpringMVC
以前SpringMVC 的配置文件
在这里插入图片描述
编写一个配置类(@Configuration),是WebMvcConfigurerAdapter类型;不能标注@EnableWebMvc;
既保留了所有的自动配置,也能用我们扩展的配置;

在这里插入图片描述

原理:
在WebMvcAutoConfiguration 中,有一个内部类:WebMvcAutoConfigurationAdapter。这个类就继承了WebMvcConfigurerAdapter,然后SpringBoot 就会实现它的一些方法。
在这里插入图片描述

在做其他自动配置时会导入:@Import(EnableWebMvcConfiguration.class)
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
把所有的WebMvcConfigurer 都拿来加到容器中。
在这里插入图片描述
3)、容器中所有的WebMvcConfigurer都会一起起作用;
4)、我们的配置类也会被调用; 效果:SpringMVC的自动配置和我们的扩展配置都会起作用;

3、全面接管SpringMVC;
SpringBoot对SpringMVC的自动配置不需要了,所有都是我们自己配置;所有的SpringMVC的自动配置都失效了(连静态资源都访问不了) 我们需要在配置类中添加@EnableWebMvc即可;

在这里插入图片描述
原理:
为什么@EnableWebMvc自动配置就失效了;
点进@EnableWebMvc
在这里插入图片描述

在这里插入图片描述

再看WebMvcAutoConfiguration:
在这里插入图片描述

4)、@EnableWebMvc将WebMvcConfigurationSupport组件导入进来;
5)、导入的WebMvcConfigurationSupport只是SpringMVC最基本的功能;

5、如何修改SpringBoot的默认配置
模式: 1)、SpringBoot在自动配置很多组件的时候,先看容器中有没有用户自己配置的(@Bean、@Component)如 果有就用用户配置的,如果没有,才自动配置;如果有些组件可以有多个(ViewResolver)将用户配置的和自己默 认的组合起来;

2)、在SpringBoot中会有非常多的xxxConfigurer帮助我们进行扩展配置

在开发时,使用到thymeleaf 渲染的页面不要放在static 文件夹下,SpringBoot 不会帮你渲染的,要放在templates 下。

6)RestfulCRUD
项目一启动,就访问到templates 文件夹下的index 页面

在Controller 中让方法直接返回一个字符串,就会得到thymeleaf 引擎的解析,就回去templates 文件夹下找index.html页面。
在这里插入图片描述
但是每次都只是为一次简单请求就写一个Controller 空方法,这很浪费资源,那么可以用快捷的方法:
可以把所有的路径映射都放在一个WebMvcConfigurerAdapter 中,也可以肯定不同的请求页面,创建不同的WebMvcConfigurerAdapter ,再放到容器中。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

首页的Bootstrap 引用:因为发送了请求访问了/webjars/ ,所以SpringBoot 就会转发到/META-INF/resources/webjars/ 下的路径,再拼接我们后面写的路径,就是正确的资源访问路径了。
在这里插入图片描述

用@{/,} 来进行项目资源定位的好处:如果我们该了项目访问路径,那么我们在浏览器访问项目时就要加上/crud ,但@{}会帮我们自动识别这个路径,然后帮我们加上。
在这里插入图片描述
在这里插入图片描述

国际化:通过在浏览器设置的语言信息,来动态显示页面的语言效果
以前用SpringMVC 的配置步骤:
在这里插入图片描述

1、编写国际化配置文件夹:
当你创建国际化资源文件时,比如你创建了login_zh_CN.properties ,idea 会识别出你要做国际化,然后就会弹出一个文件夹"Resource Bundle ‘login’"。下一次创建国际化资源文件时,
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在创建另一个国际化资源文件时,只需要写上特殊的语言标识,idea 就会自动的帮你创建同类型的文件
在这里插入图片描述
在这里插入图片描述
在登录页面中,需要国际化的地方是:Please sign in, Username,Password,remember me。这四个地方
在这里插入图片描述

随便点一个资源文件
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

以上国际化资源文件就配置好了。记住国际化资源文件的命名规则:zh_CN 是中文。en_US 是英文

SpringBoot 自动配好了管理国际化资源文件的组件:
在这里插入图片描述

这里要拿到国际化资源文件的名称。
在这里插入图片描述
Springboot 默认帮我们起的名就叫message,所以如果我们配置的资源文件叫message.properties 的话,直接放在类路径下,就能直接使用了。
在这里插入图片描述

现在我们放在了i18n 文件夹下的login 文件中(只需要写资源文件的基础名就行,en_CN 它会帮我们自动识别这些文件的)

在这里插入图片描述

现在就可以在页面使用这个功能了。因为用的是thymeleaf 模板引擎,所以要遵守thymeleaf 的使用规则来使用:
在这里插入图片描述

只要用#{},来取出在资源文件中配置的语言规则,就能使用了。

出现乱码:
在这里插入图片描述
要把idea 中的中文进行编码,编成ascii
在这里插入图片描述
在这里插入图片描述

设置idea 其他Project 都使用这个编码:
在这里插入图片描述

设置页面语言信息:
在这里插入图片描述

在这里插入图片描述

实现功能:
当点击页面的“中文”,页面就显示中文信息。当点击"English",页面就显示英文信息。
在这里插入图片描述
SpringBoot 之所以能通过浏览器不同的信息切换国际化,原理:
国际化Locale(区域信息对象);LocaleResolver(获取区域信息对象);
在这里插入图片描述

在这里插入图片描述
默认的就是根据请求头带来的区域信息获取Locale进行国际化。如果我们要实现点击连接切换国际化,那么我们就得覆盖SpringBoot 的默认接收Locale 信息的方法。自定义一个接受Locale 的方法。
在这里插入图片描述
请求头中的语言信息
在这里插入图片描述
自定义LocalResolver
在这里插入图片描述

geDefault() :如果发送请求什么都不带,就默认用操作系统的语言设置

添加到容器中:
看源码,当我们往容器中加一个自定义的LocaleResolver 时,SpringBoot 给我们默认的LocaleResolver 就会失效:
在这里插入图片描述

所以我们就在配置类中加入自定义组件即可:
在这里插入图片描述

完成登录功能: 从登录页面到dashborad 页面
在这里插入图片描述

解决表单重复提交问题:
将请求转发变成请求重定向
但是重定向的数据又要经过thymeleaf 的渲染,即经过SpringBoot 的SpringMvc 层面,所以就要在MVC 适配器中添加重定向的路径,然后添加对应的页面。
在这里插入图片描述

在这里插入图片描述

但是又有一个问题,就是如果我们直接发送/main.html 请求,也能直接跳到dashboard 页面,那登录页面不是没用了么,所以得用一个拦截器。

public class LoginHandlerInterceptor implements HandlerInterceptor {

    /**
     * 目标方法执行之前
     * @param
     * @param
     * @param o
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {

        HttpSession session = request.getSession();
        Object user = session.getAttribute("loginUser");
        if (user == null){
            //未登录,利用request 的转发器返回登录页面
            request.setAttribute("msg","没有权限,请先登录");
            request.getRequestDispatcher("/index.html").forward(request,response);

            return false;
        }else{
            //已登录,放行请求
            return true;
        }
    }

把拦截器注入到SpringMVC 中
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值