14.1 Spring MVC总体设计
使用Spring MVC只需
- 在web.xml中配置一个DispatcherServlet
- 在定义一个dispatcherServlet-servlet.xml文件
其中DispatcherServlet继承了HttpServlet,在Servlet的init方法调用的时候做以下操作:
1. initMultipartResovler:初始化MultipartResover,用于处理文件上传服务,当有文件上传时,将HttpServletRequest封装成DefaultMultipartHttp,将每个上传的内容封装成CommonsMultipartFile。
- initLocaleResolver:用于处理国际化问题
- initThemeResolver:用于定义一个主题,可根据用户喜好来设置用户访问的页面的样式
- initHandlerMappings:定义请求和处理Handler之间的关系,如果没有定义,则获取默认的两个,BeanNameURLHandlerMapping和DefaultAnnotationHandlerMapping。
- initHandlerAdapters:根据Handler定义类型不同定义不同的处理规则
- initHandlerExceptionResolvers:当Handler处理出错的时候,通过这个Handler来统一处理
- initRequestToViewNameTranslator:将指定的ViewName按照定义的RequestToViewNameTranslator替换成想要的格式
- initViewResovlers:将view解析成页面
HandlerMapping:定义URL映射规则
HandlerAdapter:实现业务逻辑的Handler实例对象
ViewResolver:渲染模板资源
14.2 Control设计
主要有HandlerMapping和HandlerAdapters两个组件提供
HandlerMapping:映射用户的URL和对应的处理类,根据一个URL返回一个HanderExecutionChain代表的处理链
Handler初始化时,将URL与Handler的对应关系保存在handlerMap中;将所有的interceptors对象保存在adaptedInterceptors数组中
HandlerAdapter的三种实现类:
- SimpleServletHandlerAdapter:可以继承HttpRequestHandler接口,所有的Handler实现其handleRequest方法
- SimpleControllerHandlerAdapter:可以继承Controller接口返回ModelAndView
- SimpleServletHandlerAdapter:可以直接继承Servlet接口
Controller调用时序图
14.3 View设计
view包含两个模块:RequestToViewNameTranslator和ViewResolver。
RequestToViewNameTranslator:支持用户自定义对ViewName的解析
ViewResolver:根据用户请求的ViewName创建合适的模板引擎来渲染最终的页面
SpringMVC模板设计模式
成员:
Abstract:抽象模板,定义完成框架后,方法调用的顺序,但是还有些抽象方法需要在子类中实现
Concrete:具体模板实现类
SpringMvcHandlerMapping的设计继承AbstractHandlerMapping,其中getHandlerInternal留给子类实现
View继承AbstractView其中renderMergedOutputModel给子类去实现。