springmvc源码阅读笔记 --Object handler和request请求路径查询lookupPath

本文详细介绍了SpringMVC中处理request请求路径查询lookupPath的过程,包括查找contextPath、requestURI、Path和servletPath的步骤。通过对不同属性的检查和编码处理,确定最终的请求路径,以实现灵活的路径匹配策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Handler能干什么?
Handler是处理请求的核心业务对象,调用其方法可以处理请求响应。
spring定义的Object handler比较抽象,你能够想象的并且实现的都可以做。
Hanlder如果开发一个handler?
可以实现Controller,配置XML,使用@Controller,@RequestMapping注解类或方法
具体步骤看例子。
springIOC如何管理这些handler?
springIOC只认识bean对象,不认识handler bean,你可以通过你需要查找的handler特征,
来查询对应的bean来作为你的handler。
特征:比如:bean名称特征,bean的Class类型特征,或实现了接口的bean类型,或者包含了某个注解的bean,
或者包含了某个包名等等,这些条件是刷选bean的作为你认为bean的最好方式。
如何查询handler?
通过上面方式从IOC容器查询到的Bean对象,即handler对象集合,你可以根据各种条件来算出对应请求urlPath路径,

然后把urlPath路径和beanName放入到hash表中,如fianl map中,这样你可以通过map来查询对应的handler对象。


request请求路径查询lookupPath


查询请求的Path路径流程。
    当request请求过来,
    1,查找contextPath
     1)首先通过request.getAttribute("javax.servlet.include.context_path");查找contentPath
     如果为空,则代表不是include进来的请求即是一个顶级请求,    则通过request.getContextPath();来取得
     contextPath
     2)如果contextPath值为"/",则path路径为空字符串“”
     3)如果contextPath不为空,并且设置了编码(默认是进行编码)特殊字符的转码,则进行路径的编码工作,返回编码后的contextPath
    2.查找requestURI
     1)首先通过request.getAttribute("javax.servlet.include.request_uri");查找URI,
     如果为空,则代表不是include进来的请求是一个顶级请求,则通过request.getRequestURI();来取得URI。
     2)如果设置了清除requestUri中;分号的内容,则清除该内容(默认清除),如果设置为不清除,则只清除;jsessionid中的内容;
     3)如果URI不为空,并且设置了编码(默认是进行特殊字符的转码),则进行路径的编码工作,返回编码后的requestURI.
    3.查找Path
    通过contextPath和requestURI来查找Path,这个时候一般path都是null
    4.如果Path不为空,则返回path,否则就返回requestUri
    5.如果设置了查找全部uri匹配,则直接返回requestUri作为结果,默认false不查找全部。则执行6
    6.查找servletPath
     1)首先通过request.getAttribute("javax.servlet.include.servlet_path");查找servletPath
     如果为空,则代表不是include进来的请求即是一个顶级请求,    则通过request.getServletPath();来取得
     servletPath
     2)通过servletPath查找path,如果查询的path不为空,则返回path作为结果。
     3)如果path为空,则使用request.getPathInfo();来查询pathInfo,如果不为空则返回pathInfo作为结果。
     4)如果pathInfo为空,则返回servletPath作为结果。
从返回的结果看:可以是相对IOC容器或ServletContext的path,也可以是servlet中的requestUri或pathInfo,或者是全部的servletPath作为查找的请求path。
这些基于配置灵活控制。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值