SpringMVC是近年来出现的一个非常优秀的web框架,它是基于MVC思想设计的,采用松散耦合可插播组件结构,比其他的MVC框架更加灵活,更具可扩展性,此外SpringMVC在视图解析、数据绑定等方面等有着非常不错的表现,而已成为当今最受欢迎的MVC框架。
1体系结构
SpringMVC的核心是DispatcherServlet,它主要用于接收请求后,协调各个组件完成对请求的响应。和其他J2EE的MVC框架一样,SpringMVC也是利用前端Servlet接收请求,处理请求,最后返回相应结果的。而DispatcherServlet即是SpringMVC对应的前端Servlet。
图1.1 SpringMVC体系结构
SpringMVC在接收到请求后,主要是按照以下的流程处理并响应请求的。
(1)客户端发起Http请求,web应用服务器(如Tomcat)接收到请求后,如果请求格式匹配web.xml中配置的DispatcherServlet拦截请求格式(如*.html),那么web服务器将会把该请求转交给DispatcherServlet进行处理。
(2)DispatcherServlet接收到请求后,会根据请求的信息(如URL,请求方法等)从HandlerMapping中找到处理对应请求的处理器(Handler)。
(3)DispatcherServlet会将HandlerMapping返回的Handler交给HandlerAdapter进行包装。再统一由HandlerAdapter的适配器接口实现类通过接口实现调用Handler(具体HandlerAdapter如何实现利用适配器接口调用Handler后续会进行分析)。
(4)Handler处理完请求对应的业务逻辑后会返回ModleAndView给DispatcherServlet。其中ModleAndView包含Handler处理后返回的逻辑视图名以及数据对象。
(5)DispatcherServlet利用ModleAndView中的逻辑视图名通过ViewResolver解析到真正的视图对象View。
(6)DispatcherServlet获取到视图对象View后,会整合ModleAndView中的数据对象Modle进行视图渲染。
(7)渲染完成后返回客户端响应信息。
2类结构
图1.2
既然DispatcherServlet归根到底是SpringMVC用于接收请求的Servlet,那就必须讲一下DispatcherServlet的类结构(如图1.2所示)。DispatcherServlet类结构主要是包含用于接收请求的Servlet部分以及用于监听容器事件的Listener部分。DispatcherServlet主要是通过继承FrameworkServlet实现对用户请求的处理以及为每一个请求的Servlet管理WebApplicationContext实例。
类结构的Servlet部分中,Servlet接口是Servlet类型的顶级接口,定义了所有子类都必须实现的方法,如Servlet生命周期中的核心方法init(ServletConfig config),service(ServletRequestreq, ServletResponse res)以