Spring MVC(一)Spring MVC的原理
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的原理的更多相关文章
- [MVC] 深入浅出Spring MVC
[MVC] 深入浅出Spring MVC 转:http://4925054.blog.51cto.com/4915054/1176855 Spring MVC主要包括以下要点: 1:由Dispatch ...
- Spring系列(七) Spring MVC 异常处理
Servlet传统异常处理 Servlet规范规定了当web应用发生异常时必须能够指明, 并确定了该如何处理, 规定了错误信息应该包含的内容和展示页面的方式.(详细可以参考servlet规范文档) 处 ...
- 【MVC】Spring MVC常用配置
一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 <!--conf ...
- Spring.net介绍及MVC中应用
Spring.net两大核心内容: IOC(控制反转) 传统的面相对象思维模式是对象A依赖对象B,对象B的实例化和调用都在对象A中发生,一旦对象B中发生变化,对象A也要随之变化,这样使得程序间行程了紧 ...
- Spring Boot与Spring MVC集成启动过程源码分析
开源项目推荐 Pepper Metrics是我与同事开发的一个开源工具(https://github.com/zrbcool/pepper-metrics),其通过收集jedis/mybatis/ht ...
- spring笔记3 spring MVC的基础知识3
4,spring MVC的视图 Controller得到模型数据之后,通过视图解析器生成视图,渲染发送给用户,用户就看到了结果. 视图:view接口,来个源码查看:它由视图解析器实例化,是无状态的,所 ...
- spring mvc和spring配置扫描包问题
spring mvc和spring俩配置文件,其中都要配置扫描包. <context:component-scan base-package="com.controller" ...
- Spring MVC 和 Spring 总结
1. 为什么使用Spring ? 1). 方便解耦,简化开发 通过Spring提供的IoC容器,可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合. 2). AOP编程的 ...
- MVC+EF+Spring.Net代码生成器
最近研究学习了MVC.EF等相关技术,写了一套项目架构.只要更改EF模型,生成数据库并转换T4模版.数据层和业务层就可以自动生成了. 主要用到的技术: 1.EF实体框架. 2.Spring.Net依赖 ...
- 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 ...
随机推荐
- 微信公众号【黄小斜】和【Java技术江湖】
- moveUp()
这个函数内容有点多,想讲一下大概思路: 向上移有两种情况1.前面为空白 这种情况有两个步骤 (1)将人当前的位置设置为空白(0), (2)再讲人前面的位置设置为人(2)2.前面为箱子 当前面为箱子时有 ...
- data binding 优缺点
文章: 1. [译文] 我不使用Android Data Binding的四个理由 https://www.jianshu.com/p/559adeaaeffd 2. 原文:https://blog. ...
- 用PHP自带函数对二维数组进行排序
经常会面临这样的需求,虽然有时候我们可以在数据库查询的时候,直接对数据进行排序,但还是无法满足日益复杂的业务需求. 这里边会用到两个函数 一个是array_column()函数,这个函数接受三个参数. ...
- Spring对象依赖关系
Spring中,如何给对象的属性赋值? [DI, 依赖注入] 1) 通过构造函数 2) 通过set方法给属性注入值 3) p名称空间 4)自动装配(了解) 5) 注解 package loade ...
- linux下正确卸载rpm包
linux下正确卸载rpm包 rpm -qa | grep -i ntp 执行结果: [root@bogon elasticsearch-head]# rpm -qa | grep -i ntp fo ...
- redis集群 应该注意的问题
redis cluster注意的问题 : ‘cluster-require-full-coverage’参数的设置.该参数是redis配置文件中cluster模式的一个参数,从字面上基本就能看出它的作 ...
- Qt在控制台输出中文的解决办法(转载)
转载网址:https://blog.csdn.net/qq_22512533/article/details/75408984 按下快捷键Win+R,输入regedit打开注册变编辑器,依次找到 HK ...
- VS2019 安装并破解 DevExpress 19.2 插件
0.写在最前 本人vs版本为: 1.下载DevExpress 最新版本插件程序 官网下载试用30天地址: https://www.devexpress.com/products/net/con ...
- lua程序设计(第4版)第二章习题
练习2.1:修改八皇后问题的程序,使其在输出第一个解后即停止运行. 解法:要使得有一个解就返回,首先要获得一个解,然后再返回或停止运行 练习2.2:解决八皇后问题的另一种方式是,先生成1-8之间的所有 ...