SpringMVC整体流程及主要类
2024-12-13 17:55:57 0 举报
SpringMVC源码学习,慢慢完善中。。。。
作者其他创作
大纲/内容
contextDestroyed
包含整个web.xml文件中的配置
8:请求视图解析器
创建流程
ServletConfig
ContextRefreshListener
CommonsMultipartResolver
Servlet的上下文对象
将ModelAndView选择合适的视图进行渲染的处理器
service()
initFlashMapManager(context);
基于HandlerExceptionResolver接口的异常处理
afterPropertiesSet()设置属性
RequestMappingHandlerAdapter
视图页面view
HttpServletBean
对应的servlet中配置的属性
SpringMVC配置
SpringMVC就是对Spring框架的一些扩展
处理器适配器HandlerAdapter
包含
SpringMVC
11:响应
3:@Controller注解 @RequestMapping 调用自定义方法
属于Tomcat源码
doGet、doPost
initHandlerAdapters(context);
7:返回ModelAndView
StandContext
initViewResolvers(context);
请求
处理适配器,主要包含Http请求处理器适配器,简单控制器处理器适配器,注解方法处理器适配器
执行流程
HandlerMapping
Tomcat容器启动
//用来指定Spring框架的一些属性,在springmvc之前加载<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-config.xml</param-value></context-param>//Servlet配置<servlet> <servlet-name>mvc-test</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> //下面是SpringMVC的配置 <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> <async-supported>true</async-supported> </servlet> <servlet-mapping> <servlet-name>mvc-test</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
init()
初始化SpringMVC九大组件
1:实现HttpRequestHandler2:实现Controller接口handlerRequest()方法
当controller处理器方法没有返回一个View对象或逻辑视图名称,并且在该方法中没有直接往response的输出流里面写数据的时候,spring将会采用约定好的方式提供一个逻辑视图名称
contextInitialized
6:响应
SimpleControllerHandlerAdapter
九大组件
MultipartResolver
被某个servlet持有
initLocaleResolver(context);
AbstractHandlerMethodMappingRequestMappingHandlerMapping
5:请求
initRequestToViewNameTranslator(context);
ContextLoaderListener加载
主要用来处理国际化配置
创建Spring容器
ContextLoaderListener
AbstractRefreshableWebApplicationContext
生命周期initservice destory
onRefresh(event.getApplicationContext());
视图解析器ViewResolver
initHandlerMappings(context);
默认的组件类型配置
从web.xml读取配置
initHandlerExceptionResolvers(context);
9:返回视图view对象
4:请求执行Handler
处理器Handler
DispatcherServlet
ContextRefreshedEvent
前端控制器DispatcherServlet
initThemeResolver(context);
HandlerExecutionChain
ServletContext
initMultipartResolver(context);
AbstractUrlHandlerMappingBeanNameUrlHandlerMapping
Struts1Struts2
StandardServletMultipartResolver
ServletServer applet
Servlet配置
HandlerAdapter
XmlWebApplicationContext
Web.xml读取配置
创建SpringMVC容器
processRequest()
Spring容器启动
AbstractHandlerMapping
主要用来设置主题Theme
2:请求查询Handler
Interceptor
ApplicationContextAwareProccessorsetApplicationContext()
两个容器隔离方便后面进行扩展,而不会出现冲突子容器可以访问父容器,父容器不能访问子容器
1:请求
doPostdoGet
3:返回处理器执行链HandlerExecutionChain
servlet
SpringMVC容器启动
War包
10:渲染视图
Controller定义方式
演化
创建Spring IOC父容器
HttpRequestHandlerAdapter
提供请求存储属性,可供其他请求使用
处理器映射器HandlerMapping
关键类
FrameworkServlet
映射器,用来将对应的request跟controller进行对应
initWebApplicationContext()
主要用来处理文件上传
Framework.this.onApplicationEvent()
DispatcherServlet.properties
重定向和转发的主要区别在于它们对客户端的影响、数据传递方式以及应用场景。重定向是指服务器告诉浏览器去访问另一个URL,客户端会看到地址栏的变化,并发出新的请求。重定向分为临时重定向和永久重定向:临时重定向(如HTTP 302状态码)表示资源只是暂时位置变了,将来还可能会回到原位置;永久重定向(如HTTP 301状态码)表示资源已经永久搬迁到新位置。重定向过程中,客户端会发出两次请求:第一次请求服务器,服务器返回新的URL,浏览器再次请求新URL。由于是两次请求,无法在请求间传递数据,除非使用Session或其他持久化手段。转发是服务器内部的一种操作,客户端并不知道转发的发生。服务器收到请求后,内部调用另一个资源来处理请求,浏览器的URL不会改变。转发过程中,客户端只有一次请求,服务器内部直接处理。转发可以在服务器内部共享Request对象中的数据,因此可以在转发过程中传递数据。应用场景方面,重定向常用于用户登录后跳转、资源永久迁移以及防止重复提交表单等场景;而转发则适用于服务器内部逻辑处理,如在一个请求中调用多个不同资源来完成任务。FlashMap可以用于redirect重定向时,数据的传递
Spring的相关配置
invokeHandlerMethod()
0 条评论
下一页