Spring MVC执行原理和基于Java的配置过程

一、Spring MVC执行原理和基于Java配置的配置过程

(一)Spring MVC执行过程,大致为7步。

 

 

  1. 所有的请求都会经过Spring的一个单例的DispacherServlet
  2. DispatcherServlet会查询一个或多个处理器映射,找到请求的URL所对应的控制器。
  3. 把请求的内容传递给控制器后等待控制器处理这些内容。
  4. 控制器在逻辑处理后会产生一些数据(例如查询所有的用户信息),这些数据存在在模型(Model)中,同时返回一个视图名用作渲染数据。
  5. DispacherServlet找到视图解析器,视图解析器通过视图名找到真正的视图实现。
  6. DispacherServlet找到视图实现后再把模型(Model)的数据渲染到视图中。
  7. 把最终的视图通过响应对象传递给客户端

(二)搭建Spring MVC

  1. 配置DispacherServletServlet

DispatcherServletSpringMVC的核心,所有请求通过它来接触到框架,它又把请求转发到其他的组件。

按照传统的方式,Servlet需要配置在web.xml的文件中。但是,在Servlet3Spring3.1之后,又提供了另外一种依据Java类配置的方式。我们先看看这种方式的代码是什么样的。

public class SpittrWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    protected Class<?>[] getRootConfigClasses() {
        System.out.println("用来加载spring管理的中间层和数据层组件,下面会给出具体代码");
        return new Class[]{RootConfig.class};
    }
    protected Class<?>[] getServletConfigClasses() {
        System.out.println("用来加载web相关的组件,如控制器、视图解析器等,下面会给出具体代码");
        return new Class[]{WebConfig.class};
    }
    protected String[] getServletMappings() {
        System.out.println("如果映射是/,代表DispacherServlet是默认的Servlet");
        return new String[]{"/"};
    }
}
View Code

“SpittrWebAppInitializer”是我们自定义的类名,它继承了AbstractAnnotationConfigDispatcherServletInitializer并且实现了三个方法,下图解释了为什么需要继承这个类,以及为什么继承了这个类后,请求就能自动的转到DispacherServlet来处理。

 

 

  1. 启用SpringMVC

当配置完DispacherServlet后,还需要启用SpringMVC组件。

如果使用XML启动,可以使用<mvc:annotation-driven>

当基于Java配置时,需要在配置类上添加@EnableWebMvc注解:

 

 

但是如果只添加一个注解的话,会出现下面的问题:

(1)没有配置视图解析器,Spring会使用BeanNameView-Resolver,这个视图解析器会查找ID与视图名相同的Bean,并且这个Bean需要实现View接口,通过这种方式来解析视图。

(2)没有启动组件扫描。Spring只能使用显式配置的控制器

(3)DispacherServlet会映射为应用默认Servlet,会处理所有请求,包括静态资源,如图片和样式表。

下面是一个更完整的Config,解决了上面的问题。

 

除了WebConfig还有一个RootConfig,由于现在只关注webRootConfig很简单:

 

 

posted @ 2017-10-23 18:06  宇的季节  阅读(437)  评论(0编辑  收藏  举报