SSM框架---SpringMVC架构图及三大核心组件(三)

一、架构图

SSM框架---SpringMVC架构图及三大核心组件(三)_第1张图片SSM框架---SpringMVC架构图及三大核心组件(三)_第2张图片

场景:浏览器发起一个请求,比如list.do,请求会先进入web.xml中;web.xml中配置了一个前端控制器DispatcherServlet。list.do满足过滤条件,则会进入这个前端控制器

前端控制器用来初始化springmvc容器。容器中有三大组件:处理器映射器处理器适配器视图解析器

  1. 处理器映射器HandlerMapping:用来帮助我们找到相应的Controller;
  2. 处理器适配器HandlerAdapter:用来帮助我们找到Controller里面相应的方法;返回结果ModelAndView,这里的view是一个jsp,jsp是不能直接放到浏览器进行渲染的,所以需要视图解析器。
  3. 视图解析器ViewResolver:获取结果ModelAndView,渲染成静态页面html。

SSM框架---SpringMVC架构图及三大核心组件(三)_第3张图片

三大组件是默认配置的,不需要我们手动配置。在源码spring-webmvc-4.2.4.RELEASE-sources.jar中的DispatcherServlet.properties文件中可以看到,当然我们也可以在springmvc.xml中覆盖配置。

注意:还可以在处理器映射器中设置拦截器:HandlerInterceptor 拦截器(图一3、图二4)。在处理器映射中通过配置拦截器(包括处理器执行前、执行后、执行后进行拦截)将使功能更强大。

二、细说dispatcherServlet的三大核心组件

1、处理器映射器HandlerMapping

在源码spring-webmvc-4.2.4.RELEASE-sources.jar中的DispatcherServlet.properties可以看到:对于HandlerMapping的配置支持两种方式。

org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\
	org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
  1. org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping(传统开发方式,现在没人用了)
  2. org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping(看源码会发现是过时的注解开发方式,偶尔有人会使用)
  3. org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping(最新版本的注解开发方式,推荐)

传统开发方式的配置:---废弃

注解开发方式的配置:包扫描

最新注解开发方式的配置:---太难记了,用注解驱动替代,废弃

SSM框架---SpringMVC架构图及三大核心组件(三)_第4张图片

以下是对应得部分源码: 

SSM框架---SpringMVC架构图及三大核心组件(三)_第5张图片SSM框架---SpringMVC架构图及三大核心组件(三)_第6张图片

2、处理器适配器HandlerAdapter

在源码spring-webmvc-4.2.4.RELEASE-sources.jar中的DispatcherServlet.properties可以看到:对于HandlerAdapter的配置支持三种方式。

org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\
	org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\
	org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
  1. org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter(没人用)
  2. org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter(传统开发方式,可以使用,正式生产不会用)

SSM框架---SpringMVC架构图及三大核心组件(三)_第7张图片SimpleControllerHandlerAdapter.java调用handleRequest(...)方法,对于我们写的第一个传统方式的ItemsController.java类

  • 3. org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter(看源码会发现是:过时的注解开发方式,偶尔有人还在用)

SSM框架---SpringMVC架构图及三大核心组件(三)_第8张图片

  • 4. org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter(最新版本的注解开发方式,推荐)

最新注解开发方式的配置:---太难记了,用注解驱动替代,废弃

3、注解驱动

由于
      
      
       这两行太难记了,所以产生了注解驱动。

  ======快捷键ctrl+shift+t查找源码。======AnnotationDrivenBeanDefinitionParser.java加载了RequestMappingHandlerMapping.java和RequestMappingHandlerAdapter.java类,所以你就知道为什么这一这句话就能替代上面两句进行优化了。

SSM框架---SpringMVC架构图及三大核心组件(三)_第9张图片SSM框架---SpringMVC架构图及三大核心组件(三)_第10张图片

4、视图解析器ViewResolver

在源码spring-webmvc-4.2.4.RELEASE-sources.jar中的DispatcherServlet.properties可以看到:对于ViewResolver的配置。

org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver

找到对应的InternalResourceViewResolver.java,继承自父类UrlBasedViewResolver.java,参数prefix和suffix可以对程序进行优化。

 SSM框架---SpringMVC架构图及三大核心组件(三)_第11张图片

视图解析器前缀和后缀的配置:同时删掉xxxController对跳转页面路径及文件修饰符。即:将modelAndView.setViewName("WEB-INF/jsp/itemList.jsp") --> modelAndView.setViewName("itemList");


	
	

配置视图解析器后,测试结果如下:添加修改了list.do,list2.do保持原样======结果,list.do可以访问,list2.do显示404,url重复了

SSM框架---SpringMVC架构图及三大核心组件(三)_第12张图片SSM框架---SpringMVC架构图及三大核心组件(三)_第13张图片

你可能感兴趣的:(Web与JavaEE,SSM框架,ssm,ssm-springmvc)