一、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

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

按照传统的方式,Servlet需要配置在web.xml的文件中。但是,在Servlet3和Spring3.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[]{"/"};
}
}

“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,由于现在只关注web,RootConfig很简单:

Spring MVC执行原理和基于Java的配置过程的更多相关文章

  1. (4.1)Spring MVC执行原理和基于Java的配置过程

    一.Spring MVC执行原理和基于Java配置的配置过程 (一)Spring MVC执行过程,大致为7步. 所有的请求都会经过Spring的一个单例的DispacherServlet. Dispa ...

  2. spring Mvc 执行原理 及 xml注解配置说明 (六)

    Spring MVC 执行原理 在 Spring Mvc 访问过程里,每个请求都首先经过 许多的过滤器,经 DispatcherServlet 处理; 一个Spring MVC工程里,可以配置多个的 ...

  3. Spring MVC执行原理

    spring的MVC执行原理 1.spring mvc将所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责对请求 进行真正的处理工作. 2.DispatcherSer ...

  4. Spring Mvc和Mybatis的多数据库访问配置过程

    Spring Mvc 加Mybatis的多数据库访问源配置访问过程如下: 在applicationContext.xml进行配置 <?xml version="1.0" en ...

  5. spring的MVC执行原理

    spring的MVC执行原理 1.spring mvc将所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责对请求 进行真正的处理工作. 2.DispatcherSer ...

  6. Java——一文读懂Spring MVC执行流程

    说到Spring MVC执行流程,网上有很多这方面的文章介绍,但是都不太详细,作为一个初学者去读会有许多不理解的地方,今天这篇文章记录一下我学习Spring MVC的心得体会 话不多说,先上图: Sp ...

  7. Spring MVC执行的流程

    1.Spring MVC应用的开发步骤 a.在web.xml文件中定义前端控制器DispatcherServlet来拦截用户请求.由于Web应用是基于请求/响应架构的应用,所以 不管哪个MVC Web ...

  8. Spring MVC简单原理

    Spring MVC原理 针对有Java Web基础.Spring基础和Spring MVC使用经验者. 前言 目前基于Java的web后端,Spring生态应该是比较常见了.虽然现在流行前后端分离, ...

  9. Spring IOC之基于JAVA的配置

    基础内容:@Bean 和 @Configuration 在Spring中新的支持java配置的核心组件是 @Configuration注解的类和@Bean注解的方法. @Bean注解被用于表明一个方法 ...

随机推荐

  1. BZOJ 3362 Navigation Nightmare 带权并查集

    题目大意:给定一些点之间的位置关系,求两个点之间的曼哈顿距离 此题土豪题.只是POJ也有一道相同的题,能够刷一下 别被题目坑到了,这题不强制在线.把询问离线处理就可以 然后就是带权并查集的问题了.. ...

  2. Duilib教程-非DUI控件

    DUILIB并不是真正的DUI,至少有部分控件不是完全DUI的.其实包括: 1.EDIT. 它的实现原理是,CEditUI包含一个窗口CEditWnd,流程如下: 1)鼠标单击,创建窗口见 EditU ...

  3. 提高SDN控制器拓扑发现性能

    原文由我发表在sdnlab.com.原文链接:http://www.sdnlab.com/15425.html SDN网络的一大特点就是资源由控制器集中管理,控制器管理网络,最基本的当然需要知道网络的 ...

  4. springMVC的url-pattern /和/*的区别

    总之,关于web.xml的url映射的小知识: <url-pattern>/</url-pattern> 会匹配到/login这样的路径型url,不会匹配到模式为*.jsp这样 ...

  5. 为什么 Java ArrayList.toArray(T[]) 方法的参数类型是 T 而不是 E ?

    前两天给同事做 code review,感觉自己对 Java 的 Generics 掌握得不够好,便拿出 <Effective Java>1 这本书再看看相关的章节.在 Item 24:E ...

  6. LCS/LIS/LCIS 模板总结

    /************************* LCS/LIS/LCIs模板总结: *************************/ /*************************** ...

  7. link options and how g++ is invoked gcc g++

    yum install gcc yum install gcc-c++ yum reinstall gcc gcc-c++ Downloading packages:(1/2): gcc-c++-4. ...

  8. Windows数据库定时备份

    首先打开:任务计划程序 右键任务计划程序库,选择创建基本任务 然后即可以按照实际情况逐步进行 直到启动程序--浏览(程序或脚本)时,这里本人导入的是backup.bat文件,文件内容为 @echo 设 ...

  9. SpringMVC 运行流程以及与Spring 整合

    1. 运行流程 2. Spring 和 SpringMVC 整合 // 1. 导入 jar 包 // 2. 配置 web.xml <!-- 配置 Spring 的核心监听器 --> < ...

  10. 008-CentOS添加环境变量

    在Linux CentOS系统上安装完php和MySQL后,为了使用方便,需要将php和mysql命令加到系统命令中,如果在没有添加到环境变量之前,执行“php -v”命令查看当前php版本信息时时, ...