spring实战 5.1 SpringMVC起步

一、跟踪Spring MVC的请求

spring实战 5.1 SpringMVC起步

  1. Spring MVC的所有请求都会通过一个前端控制器(front controller) Servlet。DispatcherServlet的任务是将请求发送给Spring MVC controller。

  2. DispatcherServlet会查询一个或多个处理器映射来确定请求的下一站在哪里,处理器映射会根据请求所携带的URL信息来进行决策。

  3. DispatcherServlet会将请求发送给选中的controller,到了控制器,请求会卸下负载并等待控制器处理这些信息。

  4. controller会将模型数据打包,并标示出用于渲染的视图名,连同模型一起发送回DispatcherServlet。

  5. DispatcherServlet会使用视图解析器(view resolver)来将逻辑视图名匹配为一个特定的视图实现。

  6. DispatcherServlet将模型数据数据交付给视图。

  7. 视图将使用模型数据渲染输出,这个输出会通过响应对象传递给客户端。

二、搭建Spring MVC

  1. 默认配置(web.xml)
    当DispatcherServlet被载入后,它将从xml文件载入Spring的应用上下文.xml文件的名字取决于DispatcherServlet的名字。如果DispatcherServlet的名字为example,那么它将从example-servlet.xml的文件中载入应用上下文。
<web-app>    
    <servlet>    
        <servlet-name>example</servlet-name>    
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>    
        <load-on-startup>1</load-on-startup>    
    </servlet>    
    <servlet-mapping>    
        <servlet-name>example</servlet-name>    
        <url-pattern>*.form</url-pattern>    
    </servlet-mapping>    
</web-app>
  1. 通过扩展AbstractAnnotationConfigDispatcherServletInitializer抽象类,可以将DispatcherServlet和Spring应用上下文配置到Servlet容器中。

    在servlet 3.0中,容器会在类路径中查找实现ServletContainerInitializer接口的类,如果能发现,就用它来配置servlet容器。

    Spring提供了这个接口的实现,名为SpringServletContainerInitializer,这个类又会查找WebApplicationInitizalier并将配置的任务交给他们实现。Spring 3.2中引入了WebApplicationInitizalier的基础实现,即AbstractAnnotationConfigDispatcherServletInitializer。

    但是AbstractAnnotationConfigDispatcherServletInitializer并不是直接实现WebApplicationInitializer接口的,它的实现路径如下:WebApplicationInitializer —> AbstractContextLoaderInitializer —> AbstractDispatcherServletInitializer —> AbstractAnnotationConfigDispatcherServletInitializer。

    在AbstractAnnotationConfigDispatcherServletInitializer中,给我们留下了三个抽象方法要求我们去实现:

    • protected String[] getServletMappings(){}
    • protected Class<?>[] getRootConfigClasses(){}
    • protected Class<?>[] getServletConfigClasses(){}

    getRootConfigClasses()返回的配置类中配置的bean会被加载到ContextLoaderListener创建的上下文中。getServletConfigClasses()返回的配置类中配置的bean会被加载到DispatcherServlet启动的时候创建的上下文。

    DispatcherServlet会加载包含web组件的bean,如controller,view resolver,以及处理器映射。而ContextLoaderListener要加载应用中的其他bean,这些bean通常是驱动应用后的的中间层和数据层组件。

上一篇:从“史记2013”看百度百科的新媒体态度


下一篇:第7章 函数