SpringBoot2基础学习(四)

SpringBoot2核心技术-核心功能(Web开发)

Web开发

深入Web原理

  • SpringMVC自动配置概览
  • 简单功能分析
  • 请求参数处理
  • 数据响应与内容协商
  • 视图解析与模板引擎
  • 拦截器
  • 跨域
  • 异常处理
  • 原生Servlet组件
  • 嵌入式Web容器
  • 定制化原理
SpringMVC自动配置概览
  1. 内容协商视图解析器和BeanName视图解析器
  2. 静态资源(resources下的static)
  3. 自动注册Converter,GenericConverter,Formatter(往SpringMVC里提交的日期什么的格式可以自动格式化)
  4. 支持HttpMessageConverters(配合内容协商理解原理)
  5. 自动注册MessageCodesResolver(国际化用)
  6. 静态index.html页支持(静态欢迎页放到指定位置自动识别)
  7. 自定义Favicon(网站标签页的小图标可以进行自定义)
  8. 自动使用ConfigurableWebBindingInitializer(DataBinder负责将请求数据绑定到JavaBean上)
静态资源目录

静态资源只要放到类路径下的static,public,resources,META-INF/resources都可以访问到

访问:当前项目根路径/+静态资源名

原理: 静态映射/**,请求进来先去找Controller看能不能处理,不能处理的所有请求又都交给静态资源处理器,静态资源能找到,就访问,静态资源找不到就返回404

静态资源访问前缀

静态资源访问默认是无前缀的 => /** 让他有前缀要

spring: 
  mvc:
    static-path-pattern: /recources/**

当前项目+static-path-pattern+静态资源名

上面的static,public,resources,META-INF/resources这四个文件夹官方给定义的可以存放静态资源的目录,那我们想把静态资源存放的位置不放在这四个目录下呢?

spring: 
  mvc: 
    static-location: [classpath:/mulu/]
    #这样存放静态文件的目录就改变了,放到了mulu这个文件夹下
webjar

像jqurey样的文件,我们导入项目时可能有些麻烦我们就可以使用webjar,它把包变成了依赖可以让我们进行引入

<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>jqurey</artifactId>
    <version>3.5.1</version>
</dependency>
<!-- 这样我们就成功的引入了jquery,那我们对jquery进行使用就跟上面的静态文件访问是一样的了,但是格式是webjars/jqurey/.. -->
欢迎页
  1. 在静态文件夹下放index.html,就会当成欢迎页(必须是index.html)
    • 但是如果在yaml中配置了静态资源访问的前缀的话,我们就无法访问到index了
  2. 写了一个contrller能处理index请求,最终返回的也是index页面
页面的小图标

小图标图片的名字必须是favicon.ico,放到项目的静态文件中就可以了,这个使用也不能设置静态资源访问的前缀

SpringMVC的配置源码在spring-boot-autoconfigure/web/servclet/WebMvcAutoConfiguration

@ConditionalOnMissingBean({WebMvcConfigurationSupport.class}) //全面接管SpringMVC配置要有WebMvcConfigurationSupport这个类,全部由我们自己配置

扩展

  1. 一个配置类中只有一个有参构造器
    • 参构造器所有参数的值都会从容器中确定
请求参数处理
请求映射

rest使用和原理

  • @xxxMapping:
  • Rest风格支持(使用HTTP请求方式动词来表示对资源的操作,表单提交)
    • POST(增),DELETE(删),PUT(改),GET(查)
    • 核心Filter:HiddenHTTPMethodFilter
      • 用法:表单method=post,隐藏域_method=put
      • 在配置文件中手动开启Rest风格
<form>
	<input name="_method" type="hidden" value="DELETE"/>
</form>
mvc:
  hiddenmethod:
    filter:
      enabled:true

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

  • 表单提交会带上_method=PUT
  • 请求过来被HiddenHttpMethodFilter拦截
    • 请求是否正常,并且是POST
      • 获取到_method的值
      • 兼容PUT,DELETE,PATCH请求
      • 原生request(post),包装模式requestWrapper重写了getMethod方法,返回的是传入的值
      • 过滤器链放行的时候用wrapper,以后的方法调用getMethod是调用requestWrapper的

SpringMVC接受的注解

@PathVariable(获取路径上的变量)

@RequestMapping("/user/{id}")
public string demo(@PathVariable("id") Integet id){}

@RequestHaeader(获取请求头信息)

@RequestParam(获取请求参数)

@CookieValue(获取cookie值)

@RequestBody(获取请求体)

@RequestAttribute(获取request域属性)(请求转发forward到另一个页面,获取request域中的数据,就可以使用@RequestAttribute)

@MatrixVariable(矩阵变量)

/cars/{path}?xxx=xxx&aaa=ccc	qureyString查询字符串@RequestParam
/cars/{path;low=34;brand=byd,aidi,yd}	矩阵变量
页面开发,cookie禁用了,session里面的内容怎么使用:
session.set(a,b) ---> jsessionid ---> cookie ---> 每次发请求携带
url重写: /abc;jsessionid=xxxx 把cookie的值使用矩阵变量的方式进行传递
SpringBoot默认禁用了矩阵变量的功能手动开启
RequestMappingHandlerAdapter	//支持方法上标注@RequestMapiing
HandlerFunctionAdapter	//支持函数式编程
HttpRequestHandlerAdapter	//
SimpleControllerHandlerAdapter	//

SpringMVC目标方法能写多少种参数类型,取决于参数解析器

(源码课程太多了,有些看不懂,先进行一个实践学习,然后在进行源码学习)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值