• 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();

  • 相关阅读:
    蛙蛙请教:把一段c算法代码转换成c#代码。
    和病毒折腾了两天
    WawaKM预览版发布,欢迎大家测试反馈哦
    (转)深度分析如何在Hadoop中控制Map的数量
    [转载]JAVA操作符
    (转)Hive Index
    Hadoop++:Hadoop的局部性能改良
    深入了解Hive Index具体实现
    Linux echo命令
    (转)带索引的mapReduce
  • 原文地址:https://www.cnblogs.com/by-my-blog/p/11521627.html
Copyright © 2020-2023  润新知