RESTful请求映射及其原理
请求映射
rest的使用与原理
@xxxMapping;
Rest风格支持(使用 HTTP 请求方式动词来表示对资源的操作)
- 以前: /getUser 获取用户 /deleteUser 删除用户 /editUser 修改用户 /saveUser 保存用户
- 现在: /user GET-获取用户 DELETE-删除用户 PUT-修改用户 POST-保存用户
- 核心Filter;HiddenHttpMethodFilter
- 用法: 表单method=post,隐藏域 _method=put
- SpringBoot中手动开启
- 扩展:如何把_method 这个名字换成我们自己喜欢的。
基于表单提交的RESTful原理
- 表单提交会带上[_method = put]
- 请求过来会被HiddenHttpMethodFilter拦截
- 处理请求(如果请求正常,才会放行)
- 然后内部进行处理,判断是否有请求。然后将请求转换为大写
- (包装原生request)将原生的request转换成为HttpMethodRequestWrapper请求,然后HttpMethodRequestWrapper会重写HttpRequest的个体、Method 方法
在控制层请求发起的流程
在请求处理之前,需要先执行Filter。然后HiddenHttpMethodFilter将原生请求的getMethod重写了变成delete。 然后此时当进行请求的时候。getMethod已经变成了delete/put/,,,就与请求匹配了。
DispatcherServlet请求原理
- 他是处理所有请求的开始
- 他没有重写了doGet和doPost,在FrameworkServelt中调用了doGet和doPost。然后又调用了processRequest()。
- processRequest又调用类中的doService方法 。最终在DispacherSerlvet中做了doService的实现
- 在DispacherServlet中有一个doDisptch()就是请求转发。然后再doDisptch中才是一些真正有功能的我们需要的方法
- 所以说doDispach()才是每个请求都会调用的方法
1 | protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception { |
在doDispach()中有getHandler方法,他会找到我们此时调用需要找到的请求
在getHandler()方法中可以看到有个handerMappings 它会加载所有的请求(在应用启动的时候就会加载保存)
- 在HandlerMapping中保存的我们写的所有请求
- 在AbstractHandlerMethodMapping中有lookupHandlerMethod方法,在这个方法中我们才能匹配到所要找的请求
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Rayce. Blogs!
评论