SpringWeb Day_01

z

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所示。

图1
图2
图3

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

图1
图2
图3
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容