spring笔记1 spring MVC的基础知识1
1,spring MVC的流程
优秀的展现层框架-Spring MVC,它最出彩的地方是注解驱动和支持REST风格的url。
| 流程编号 | 完成的主要任务 | 补充 |
| 1 | 用户访问web页面,发送一个http请求到服务器端的DispatcherServlet | 或发送一个ajax请求 |
| 2 |
服务器启动的时候加载spring-mvc的配置文件,扫描@Controller注解,得到一个HanderMapping (姑且把它叫做url,处理适配器映射,即Map<String,Class> ,String:用户访问的url,Class:url对于的HandlerAdapter类) |
通过用户访问的url,http的方法,请求报文头,请求参数,cookie等来查找是否存在HanderMapping里面, 如果存在,进入步骤3 |
| 3 | 得到HandlerAdapter,调用实际的Handler(处理类),处理之后得到ModelAndView,返回到DispatcherServlet | 包含视图的名称和所需数据 |
| 4 | 通过配置的视图解析器ViewResolver,结合ModelAndView的Model数据,得到一个无状态的View(视图对象) | 可配置不同的视图解析器,得到视图,比如说常见的jsp,FreeMarker,PDF,xls,报表等 |
| 5 | 视图对象解析到Http的Response中,返回给用户 | 用户可以看到不同的视图对应的东西,比如html或者pdf,xls等 |
配置DispatcherServlet
在web.xml中配置,示例如下:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:app.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>web</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:dispatcher.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>web</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
通过url-pattern,获取(截获)对所有的请求url的处理;
需要注意的地方有几个:
- 一个web.xml可以配置多个DispatcherServlet,处理不同的请求
- 可在DispatcherServlet中指定特殊的参数值,比如namespace,指定命名空间,那么如果没有指定contextConfigLocation,默认的配置文件名namespace.xml;contextConfigLocation可以指定多个位置,支持spring的资源路径(支持ant风格和简称代替);publishContext,是否发布到ServletContext中;publishEvent,是否要向容器发布一个ServletRequestHandledEvent事件(为了提高程序的性能,最好显示的关闭);
这里我有个小小的疑问,这里配置了两个容器,spring容器和springmvc容器,他们的实际关系如何,可否实现互相访问? 留到以后解决,mark一下;
通过上面的配置,应用启动的时候会初始化好spring MVC的所需组件资源,准备充当她展现层引擎框架的作用,具体准备了哪些组件资源呢?
查看下源码:如下图所示:有个protected的initStrategies方法,调用了init*的使用方法来完成组件资源的安装,用途从名称可以看出来,

比如这个方法第一步就是初始化spring的文件上传解析器组件,第二步是安装本地化解析相关的组件,以此类推...
关于具体的组件的种类繁多,可以进入源代码分析;比如文件上传的解析器MultipartResolver,有两种实现

默认配置哪一种,我在源码目录下找到一个DispatcherServlet.properties的文件,放出来看看,让大家知道实际的组件到底是哪些类控制的:
org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver
org.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolver
org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\
org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
org.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver,\
org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,\
org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver
org.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator
org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver
org.springframework.web.servlet.FlashMapManager=org.springframework.web.servlet.support.SessionFlashMapManager
比如最常见的ViewResolver默认使用的是org.springframework.web.servlet.view.InternalResourceViewResolver,这是解析jsp常用的视图解析器;
说了这么多,来个实例轻松下吧!(经典的注册,然后显示出用户列表)这里主要是想说下开发的流程:
| 流程编号 | 详细内容 | 说明 |
| 1 | 配置DispatcherServlet,指定配置文件的位置,关闭发布事件 | |
| 2 | 开发Controller类 | |
| 3 | 编写视图,比如说jsp | |
| 4 | 配置控制器,视图解析器 | |
| 5 | 测试页面功能 | |
| 6 | 结合springMVC的流程再回顾下过程,温故知新 |
//todo
2,spring MVC的注解驱动控制器,rest风格的支持
3,spring MVC的类型转换,格式转化,输入校验
4,spring MVC的视图
5,spring MVC的本地化解析,文件上传,静态资源处理,拦截器,异常处理等
6,小结
spring笔记1 spring MVC的基础知识1的更多相关文章
- 《Programming Hive》读书笔记(两)Hive基础知识
<Programming Hive>读书笔记(两)Hive基础知识 :第一遍读是浏览.建立知识索引,由于有些知识不一定能用到,知道就好.感兴趣的部分能够多研究. 以后用的时候再具体看.并结 ...
- tensorflow笔记(一)之基础知识
tensorflow笔记(一)之基础知识 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7399701.html 前言 这篇no ...
- php面试笔记(5)-php基础知识-自定义函数及内部函数考点
本文是根据慕课网Jason老师的课程进行的PHP面试知识点总结和升华,如有侵权请联系我进行删除,email:guoyugygy@163.com 在面试中,考官往往喜欢基础扎实的面试者,而函数相关的考点 ...
- php面试笔记(3)-php基础知识-运算符
本文是根据慕课网Jason老师的课程进行的PHP面试知识点总结和升华,如有侵权请联系我进行删除,email:guoyugygy@163.com 在面试中,考官往往喜欢基础扎实的面试者,而运算符相关的考 ...
- spring笔记3 spring MVC的基础知识3
4,spring MVC的视图 Controller得到模型数据之后,通过视图解析器生成视图,渲染发送给用户,用户就看到了结果. 视图:view接口,来个源码查看:它由视图解析器实例化,是无状态的,所 ...
- Spring笔记(4) - Spring的编程式事务和声明式事务详解
一.背景 事务管理对于企业应用而言至关重要.它保证了用户的每一次操作都是可靠的,即便出现了异常的访问情况,也不至于破坏后台数据的完整性.就像银行的自助取款机,通常都能正常为客户服务,但是也难免遇到操作 ...
- Spring笔记1——Spring起源及其核心技术
Spring的作用 当我们使用一种技术时,需要思考为什么要使用这门技术.而我们为什么要使用Spring呢?从表面上面SSH这三大框架中,Struts是负责MVC责任的分离,并且提供为Web层提供诸如控 ...
- php面试笔记(2)-php基础知识-常量和数据类型
本文是根据慕课网Jason老师的课程进行的PHP面试知识点总结和升华,如有侵权请联系我进行删除,email:guoyugygy@163.com 面试是每一个PHP初学者到PHP程序员必不可少的一步,冷 ...
- Spring笔记(6) - Spring的BeanFactoryPostProcessor探究
一.背景 在说BeanFactoryPostProcessor之前,先来说下BeanPostProcessor,在前文Spring笔记(2) - 生命周期/属性赋值/自动装配及部分源码解析中讲解了Be ...
- Spring笔记(7) - Spring的事件和监听机制
一.背景 事件机制作为一种编程机制,在很多开发语言中都提供了支持,同时许多开源框架的设计中都使用了事件机制,比如SpringFramework. 在 Java 语言中,Java 的事件机制参与者有3种 ...
随机推荐
- 每天一个linux命令(58):telnet命令
telnet命令通常用来远程登录.telnet程序是基于TELNET协议的远程登录客户端程序.Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式.它为用户 ...
- NoSQL和Redis简介及Redis在Windows下的安装和使用教程
转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/103.html?1455869099 NoSQL简介 介绍redis前,我 ...
- java基础 数组15
15.找出如下数组中最大的元素和最小的元素, a[][]={{3,2,6},{6,8,2,10},{5},{12,3,23}}
- WPF入门教程系列四——Dispatcher介绍
一.Dispatcher介绍 微软在WPF引入了Dispatcher,那么这个Dispatcher的主要作用是什么呢? 不管是WinForm应用程序还是WPF应用程序,实际上都是一个进程,一个进程可以 ...
- Java基础-接口中国特色社会主义的体制中有这样的现象:地方省政府要坚持党的领导和按 照国务院的指示进行安全生产。请编写一个java应用程序描述上述的体制现象。 要求如下: (1)该应用程序中有一个“党中央”接口:CentralPartyCommittee,该接口中 有个“坚持党的领导”方法:void partyLeader() (2)该应用程序中有一个“国务院”抽象类:StateCouncil,
36.中国特色社会主义的体制中有这样的现象:地方省政府要坚持党的领导和按 照国务院的指示进行安全生产.请编写一个java应用程序描述上述的体制现象. 要求如下: (1)该应用程序中有一个“党中央”接口 ...
- c#将list集合转换为datatable的简单办法
public static class ExtensionMethods { /// <summary> /// 将List转换成DataTabl ...
- transform你不知道的那些事
transform是诸多css3新特性中最打动我的,因为它让方方正正的box module变得真实了. transform通过一组函数实现了对盒子大小.位置.角度的2D或者3D变换.不过很长时间内,我 ...
- IIS 6中mimemap属性的默认设置
Collapse this tableExpand this table Extension MIME type .ra audio/x-pn-realaudio .sv4crc applicatio ...
- Parallel并行化编程
在很多场景中我们需要通过并行化的方式来提高程序运行的速度,比较典型的需求就是并行下载.前期遇到一个需求是要批量下载瓦片,每次大概下载上百万个瓦片,要想提高瓦片的下载速度,只能通过并行化的方式,下面把我 ...
- Windows编程中UNICODE和_UNICODE定义问题
Windows编程中UNICODE和_UNICODE定义问题 先转一篇文章: 初学Windows SDK编程时碰到过这个问题,相信很多初学Windows编程的人也都碰到过,后来慢慢搞明白些了,但有时别 ...