tomcat如何把请求转发给spring容器处理

在StandardWrapperValve处理过程中,会做两件事:一件是执行ApplicationFilterChain.doFilter接口-过滤器执行;一件是执行业务逻辑接口servlet.service()。
spring下有个Servlet的子类FrameworkServlet,重写了service接口。所以当tomcat执行servlet.service()接口时,其实调用的是FrameworkServlet.service接口。

问题一:tomcat如何生成FrameworkServlet类的实例对象?
tomcat在创建Context容器(tomcat webapps下的应用,在tomcat运行期间,如果部署新的应用服务,tomcat会监控到Context容器发生了变化,会自动解压新部署的应用服务)
实例,会去找Context容器下的Wrapper容器,加载Servlet对象,通过StandardWrapper.allocate接口生成Servlet实例。

问题二:FrameworkServlet如何找到controller层的目标接口?
在FrameworkServlet.service方法里,当请求方式不等于HttpMethod.PATCH枚举类时,就会去执行DispatcherServlet.doDispatch方法。在DispatcherServlet.doDispatch方法里,
通过请求的URL,使用HandlerMapping映射关系找到对应的Handler(Controller类)以及拦截器(HandlerInterceptor),并封装成HandlerExecutionChain对象。
通过Handler找到对应的HandlerAdapter,默认controller层目标接口在RequestMappingHandlerAdapter.invokeHandlerMethod方法中执行,并返回ModelAndView对象。
InternalResourceViewResolver根据具体的前缀:/WEB-INF/view/,后缀.html,视图名:index,将ModelAndView对象解析成具体的数据填充到index.html中,返回给浏览器
展示。浏览器接收到的都是静态数据。

https://blog.csdn.net/u013212754/article/details/103490898

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值