前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RESTful请求映射及其原理

RESTful请求映射及其原理

作者头像
用户11097514
发布2024-05-30 17:28:44
720
发布2024-05-30 17:28:44
举报
文章被收录于专栏:技术分享技术分享

请求映射

rest的使用与原理
  • @xxxMapping;
  • Rest风格支持(使用 HTTP 请求方式动词来表示对资源的操作
    • 以前: /getUser 获取用户 /deleteUser 删除用户 /editUser 修改用户 /saveUser 保存用户
    • 现在: /user GET-获取用户 DELETE-删除用户 PUT-修改用户 POST-保存用户
    • 核心Filter;HiddenHttpMethodFilter
      • 用法: 表单method=post,隐藏域 _method=put
      • SpringBoot中手动开启
    • 扩展:如何把_method 这个名字换成我们自己喜欢的。
基于表单提交的RESTful原理
  1. 表单提交会带上[_method = put]
  2. 请求过来会被HiddenHttpMethodFilter拦截
  3. 处理请求(如果请求正常,才会放行)
  1. 然后内部进行处理,判断是否有请求。然后将请求转换为大写
  1. 包装原生request)将原生的request转换成为HttpMethodRequestWrapper请求,然后HttpMethodRequestWrapper会重写HttpRequest的个体、Method 方法
在控制层请求发起的流程

在请求处理之前,需要先执行Filter。然后HiddenHttpMethodFilter将原生请求的getMethod重写了变成delete。 然后此时当进行请求的时候。getMethod已经变成了delete/put/,,,就与请求匹配了。

DispatcherServlet请求原理
  1. 他是处理所有请求的开始
  2. 他没有重写了doGet和doPost,在FrameworkServelt中调用了doGet和doPost。然后又调用了processRequest()。
  3. processRequest又调用类中的doService方法 。最终在DispacherSerlvet中做了doService的实现
  4. 在DispacherServlet中有一个doDisptch()就是请求转发。然后再doDisptch中才是一些真正有功能的我们需要的方法
  1. 所以说doDispach()才是每个请求都会调用的方法
代码语言:javascript
复制
protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {
		HttpServletRequest processedRequest = request;
		HandlerExecutionChain mappedHandler = null;
		boolean multipartRequestParsed = false;

		WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(request);

		try {
			ModelAndView mv = null;
			Exception dispatchException = null;

			try {
				processedRequest = checkMultipart(request);
				multipartRequestParsed = (processedRequest != request);
	
				// 找到当前请求使用哪个Handler(Controller的方法)处理
				mappedHandler = getHandler(processedRequest);
                
                //HandlerMapping:处理器映射。/xxx->>xxxx

            
  1. 在doDispach()中有getHandler方法,他会找到我们此时调用需要找到的请求
  2. 在getHandler()方法中可以看到有个handerMappings 它会加载所有的请求(在应用启动的时候就会加载保存)
  1. 在HandlerMapping中保存的我们写的所有请求
  1. 在AbstractHandlerMethodMapping中有lookupHandlerMethod方法,在这个方法中我们才能匹配到所要找的请求
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-01-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 请求映射
    • rest的使用与原理
      • 基于表单提交的RESTful原理
        • 在控制层请求发起的流程
          • DispatcherServlet请求原理
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档