zoukankan      html  css  js  c++  java
  • 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很简单:

     

  • 相关阅读:
    7-20 (样卷)统计单词的个数 (40 分)
    7-21 删除字符 (30 分)
    7-19 计算有n个字符串中最长的字符串长度 (40 分)
    7-16 列表数字元素加权和(1) (40 分)
    7-17 列表元素个数的加权和(1) (40 分)
    7-15 求出歌手的得分 (40 分)
    7-10 jmu-python-异常-学生成绩处理基本版 (15 分)
    7-11 jmu-python-分段函数&数学函数 (15 分)
    7-12 产生每位数字相同的n位数 (30 分)
    7-9 jmu-python-异常-学生成绩处理专业版 (25 分)
  • 原文地址:https://www.cnblogs.com/chenkeyu/p/7718194.html
Copyright © 2011-2022 走看看