springMVC之学习笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_25673113/article/details/79771994

最近在研究springMVC的源码,推荐一下几个一些学习博客和书籍

推荐书籍《spring 揭秘》:真的写的非常好,从spring IOC、spring AOP、spring orm、spring 事务的支持等等板块对spring做了一个详细的解读。每个模块从架构的由来,组成,使用方法,优化等等方面深入浅出。(强烈推荐)

推荐的博客

以上的推荐的书籍、博客配上 源码调试对springMVC源码进行理解,但是我发现对SpringMVC越是深入的了解,越是发现他的复杂性。在设计者对这个框架进行越灵活的配置的同时,其设计结构就越复杂,有一些配置其实在大都数情况下都是默认使用的,例如事务支持,注解支持等等配置文件,所以就产生了Spring Boot。
我们公司也对其进行了简单的改造去除了一些配置,实行了了 约定大于配置的理念。


关键点记录(也是面试会问的问题):

  • SpringMVC 需要了解的两个流程:SpringMVC的初始化过程和SpringMVC请求接口的流程。
  • spring启动流程web.xml的配置(为什么要这样配置)
 <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

 <servlet>
        <servlet-name>XXX</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>XXX</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
  • springMVC是如何把spring容器和Servlet结合在一起的。
  • ContextLoaderListener和DispatcherServlet启动时分别会创建WebApplicationContext,并分别会读取applicationContext.xmlXXX-servlet.xml配置文件。两个WebApplicationContext是什么关系,怎么产生的关系
  • springMVC的基本组件是那些,在什么时候初始化。
//以下就是MVC重要的组件也是可以扩展的节点
//DispatcherServlet容器refresh完后会触发监听器,使DispatcherServlet进行下面组件初始化
protected void initStrategies(ApplicationContext context) {
        initMultipartResolver(context); //文件上传解析,如果请求类型是multipart将通过MultipartResolver进行文件上传解析;
        initLocaleResolver(context); //本地化解析
        initThemeResolver(context);   //主题解析
        initHandlerMappings(context); //通过HandlerMapping,将请求映射到处理器
        initHandlerAdapters(context); //通过HandlerAdapter支持多种类型的处理器
        initHandlerExceptionResolvers(context); //如果执行过程中遇到异常将交给HandlerExceptionResolver来解析
        initRequestToViewNameTranslator(context); //直接解析请求到视图名
        initViewResolvers(context); //通过ViewResolver解析逻辑视图名到具体视图实现
        initFlashMapManager(context); //flash映射管理器
    }
  • springMVC请求的简易流程和复杂流程。知道以上组件分别是在哪个环节产生作用。
  • 这里写图片描述
    这里写图片描述
  • 比较重要的组件也就是上面的简易流程组件。HandlerMappings、Handler(主要包括Controller)、ModelAndView、ViewResolver、View
    • HandlerMapping 请求和处理类之间的映射关系(HandlerMapping的基本流程详解):不同的HandlerMapping有不同的解析流程
    • Handler:次级控制器,Controller是一种Handler的形式,Handler也可以是基于注解或者也可以使用Status框架的Action
    • ModelAndView是包含Model页面数据和View的包装类
    • ViewResovler 来处理逻辑视图名和View的实现类
    • VIew来视图渲染工作
  • 次要的组件:
    • MultipartResolver用来处理文件上传的
    • HandlerAdapter用来处理不同Handler而产生的适配器
    • HandlerExceptionResolvers用来处理再Handler过程中产生的异常
    • Interceptor 是SpringMVC的拦截器:springMVC之Interceptor拦截器
//Handler(Controller)的配置方法
@Controller
@RequestMapping(value = "/wildcard")
public class TestWildcardController {

  @RequestMapping("/test/**")
  @ResponseBody
  public ModelAndView test1(ModelAndView view) {
    view.setViewName("/test/test");
    view.addObject("attr", "TestWildcardController -> /test/**");
    return view;
  }
}
  • 常用的 HandlerMappings有哪些,具体每个HandlerMappings是怎么找到想要的Handler
    • 常用的HandlerMappings有SimpleUrlHandlerMapping,BeanNameUrlHandlerMapping,RequestMappingHandler
    • 特别是注解的HandlerMappings 是如何匹配想要的Handler和Method
    • (改造)如何对框架进行改造实现不进行url配置就可以找到对用的Handler。比如在controller/order/orderController目录下不进行RequestMapping配置就可以自动产生对应的url。
  • 拦截器在哪里切入,相比普通的web拦截器, springMVC的拦截器的不同之处
    • 拦截器可以用来进行哪些操作
  • springMVC的优点和缺点。

可随时补充。

猜你喜欢

转载自blog.csdn.net/qq_25673113/article/details/79771994