Spring MVC浅析

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

下面,因为网上关于源码分析的文章已经很是多了,我这里就不贴源码了,直接对Spring MVC作一个个人理解服务器

1.Spring 和 Spring MVC 的关系session

  个人理解是,Spring 能够当作是为Spring MVC提供对象注入服务的app

  Spring 的容器通常会在web项目启动的时候,经过监听器进行初始化,而且做为ServletContext的属性,放在ServletContext中,而后在初始化DisptcherServlet以前,有一个FrameworkServlet,他是DispatcherServlet的父类,它会将Spring 的IOC容器设置为当前Spring MVC容器的父类,这样,在Spring MVC中,就能够使用Spring IOC中的对象了源码分析

 2.Spring MVC执行流程梳理post

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

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

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

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

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

相关文章
相关标签/搜索