基于Java的MVC框架很多,主流的是Spring MVC和Struts。因为Spring MVC可以与Spring无缝连接,所以Spring MVC发展很快,所占份额也比较大。
Spring MVC的总体设计
要使用Spring MVC只要在web.xml文件中配置一个DispatcherServlet。使用Spring MVC非常简单,只要扩展一个路径映射关系;定义一个视图解析器;再定义一个业务逻辑的处理流程规则。
DispatcherServlet类继承HttpServlet,在Servlet的init方法调用时DispatcherServlet执行Spring MVC的初始化工作
在Spring MVC框架中,有三个组件是用户必须要定义和扩展的:
- 定义URL映射规则
- 实现业务逻辑的Handler实例对象
- 渲染模板资源
DispatcherServlet的启动
- HttpServlet初始化调用了HttpServletBean的init方法,该方法的作用获取Servlet中的init参数,并创建一个BeanWrapper对象,然后子类处真正执行BeanWrapper的初始化工作。
- Spring容器的创建是在FrameworkServlet的initServletBean()方法中完成的,这个方法会创建WebApplicationContext对象,并调用refresh其refresh()方法来完成配置文件的加载;
- Spring容器在加载时会调用DispatcherServlet的initStrategies方法来完成在DispatcherServlet中定义的初始化工作。
Control设计
Spring MVC的Control主要由handlerMapping和HandlerAdapters两个组件提供。
- HandlerMapping负责映射用户的URL和对应的处理类,
- 在处理链中添加任意的HanderAdapters实例来处理这个URL对应的请求,类似于Servlet规范中的Filter处理类。
HandlerMapping初始化
HandlerAdapter初始化
可以完成URL与Handler的映射关系,那么HandlerAdapter可以帮助自定义各种Handler。
Control的调用逻辑
首先调用DispatcherServlet的doService方法开始,接着调用doDispatch方法。
Model设计
Model通常在渲染页面和业务逻辑曾需要用到。
ModelAndView对象是连接业务逻辑层与View展现层的桥梁,对SpringMVC来说也是连接Handler与View的桥梁。
View设计
对Spring MVC的View的模块来说,有两个组件支持,分别是RequestToViewNameTranslator和ViewResolver。
- RequestToViewNameTranslator支持用户自定义对ViewName的解析
- ViewResolver根据ViewName创建一个View对象,调用View对象的void render(Map model,HttpServletRequest request,HttpServiceResponse response)方法来渲染页面
模板模式
形成大体的结构每个人根据自己的需求去开发。大的逻辑已经定义,不同的实现方法的有所有不同
模板模式的结构
- Abstract(抽象模板):定义了完整的框架,方法的调用顺序通常已经确定,但是还是定义一些抽象方法给子类去实现
- Concrete(具体模板实现类):实现抽象模板中定义的抽象方法,实现具体的共嗯那个组成一个完整逻辑。