zoukankan      html  css  js  c++  java
  • Spring MVC浅析

      讲到MVC,想必大家都很熟悉,就是将数据模型、视图、控制器进行分离,做到分工明确,在Spring的帮助下,Spring MVC 更是做到了充分的解耦,因为大部分的资源都由Spring进行管理,为Spring MVC提供了方便,比如Controller层,会用到Spring的依赖注入功能,只用声明一个接口,Spring就会自动将需要的对象进行注入,这样有两个好处,一个是更加的方便,另一个是使得程序充分的解耦!你想想,由于只声明了一个接口,所以调用层不用理会下层的实现,上层的修改也不会导致调用层代码的修改,这不是非常棒的吗! 讲了那么多,进入我们今天的主题:Spring MVC

    下面,由于网上关于源码分析的文章已经非常多了,我这里就不贴源码了,直接对Spring MVC做一个我的理解

    1.Spring 和 Spring MVC 的关系

      我的理解是,Spring 可以看成是为Spring MVC提供对象注入服务的

      Spring 的容器一般会在web项目启动的时候,通过监听器进行初始化,并且作为ServletContext的属性,放在ServletContext中,然后在初始化DisptcherServlet之前,有一个FrameworkServlet,他是DispatcherServlet的父类,它会将Spring 的IOC容器设置为当前Spring MVC容器的父类,这样,在Spring MVC中,就可以使用Spring IOC中的对象了

     2.Spring MVC执行流程梳理

      (1) 首先请求到达服务器,被DispatherServlet拦截

      (2)DispatcherServlet通过之前已经初始化好的HandlerMapping进行Handler以及Interceptor的查找,Handler就是我们编写的Controller

      (3)找到后先执行拦截器Interceptor的方法preHandle方法

      (4)利用HandlerAdapter执行Handler的方法,并且返回ModelAndView给DispatcherServlet

      (5)执行拦截器Interceptor的postHandler方法

      (6)定位到ModelAndView中的页面,将数据嵌入,再进行页面的渲染

      (7)响应用户

    3.若是想在Service或者其他地方用到request对象,应该怎么处理

      这里主要有两种方法

      其一:在service中需要request对象,可以通过Controller的帮助,在Controller中声明request为参数,Spring MVC就会自动为我们注入这个对象,然后我们再将这个对象传入其他方法比如Service中的方法,就可以实现了

      还有一种方法就是:利用RequestContextHolder进行操作,RequestContextHolder里面封装了RequestAttributes,这个RequestAttributes中有get、set、removeAttribute,而且因为实际封装的是ServletRequestAttributes,所以可以用以下方式获得request或session

    //获取request
    RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes();
    HttpServletRequest request
    = ((ServletRequestAttributes)requestAttributes).getRequest();

    //获取session
    RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes();

    HttpSession session = ((ServletRequestAttributes)requestAttributes).getRequest().getSession();

  • 相关阅读:
    HDU 1010 Tempter of the Bone
    HDU 4421 Bit Magic(奇葩式解法)
    HDU 2614 Beat 深搜DFS
    HDU 1495 非常可乐 BFS 搜索
    Road to Cinema
    Sea Battle
    Interview with Oleg
    Spotlights
    Substring
    Dominating Patterns
  • 原文地址:https://www.cnblogs.com/by-my-blog/p/11521627.html
Copyright © 2011-2022 走看看