1、Spring MVC的目的

  构建像Spring框架那样灵活和松耦合的Web应用程序。

  2、Spring MVC中如何处理Request?

  每当用户在Web浏览器中点击链接或者提交表单时,Request就开始工作了。

  从离开浏览器开始到获取响应返回,Request会在经历过的每一站留下一些信息,也会获取一些信息。

  DipatcherServlet——前端控制器Servlet,负责将Request发送给Spring MVC的Controller;

  Handler Mapping——处理器映射,应用中会有多个控制器,DipatcherServlet需要知道发送给哪个控制器,所以会查询一个或多个HandlerMapping确定下一站。而Handler Mapping会根据Request所携带的URL信息进行决策;

  Controller——控制器,Request到控制器后,会得到用户提交的信息,然后处理这些信息。实际中,设计良好的控制器本身只处理很少的工作,而是将业务逻辑委托给一个或者多个服务对象进行处理。控制器做的最后一件事就是把模型数据打包~~

  Model——模型,是控制器在完成逻辑处理后,会产生的一些信息,这些信息需要返回给用户并在浏览器上显示。

  View Resolver——视图解析器,原始模型产生后,需要通过View进行必要的格式化。View Resolver就是根据得到的逻辑视图名匹配一个View,告诉DipatcherServlet。DipatcherServlet知道由哪个视图渲染结果,Request的任务基本完成,还有最后一站去完成视图的实现。

  View——视图,Request在这里交付数据模型,完成任务。View使用模型数据渲染输出,这个输出通过Response对象传递给客户端。

  3、传统方式,在Web应用程序中配置DipatcherServlet

  传统方式中,DipatcherServlet这样的Servlet会配置在web.xml文件中,web.xml会放到应用的war包中。

<!--配置springmvc DispatcherServlet(中心控制器)-->
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!--Sources标注的文件夹下需要新建一个spring文件夹-->
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

  4、新方式基于Servlet 3规范和Spring 3.1,可以使用Java将DipatcherServlet配置在Servlet容器中,而不再使用web.xml。(同时使用也没问题)

  了解凡是扩展(继承)了AbstractAnnotationConfigDipatcherServletInitializer的类,都会自动配置DipatcherServlet和Spring的应用上下文,Spring的应用上下文会位于应用程序的Servlet上下文中。

  这个类中三个方法:

  String[] getServletMappings()、getRootConfiClasses()、getServletConfigClasses().(后两个返回类,即xxx.class)

  5、两个应用上下文(基于Java配置)

  当DipatcherServlet启动时,它会创建Spring应用上下文,并加载配置文件or配置类中所声明的bean。

  在Spring Web应用中,通常会有另外一个应用上下文,这个由ContextLoaderListener(Servlet监听器)创建。

  我们希望DipatcherServlet加载包含web组件的bean,如控制器、试图解析其以及处理及映射,而ContextLoaderListener加载应用中的其它bean,这些bean通常是驱动应用后端的中间层和数据层组件。

  实际上,AbstractAnnotationConfigDipatcherServletInitializer会同时创建DipatcherServlet和ContextLoaderListener。

  6、启用Spring MVC

  一,XML配置中,使用<mvc:annotation-driven>启用注解驱动的Spring MVC;

  二,基于Java进行配置,即创建一个Java类进行配置。

Spring MVC(一)Spring MVC的原理的更多相关文章

  1. [MVC] 深入浅出Spring MVC

    [MVC] 深入浅出Spring MVC 转:http://4925054.blog.51cto.com/4915054/1176855 Spring MVC主要包括以下要点: 1:由Dispatch ...

  2. Spring系列(七) Spring MVC 异常处理

    Servlet传统异常处理 Servlet规范规定了当web应用发生异常时必须能够指明, 并确定了该如何处理, 规定了错误信息应该包含的内容和展示页面的方式.(详细可以参考servlet规范文档) 处 ...

  3. 【MVC】Spring MVC常用配置

    一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 <!--conf ...

  4. Spring.net介绍及MVC中应用

    Spring.net两大核心内容: IOC(控制反转) 传统的面相对象思维模式是对象A依赖对象B,对象B的实例化和调用都在对象A中发生,一旦对象B中发生变化,对象A也要随之变化,这样使得程序间行程了紧 ...

  5. Spring Boot与Spring MVC集成启动过程源码分析

    开源项目推荐 Pepper Metrics是我与同事开发的一个开源工具(https://github.com/zrbcool/pepper-metrics),其通过收集jedis/mybatis/ht ...

  6. spring笔记3 spring MVC的基础知识3

    4,spring MVC的视图 Controller得到模型数据之后,通过视图解析器生成视图,渲染发送给用户,用户就看到了结果. 视图:view接口,来个源码查看:它由视图解析器实例化,是无状态的,所 ...

  7. spring mvc和spring配置扫描包问题

    spring mvc和spring俩配置文件,其中都要配置扫描包. <context:component-scan base-package="com.controller" ...

  8. Spring MVC 和 Spring 总结

    1. 为什么使用Spring ? 1). 方便解耦,简化开发 通过Spring提供的IoC容器,可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合. 2). AOP编程的 ...

  9. MVC+EF+Spring.Net代码生成器

    最近研究学习了MVC.EF等相关技术,写了一套项目架构.只要更改EF模型,生成数据库并转换T4模版.数据层和业务层就可以自动生成了. 主要用到的技术: 1.EF实体框架. 2.Spring.Net依赖 ...

  10. A real ROCA using Bootstrap, jQuery, Thymeleaf, Spring HATEOAS and Spring MVC

    http://www.tuicool.com/articles/ENfe2u https://github.com/tobiasflohre/movie-database What is the be ...

随机推荐

  1. Java项目服务器跨域设置

    引入jar包 cors-filter-2.6 :http://central.maven.org/maven2/com/thetransactioncompany/cors-filter/2.6/co ...

  2. win10系统配置FTP

    FTP是一种远程传输协议,支持这种协议的就是FTP服务器.我们可以在自己的PC机上创建一个.然后通过网页就可以访问FTP服务器下的文件夹. 搭建过程 1.首先需要开启FTP服务.在菜单中打开控制面板. ...

  3. Python 文件writelines() 方法和处理双层列表

    概述 writelines() 方法用于向文件中写入一序列的字符串. 这一序列字符串可以是由迭代对象产生的,如一个字符串列表. 换行需要制定换行符 \n. 语法 writelines() 方法语法如下 ...

  4. mongodb 的云数据库产品 atlas 的使用

    前言:最近发现 mlab 被mongodb 收购以后,不再支持新用户,推荐使用 MongoDB Atlas 第一步:注册或登陆 在MongoDB atlas首页,如果有账号,那就点击登陆.否则点击Ge ...

  5. ubuntu16.04下如何安装dtc工具?

    答: sudo apt-get install device-tree-compiler -y

  6. linux下如何查看某个容器的详细信息?

    答: 使用docker inspect <CONTAINER ID>即可

  7. LC 638. Shopping Offers

    In LeetCode Store, there are some kinds of items to sell. Each item has a price. However, there are ...

  8. Linux(CentOS / RHEL 7) 防火墙

    CentOS / RHEL 7 防火墙 Table of Contents 1. 简述 2. 常用基本操作 2.1. 查看防火墙状态 2.2. 开启防火墙 2.3. 关闭防火墙 2.4. 开机自动启动 ...

  9. CentOS / RHEL 配置yum源

    CentOS / RHEL 配置yum源 */--> CentOS / RHEL 配置yum源 Table of Contents 1. 前言 2. 关于yum 2.1. yum是什么 2.2. ...

  10. 解决docker命令行终端显示不全的问题

    访问docker容器,vim编辑文件时总是无法展示文件内容 解决 sudo docker exec -it -e LINES=$(tput lines) -e COLUMNS=$(tput cols) ...