温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

springmvc 输入输出流程

发布时间:2020-07-23 00:40:06 来源:网络 阅读:337 作者:hgqxjj 栏目:开发技术

springmvc作用类似于struts,提供了一个servlet作为处理某些request的总入口,这个servlet就是dispatcherservlet,当server接到client端的request后进入后端容器的处理,比如tomcat,经过一番前期处理,通过web.xml中的mapping配置找到对应的servlet,如果用的是springmvc,则应该使用dispatcherservlet,所以就从这个servlet说起。

doService->doDispatch(最重要的一个方法),这个方法主要做了三件事,1.通过request的url、http方法等参数找到对应的handler(用于处理request)和拦截器链,2.对handler进行适配并执行handler的handle方法处理request。3.从第二步得到处理结果,根据结果创建并填充返回的文件然后返回给客户端。具体如下:

(注:springmvc里大量运用了策略模式)

第一件事的实现是首先springmvc会组织一个list来保存一些类(用于根据request的信息查找到对应的handler和拦截器链),之所以是一些而不是一个总的类是因为为了灵活, 用户可以自己定义实现了 HandlerMapping的类,加入list即可,如果用户不定义,系统默认会提供两个(BeanNameUrlHandlerMapping和RequestMappingHandlerMapping),以RequestMappingHandlerMapping为例,它维护了一个requestmapping信息和handler的一个map,在查找handler的过程中,首先是根据request里的信息找到最匹配requestmapping(有用户在定义类和方法以及参数时指定@requestmapping),然后通过requestmapping找到handler(包括要用到的类和对应的方法的信息),最后还要根据request的url信息找到对应的拦截器链,然后返回一个HandlerExecutionChain对象(包含了handler和拦截器链)。


第二件事首先是对handler进行适配,之所以用适配器是因为用户定义controller时可能会定义不止一种controller,比如实现了HttpRequestHandler的controller,实现了Controller的controller,自定义的controller,所以需要相应的适配器去适配成统一的接口(HandlerAdapter,这里以RequestMappingHandlerAdapter(用于自定义controller的适配)为例进行后续的分析),然后就开始调用handle方法处理request了,其实就是调用对应类的对应方法,调用方法第一件事就是得得到方法参数,其中包括1.request中的信息到方法参数的映射,2.他们之间类型的转换,3.格式化,4.验证。这里1是需要参数解析器的,这里的解析器可以自定义一些,如果不定义的话系统也会提供一些默认的,由argumentResolvers维护,除此之外返回值也可以进行映射,returnValueHandlers

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI