详细讲解Spring mvc的工作原理和源代码分析。
视图视图层(html,jsp…)
控制器控制层(委托模型层进行数据处理)
Springmvc是一个web层mvc框架,类似于struts2。
Springmvc是spring的一部分。事实上,spring在原有的基础上提供了web应用的mvc模块。
实施机制:
Struts2是基于过滤器实现的。
Springmvc是基于servlet实现的。
运行速度:
因为过滤器的底层是servlet,所以springmvc的运行速度会比structs2略快。
Struts2是多实例的。
Springmvc singleton
参数封装:
Struts2参数封装基于属性。
Springmvc是基于方法封装的。粒度更细。
(1)用户向DispatcherServlet发送请求。
⑵ DispatcherServlet收到调用HandlerMapping的请求,查询具体的处理程序。
(3) Handler Mapping找到一个特定的处理器(具体配置了哪个处理器的实现类),生成一个处理器对象和一个处理器拦截器(HandlerExcutorChain包含一组处理程序和拦截器)并返回给DispatcherServlet。
(dispatcher servlet收到HandlerMapping返回的HandlerExcutorChain后,调用HandlerAdapter请求执行特定的处理程序(控制器)。
⑸处理程序适配器适用于调用特定的处理程序(控制器是后端控制器)。
[6]控制器执行后返回ModelAndView(包括逻辑视图和数据)给HandlerAdaptor。
一旦处理程序适配器将ModelAndView返回给DispatcherServlet。
被调度的servlet请求视图解析器ViewReslover解析ModelAndView。
⑼视图解析后将具体视图(物理视图)返回给DispatcherServlet。
⑽ DispatcherServlet请求渲染视图(即将模型数据填充到视图中)根据视图渲染视图。
⑾将渲染后的视图返回给DispatcherServlet。
⑿ DispatcherServlet向用户返回响应结果。
(1)前端控制器调度程序Servlet(仅配置)
功能:中央处理器,接收请求,不做任何处理就发送给其他组件进行处理。DispatcherServlet是整个过程的控制中心。
(2)处理器映射器(仅配置)
功能:根据DispatcherServlet发送的url请求路径查找处理程序。
常见的处理器映射器:beannameurlhandlermapping,simplehandlermapping,
ControllerClassnameHandlerMapping,DefaultAnnotationHandlerMapping(不推荐)
(3)处理器适配器(只需配置)
功能:根据特定的规则(HandlerAdapter要求的规则)执行处理程序。
处理器由HandlerAdapter执行,handler adapter是适配器模式的应用,通过扩展多个适配器执行更多类型的处理器。
常见的处理器适配器:HttpRequestHandlerAdapter、SimpleControllerHandlerAdapter、AnnotationMethodHandlerAdapter。
(4)处理器Handler就是控制器(程编写)。
功能:编写处理程序时,按照HandlerAdapter的要求去做,这样适配器才能正确执行处理程序。
(5)查看解析器ViewReslover(只需配置即可)
功能:解析视图,根据逻辑视图名解析成真实视图。
ViewResolver负责根据处理结果生成视图View。ViewResolver首先将逻辑视图名解析成物理视图名,即特定的页面地址,然后生成视图对象,最后渲染视图,通过页面向用户展示处理结果。
Springmvc框架提供了各种视图类型,如jstlView、freemarkerView、pdfView等。...
(6)观景(程编写)
视图是一个接口,实现类支持不同的视图类型(jsp,freemarker,pdf...).
介绍相关依赖:spring的基础包,springmvc需要的spring-webmvc,日志相关的slf4j-log4j12,jsp相关的jstl,servlet-api,jsp-API。
因为DispatcherServlet本身是一个Servlet,所以需要在web.xml中进行配置。
1.要使用默认加载springmvc配置文件的方法,必须遵循以下规范:
①命名规则:-servlet . XML = = = > spring MVC-servlet . XML
②路径规则:-servlet.xml必须放在WEB-INF下。
2.如果加载位置不符合默认,需要通过web.xml中的标签指定springmvc配置文件的加载路径,如上图所示。
将自定义控制器处理器配置到spring容器中是由spring容器管理的,因为这里springmvc.xml配置文件中的处理器映射器是用BeanNameUrlHandlerMapping配置的。根据名称,处理器映射器根据bean(自定义控制器)的name属性值的url寻找处理程序(控制器),所以bean的name属性值就是匹配用户发送的请求路径的url。
根据视图解析路径:we b-INF/JSP/index . JSP。
功能:根据bean(自定义控制器)的name属性的url,找到执行类控制器。
功能:当自定义处理器(控制器)实现控制器接口时,适配器会执行控制器的特定方法。
SimpleControllerHandlerAdapter会自动判断用户定义的处理器(控制器)是否实现了控制器接口,如果是,会自动调用处理器的handleRequest方法。
控制器接口中有一个方法叫handleRequest,也是处理器方法。
因此,如果自定义控制器想要被调用,它必须实现控制器接口,并在控制器接口中重写处理器方法。