赞
踩
客户端:请求资源URL,web.xml中<servlet-mapping>标签<url-pattern>匹配请求资源
如果匹配到就调用对应的<servlet-name>中对应的servlet 通过<servlet-class>创建servlet对象dispatcherservlet
执行初始化方法通过set方法注入初始化属性值
classpath:spring-configs.xml,通过读取这个配置文件,创建出由spring管理的bean对象handlermapping处理映射,通过property标签实现set注入mapping的值,并将处理的结果以map集合的形式返还给dispatcherservlet,map集合中key为请求URL中/请求资源的名字,value对应业务层自己实现的controller对象,与要创建此对象的bean标签中id或name的属性值对应。dispatcherservlet将请求的URL交给业务层处理
问题:不同对象间获取request域中携带的参数是转发还是包含?
controller对象处理过后返回modelandview对象,交给viewresolver解析,视图解析器做的工作是从mv对象解析出要响应的资源,前缀+名字+后缀组成响应资源的地址,最终呈现给客户端,一次请求结束。
思考:在这一次请求中,request只创建一次且一直在整个请求链中存在并共享数据,直到一次请求结束才销毁request和response对象。
.do是个请求,这个站点在web.xml配置文件中配置了.do的请求都转发给一个servlet来处理,不是个文件,系统遇到这个.do的请求
后就会提交给某个servlet来处理,这个servlet会根据具体的配置转发给某个后台的程序进行数据处理,然后给数据传递到页面,最终给页面展现在
用户面前,不一定是struts的,这个请求是可以自己随便配置的,你可以配置成.html,这样就是经常看到假静态
@concroller是在告诉spring当前类为业务处理类
@service请求服务
@respontiry持久层
@compoent组件类
---------------------------------------------------------------------
以下内容摘抄自JAVA API中的源代码:
今天来探索SpringMVC一次请求过程的源码,首先需要找到程序运行的类及主要方法:
我们使用StringMVC首先需要在web.xml中设置一个前端控制器来处理请求,这个前端控制器是:org.springframework.web.servlet.DispatcherServlet
那么我们程序运行的入口就在这里。
从这里可以看出前端控制器是一个Servlet,我们寻找他的service方法,在DispatherServlet中并没有找到service方法,在其父类FrameworkServlet中找到service方法。如下:
FrameworkServlet:
通过processedRequest,决定使用哪个handler来处理请求
调用本类的processDispatchResult方法
DispatcherServlet.doDispatch (请求第一次处理、所有的请求都会执行这个方法。在这个方法中请求会被解析、分发。)-->
WebAsyncUtils.getAsyncManager (request中创建一个属性WebAsyncManager)-->
DispatcherServlet.checkMultipart (request是否是多文件类的请求)-->
DispatcherServlet.getHandler (获得当前requst的处理handler–spring提供了两个RequestMappingHandlerMapping、BeanNameUrlHandlerMapping)-->
AbstractHandlerMapping.getHandler (获得当前requst的处理handler)-->
AbstractHandlerMapping.getHandlerExecutionChain-->
UrlPathHelper.getLookupPathForRequest-->
DispatcherServlet.getHandlerAdapter (获得当前requst的处理handlerAdapter–spring提供了两个RequestMappingHandlerAdapter、HttpRequestHandlerAdapter、SimpleControllerHandlerAdapter)-->
HandlerExecutionChain.applyPreHandle (处理拦截器)-->
AbstractHandlerMethodAdapter.handle (开始处理该请求)-->
RequestMappingHandlerAdapter.handleInternal (跳转至方法)-->
WebContentGenerator.checkRequest (检查方法是否支持、是否有session)-->
RequestMappingHandlerAdapter.invokeHandlerMethod (准备调用具体的执行方法)-->
RequestMappingHandlerAdapter.getDataBinderFactory (获得DataBinderFactory)-->
RequestMappingHandlerAdapter.createDataBinderFactory (创建DataBinderFactory)-->
RequestMappingHandlerAdapter.getModelFactory (获得ModelFactory)-->
ModelFactory.ModelFactory (创建ModelFactory)-->
RequestMappingHandlerAdapter.createInvocableHandlerMethod (创建ServletInvocableHandlerMethod)-->
ModelFactory.initModel (按照参数、初始化ModelFactory)-->
ModelFactory.invokeModelAttributeMethods (调用@ModelAttribute修饰的方法)-->
InvocableHandlerMethod.invokeForRequest (具体的调用执行方法)-->
InvocableHandlerMethod.getMethodArgumentValues (获取方法参数值)-->
HandlerMethodArgumentResolverComposite.resolveArgument (获得参数)-->
RequestResponseBodyMethodProcessor.resolveArgument (获得参数)-->
RequestResponseBodyMethodProcessor.readWithMessageConverters (将request中的参数转化成对象)-->
AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters (将request中的参数转化成对象)-->
AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters (将request中的参数转化成json对象、该系统用的是json数据传输)-->
ServletInvocableHandlerMethod.invokeAndHandle (调用真正的方法)-->
InvocableHandlerMethod.invokeForRequest (执行)-->
InvocableHandlerMethod.doInvoke (执行)-->
-->
自己controller中的方法
-->
InvocableHandlerMethod.doInvoke (执行返回)-->
InvocableHandlerMethod.invokeForRequest (执行返回)-->
ServletInvocableHandlerMethod.invokeAndHandle (执行返回)-->
HandlerMethodReturnValueHandlerComposite.handleReturnValue (处理方法返回的参数)-->
RequestResponseBodyMethodProcessor.handleReturnValue (处理方法返回的参数)-->
AbstractMessageConverterMethodProcessor.writeWithMessageConverters (处理方法返回的参数)-->
RequestMappingHandlerAdapter.invokeHandlerMethod (执行返回)-->
RequestMappingHandlerAdapter.getModelAndView (获得ModelAndView)-->
RequestMappingHandlerAdapter.handleInternal (执行返回)-->
AbstractHandlerMethodAdapter.handle (执行返回)-->
DispatcherServlet.doDispatch (执行返回)-->
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。