Spring框架学习

深入分析JavaWeb---第14章 SpringMVC的工作机

2018-07-22  本文已影响10人  ___TheOne___

1.SpringMVC的总体设计

Part1:通过web.xml将SpringMVC集成项目中。
项目要使用SpringMVC,只需要在web.xml中配置一个DispatcherServlet,所有对请求都经过这个servlet处理。

Part2:需使用者扩展三个业务部分:
1.路径映射(即代码层面:定义URL映射规则);
2.业务逻辑处理(实现业务逻辑的Handler实例对象);
3.视图解析器(渲染模板资源)。

Part3:DispatcherServlet执行Servlet的初始化init方法,做了8件事。
DispatcherServlet类继承了HttpServlet,在Servlet的init方法调用时DispatcherServlet执行SpringMVC的初始化工作包括8个细节,同时这8个细节分别对应SpringMVC的8个组件:

/**
     * Initialize the strategy objects that this servlet uses.
     * <p>May be overridden in subclasses in order to initialize further strategy objects.
     */
    protected void initStrategies(ApplicationContext context) {
        initMultipartResolver(context);
        initLocaleResolver(context);
        initThemeResolver(context);
        initHandlerMappings(context);  //核心组件
        initHandlerAdapters(context);   //核心组件
        initHandlerExceptionResolvers(context);
        initRequestToViewNameTranslator(context);
        initViewResolvers(context);  //核心组件
    }

1.核心组件---HandlerMapping
答: 用于将用户请求的URL映射到一个个的Handler实例上。
2.核心组件---HandlerAdapter
答:用于根据Handler的不同类型定义不同处理规则。例如:我们最最常见的将URL映射到一个Controller实例。 或者 太易保项目中的各种拦截器interceptors:报文保存拦截器;加解密拦截器;登录token验证拦截器。这些拦截器都统一实现HandlerInterceptorAdapter接口,在Controller处理用户请求之前,执行一些请求预操作
3.核心组件---ViewResolver
答:用于将View解析成页面。策略模式---在ViewReslover中可以设置多个解析页面策略。例如:常见的根据JSP 解析 或者 按照Velocity模板解析。
4.MultipartResolver
答:用于处理文件上传服务。
5.ThemeResolver
答:用于定义页面的主题。
6.HandlerExceptionResolver
答:当Handler处理出现异常时,会通过这个resolver来统一处理。
太易保项目定义的AppExceptionHandler,通过实现HandlerExceptionReslover接口统一处理后端项目的异常。
7.LocaleResolver
答:用于处理应用的国际化问题,通过解析请求的Locale和设置响应的Locale控制应用中的字符编码问题。
8.RequestToViewNameTranslator
答:将指定的ViewName按照定义的RequestToViewNameTranslator替换为想要的格式。

思考领悟:从上面的初始化策略看出,在一个请求过程中可能需要用户来扩展的地方都定义了扩展点:只要实现相应的接口类,并创建一个Spring Bean就能扩展SpringMVC框架。自然具有非常好的可扩展性和灵活性。

2.1 Control控制器设计

SpringMVC的Control主要由上述的HandlerMapping和HanderAdapters两个组件提供。

Part1:HandlerMapping初始化
HandlerMapping初始化,完成的两个最重要的工作就是:
1>将URL与Handler的对应关系保存在handlerMap集合中。
2>将所有的interceptors对象保存在adaptedInterceptors数组中,等到请求到来时执行数组中对应的interceptor对象。
所有的interceptor对象必须实现HandlerInterceptor接口。

Part2:HandlerAdapter初始化
HandlerAdapter初始化没有什么特别之处:只是简单地创建一个HandlerAdapter对象,同时将这个对象保存在DispatcherServlet的handlerAdapters集合中。**当URL对应到某个Handler时,会在这个handlerAdapters集合中机型查询。

Part3:Controller的调用逻辑(职责连设计模式

2.2 Model设计

2.3 View设计

上一篇下一篇

猜你喜欢

热点阅读