springBoot-springmvc自动配置

一.简单功能分析

1.1静态资源访问:

以前我们使用ssm作为框架开发web项目时,可以把静态资源放在webapp下,当我们访问的时候,就可以直接访问我们的静态资源了,但是我们的springboot框架,是一个jar项目,并没有webapp目录,所以我们探究下springboot的静态资源放在哪里

  • 静态资源可以放在:
  1. /static目录下
  2. /public目录下
  3. /resources目录下
  4. /META-INF/resources
    只要放在这几个目录下的静态资源,我们可以直接使用:
    当前项目根路径/+静态资源名即可访问

原理:
会拦截/**的请求,请求进来,先查看我们的Controller是否能处理,能处理就直接处理了,不能处理,则把所有的请求交给静态资源处理器,如果静态资源处理器也不能处理,那么就404

改变默认的静态资源路径

#修改静态资源的访问路径,此时的访问路径为:
#项目根路径/+static-path-pattern+/静态资源名访问
spring:
  mvc:
    static-path-pattern: /res/**

#这个也是spring下的,修改默认的静态资源目录,此时静态资源就
#不能放在上边默认的四个目录中了,只能放在我们修改后的haha目录下
  resources:
    static-locations: [classpath:/haha/]
  • 另外一种方式(webjars)现在已经不会再用了

webjars的使用方式:
1.去:www.webjars.org找到我们要导入的静态资源的maven坐标
2.在pom.xml文件中导入
3.下载静态资源到工程中
4.访问方式:项目根路径/+webjars/+依赖的包路径
这种方式一般我们不会用

1.2首页默认访问

springboot已经为我们设置好了首页的访问方式,只需要把我们的首页(名字必须是index.html结尾\index)放入到静态资源的目录下即可,springboot会自动找index.html作为我们的首页,我们只需要访问项目根路径,出现首页

  1. 设置index,html

只需要把index.html放入到静态资源目录即可
可以设置默认的静态资源目录,但是不可以配置静态资源的访问路径前缀,因为底层springboot已经帮我们写死了接收/**的请求路径了

  1. 设置index

设置一个controller中有一个mapping可以映射到index,作为跳转首页的处理器即可

自定义Favicon

favicon.ico 放在静态资源目录下即可。可以设置默认的静态资源目录,但是不可以配置静态资源的访问路径前缀。前台发送的请求也是不带前缀的。

表单提交REST风格路径

我们知道servlter默认支持了GET\POST\DELETE\PUT格式的请求方式,而我们的rest风格则正好对应了这几个方式,做不同的操作。但是springboot默认只开启了get、post这两种方式的表单提交,delete和put请求则被取消了。

解决方法:

  1. 在我们提交的的form表单里面,如果使用get、post则正常使用,如果使用delete和put请求,则form表单的method必须为post,再在表单中建立一个隐藏域,name为’_method’,value为’delete\put’。
  2. 开启springboot的页面提交表单的rest功能。
    即可使用rest风格的delete和put方式了。

前台提交代码

<form action="/user" method="get">
    <input value="get提交" type="submit">
</form>
<form action="/user" method="post">
    <input value="post提交" type="submit">
</form>
<!--这里的method必须为post-->
<form action="/user" method="post">
	<!--添加一个隐藏域-->
    <input type="hidden" name="_method" value="delete">
    <input value="delete提交" type="submit">
</form>
<form action="/user" method="post">
    <input type="hidden" name="_method" value="put">
    <input value="put提交" type="submit">
</form>

配置文件:

#开启页面表单的Rest功能
spring:
  mvc:
    hiddenmethod:
      filter:
        enabled: true

Rest原理(表单提交要使用REST的时候)

• 表单提交会带上_method=PUT
• 请求过来被HiddenHttpMethodFilter拦截PUT.DELETE.PATCH
也就是我们提交的表单中带有一个叫’_method=xxx’的请求,springboot获
取这个请求的时候,会被HiddenHttpMethodFilter拦截,获取到_method的
参数,然后使用包装模式,把我们原有的request中的post方式,替换为我
们_method中的值的方式,就可以在我们的控制器中使用xxx进行映射。
注意:一定要手动开启springboot的rest功能,否则不能使用,还会默认使用post请求(因为我们的原本request中就是post请求)。

Rest使用客户端工具

如PostMan直接发送Put、delete等方式请求,无需Filter。

springboot接收参数

1.1 注解

  • @PathVariable、 适用于rest风格传递参数
    在这里插入图片描述

  • @RequestHeader、适用于接收请求头信息
    在这里插入图片描述

  • @RequestParam、 适用于接收普通传递参数
    在这里插入图片描述

  • @MatrixVariable、 接收矩阵变量

矩阵变量:语法: 请求路径:/cars/sell;low=34;brand=byd,audi,yd
;号后面的都是携带的参数
SpringBoot默认是禁用了矩阵变量的功能
矩阵变量必须有url路径变量才能被解析,也就是必须和rest结合使用

在这里插入图片描述
配置springboot的矩阵变量功能:

@Configuration
public class MyConfig implements WebMvcConfigurer {
    
    

    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
    
    
        //获取到UrlPathHelper
        UrlPathHelper urlPathHelper=new UrlPathHelper();
        //把:删除路径中;后面的值去除掉变为false
        //为true,就变为下面的:
        //例如:localhost:8080/car;id=1/sall  ->  localhost:8080/car/sall
        urlPathHelper.setRemoveSemicolonContent(false);
        configurer.setUrlPathHelper(urlPathHelper);
    }
}
  • @CookieValue、 接收cookie参数

和ssm一样,获取cookie,写上就能用

  • @RequestBody 接收请求体参数

一般使用于post请求,post请求的参数会在请求体中,可以使用这个方式,获取请求体的内容。
注意:post的方式提交form表单,请求体中的数据是’key=value&key1=value…'的方式,使用这个注解,则是获取到整个的请求体内容。

1.2 servlet api:

  • WebRequest、
  • ServletRequest
  • MultipartRequest、
  • HttpSessionInputStream、
  • Reader

ServletRequestMethodArgumentResolver 以上的部分参数

1.3复杂参数:

  • Map、
  • Model(map、model里面的数据会被放在request的请求域 request.setAttribute)、
  • Errors/BindingResult、
  • RedirectAttributes( 重定向携带数据)、
  • ServletResponse(response)

1.4 自定义类型:

只要我们的参数和我们自定义类型的类的属性一致时,会自动的封装进我们的自定义类里面,我们还可以进行级联封装(前台传递参数也要级联。例如:user下的pet对象传值。pet.name即可)

##暂时这么多,后面学习了在记笔记

猜你喜欢

转载自blog.csdn.net/weixin_43431123/article/details/112852803