
1.静态资源规则与定制化
1.1静态资源目录
只要将静态资源放在类路径下: called /static (or /public or /resources or /META-INF/resources
便可以这样访问 : 当前项目根路径/ + 静态资源名(例如https://localhost/8080/资源名)
如果要改变静态资源的默认路径:只需在总配置文件中配置如下,便可将默认路径变为staticresources。

如果要改变静态资源所在的文件夹,可以如下配置,则指定在haha文件夹里的资源都是静态资源:

1.2welcome页:
静态资源路径下的index.html或controller处理index请求都会被当成welcome页
1.3Favicon:静态图标
将favicon.ico 放在静态资源目录下即可。

1.4静态资源配置原理
SpringMVC功能的自动配置类是WebMvcAutoConfiguration。
如下配置可以禁用所有静态资源。

1.5Rest映射及源码解析
想在SB中开启Rest的页面表单功能,必须在总配置文件中作如下声明:

Rest原理(表单提交要使用REST的时候):
表单提交会带上_method=PUT;
请求过来被HiddenHttpMethodFilter拦截;
请求是否正常,并且是POST;
获取到_method的值。;
兼容以下请求;PUT.DELETE.PATCH;
原生request(post),包装模式requesWrapper重写了getMethod方法,返回的是传入的值;
过滤器链放行的时候用wrapper。以后的方法调用getMethod是调用requesWrapper的。
Rest使用客户端工具
如PostMan直接发送Put、delete等方式请求,无需Filter。
1.6请求映射原理

SpringMVC功能分析都从 org.springframework.web.servlet.DispatcherServlet——>doDispatch()
所有的请求映射都在HandlerMapping中。
比如:SpringBoot自动配置欢迎页的 WelcomePageHandlerMapping 。访问 /能访问到index.html;
SpringBoot自动配置了默认 的 RequestMappingHandlerMapping
请求进来,挨个尝试所有的HandlerMapping看是否有请求信息。如果有就找到这个请求对应的handler,如果没有就是下一个 HandlerMapping。
我们需要一些自定义的映射处理,我们也可以自己给容器中放HandlerMapping。自定义 HandlerMapping
1.7Web场景常用的参数注解
顾名思义,参数注解就是在Controller里用在方法参数上的注解。
1.7.1@PathVariable:在Rest风格的url中,可以动态地来获取参数,例如下面图片所示:

在/car/{id}/owner/{username}这条网址中,id和username的获取是动态的,如果用户访问了car/3/owner/lsl,那么在这个Controller方法中,获取的id值便为3,username为lsl;

此外,@PathVariable还可以用一个Map<String,String>来获取所有的设置了此注解的参数及参数值。
1.7.2@RequestHeader:获取请求头
如图所示,第一行可以获取名为“User-Agent”的请求头内容,第二行的Map可以获取所有设置了此注解的参数内容。

1.7.3@RequestParam:获取url中的参数内容

如图所示,可以获取url中参数age的内容,比如用户访问/car/3/owner/lsl?age=18,Controller方法中便可以获得age参数的内容。@RequestParam中也可以通过一个Map获取所有设置了此注解的参数内容。
1.7.4@CookieValue:获取页面cookie的内容

如图所示,可以获取指定的内容,@CookieValue中也可以通过一个Map获取所有设置了此注解的参数内容。
1.7.5@RequestBody:获取请求体,用于表单提交

如图所示可以获取全部的提交的表单内容。
1.7.6@RequestAttribute:获取请求域中的信息。

如图所示,在/goto的cntroller中设置了attribute后,在跳转后的页面的controller中可以通过@RequestAttribute注解直接访问这些信息。
1.7.7@MatrixVariable:
需要先在配置类中进行如下配置,开启矩阵分析。

这样一来,通过如下的代码便可以读取这样一个url中分号后面的值:cars/sell;price=300000;brand=audi,显示如下面的第二张图。


1.8Web场景把前端提交的表单内容绑定到自定义类
如图1所示,在前端提交这样一个表单,在controller方法里面可以直接采用图2所示的方式将其绑定到我们所写的Person类,如图3所示。



此外,假设Person养了宠物,如下图1、2所示,则前端传输数据的时候需要级联,如图3所示。


