zoukankan      html  css  js  c++  java
  • Spring技术揭幕----DispatcherServlet

    Spring MVC是一个MVC模式的实现。在Spring MVC的使用中,需要在web.xml中配置DispatcherServlet,也就是说其核心是一个Servlet,这个DispatcherServlet实现的是Sun的J2EE核心模式中的前端控制器模式(Front Controller),所有的Web请求都需要通过它来处理,进行转发、匹配、数据处理后,并转由页面进行展现,因此这个DispatcherServlet可以看成是Spring MVC实现最为核心的部分。

    web.xml中配置dispatcherServlet

    <servlet>
    		<servlet-name>portrait</servlet-name>
    		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    		<init-param>
    			<param-name>contextConfigLocation</param-name>
    			<param-value>/WEB-INF/application-si-portrait-mvc.xml</param-value>
    		</init-param>
    </servlet>
    

     Spring的上下文体系通过ContextLoader和DispatcherServlet建立并初始化的过程。在完成对ContextLoaderListener的初始化以后,Web容器开始初始化DispatcherServlet,这个初始化的启动与在web.xml中对载入次序的定义有关。DispatcherServlet会建立自己的上下文来持有Spring MVC的Bean对象,在建立这个自己持有的IoC容器时,会从ServletContext中得到根上下文作为DispatcherServlet持有上下文的双亲上下文。再对自己持有的上下文进行初始化,最后把自己持有的这个上下文保存到ServletContext中,供日后检索和使用。

    DispatcherServlet的工作大致可以分为两部分,一个是初始化部分InitServletBean()启动,通过initWebApplicationContext方法最终调用DispatcherServlet的initStrategies方法,另一个是对Http请求进行相应作为一个Servlet,Web容器会调用Servlet的doGet()和doPost()方法,在经过FrameworkServlet的processRequest()简单处理后,会调用doService。最后调用重要的doDispatch().

    Spring MVC对HTTP请求的分发处理

      在MVC框架初始化完成之后,对HTTP请求的处理是在doService()方法中完成的,DispatcherServlet是HttpServlet的子类,与其他HttpServlet一样,通过Doservice()来相应HTTP的请求。对请求的处理实际上是由doDispatch()来完成,它是DispatcherServlet完成Dispatcher的主要方法,包括准备ModelAndView,调用getHandler来响应HTTP的请求,然后通过执行Handler的处理来得到返回的ModelAndView结果,最后把这个ModelAndView对象交给相应的视图对象去呈现。

    Spring MVC的实现大致由以下几个步骤完成:

    1)建立Controller控制器和HTTP请求之间的映射关系,由在handlerMapping中封装的HandlerExecutionChain对象来完成,在堆Controller控制器和HTTP请求的映射关系的配置是在Bean定义中描述,并在IOC容器初始化时,通过初始化HandlerMapping来完成的,这些定义的映射关系会被载入到一个handlerMap中使用。

    2)在初始化为Spring MVC接收HTTP请求并完成相应处理做好准备,在MVC接收到HTTP请求的时候,DispatcherServlet会根据具体的URL请求信息,在HandlerMapping中进行查询,从而得到对应的HandlerExecutionChain.在它的里面封装了配置的Controller,这个请求对应的Controller会完成请求的响应动作,生成需要的ModelAndView对象,这个对象就像它的名字所表示的一样,可以从对象中获得ModelAndView对象,从该对象中获得Model模型数据和视图对象。

    3)DispatcherServlet把获得的模型数据交给特定的视图对象,从而完成这些数据的视图呈现工作。

  • 相关阅读:
    Windows Phone 31 日谈——第18日:WebBrowser控件
    Windows Phone 31 日谈——第19日:推送通知
    使用bat文件启动服务
    绝代反向指标——丘吉尔 炒股第二天就崩盘
    插入数据库返回自增长序号
    大并发服务器开发
    在这个不相信爱情的时代里,巴菲特的故事似乎让我又相信爱情了
    mysql操作语句
    马云三历高考才进大学 第一次高考数学考1分
    俞敏洪的屌丝逆袭 大学考了三次进北大
  • 原文地址:https://www.cnblogs.com/yangsy0915/p/5515416.html
Copyright © 2011-2022 走看看