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的更多相关文章

  1. 《Programming Hive》读书笔记(两)Hive基础知识

    <Programming Hive>读书笔记(两)Hive基础知识 :第一遍读是浏览.建立知识索引,由于有些知识不一定能用到,知道就好.感兴趣的部分能够多研究. 以后用的时候再具体看.并结 ...

  2. tensorflow笔记(一)之基础知识

    tensorflow笔记(一)之基础知识 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7399701.html 前言 这篇no ...

  3. php面试笔记(5)-php基础知识-自定义函数及内部函数考点

    本文是根据慕课网Jason老师的课程进行的PHP面试知识点总结和升华,如有侵权请联系我进行删除,email:guoyugygy@163.com 在面试中,考官往往喜欢基础扎实的面试者,而函数相关的考点 ...

  4. php面试笔记(3)-php基础知识-运算符

    本文是根据慕课网Jason老师的课程进行的PHP面试知识点总结和升华,如有侵权请联系我进行删除,email:guoyugygy@163.com 在面试中,考官往往喜欢基础扎实的面试者,而运算符相关的考 ...

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

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

  6. Spring笔记(4) - Spring的编程式事务和声明式事务详解

    一.背景 事务管理对于企业应用而言至关重要.它保证了用户的每一次操作都是可靠的,即便出现了异常的访问情况,也不至于破坏后台数据的完整性.就像银行的自助取款机,通常都能正常为客户服务,但是也难免遇到操作 ...

  7. Spring笔记1——Spring起源及其核心技术

    Spring的作用 当我们使用一种技术时,需要思考为什么要使用这门技术.而我们为什么要使用Spring呢?从表面上面SSH这三大框架中,Struts是负责MVC责任的分离,并且提供为Web层提供诸如控 ...

  8. php面试笔记(2)-php基础知识-常量和数据类型

    本文是根据慕课网Jason老师的课程进行的PHP面试知识点总结和升华,如有侵权请联系我进行删除,email:guoyugygy@163.com 面试是每一个PHP初学者到PHP程序员必不可少的一步,冷 ...

  9. Spring笔记(6) - Spring的BeanFactoryPostProcessor探究

    一.背景 在说BeanFactoryPostProcessor之前,先来说下BeanPostProcessor,在前文Spring笔记(2) - 生命周期/属性赋值/自动装配及部分源码解析中讲解了Be ...

  10. Spring笔记(7) - Spring的事件和监听机制

    一.背景 事件机制作为一种编程机制,在很多开发语言中都提供了支持,同时许多开源框架的设计中都使用了事件机制,比如SpringFramework. 在 Java 语言中,Java 的事件机制参与者有3种 ...

随机推荐

  1. jquery 之 Deferred 使用与实现

    观察者模式是开发中经常使用的模式,这个模式由两个主要部分组成:主题和观察者.通过观察者模式,实现主题和观察者的解耦. 主题负责发布内容,而观察者则接收主题发布的内容.通常情况下,观察者都是多个,所以, ...

  2. SDWebImage清除图片缓存

    背景: 使用 SDWebImage 库,由于内存中一直缓存着加载的图片,而导致内存过高(我们无法手动管理内存),弹出内存警告而导致程序很卡或者直接crash掉. 我的解决方法: 在AppDelegat ...

  3. Android应用中使用AsyncHttpClient来异步网络数据(转载)

    摘要: 首先下载AsyncHttpClient的库文件,可以自行搜索,可以到下面地址下载 http://download.csdn.net/detail/xujinyang1234/5767419 测 ...

  4. 行集函数:OpenRowSet 和 OpenQuery

    在SQL Server中,行集函数是不确定性的,这意味着,每次调用,返回值不总是相同的.返回值是不确定的,这意味着,对于相同的输入值,不保证每次返回的值都是相同的.对行集函数的每次调用,行集函数都是单 ...

  5. poj 1905Expanding Rods

    /* 二分 + 几何 弧长L, 圆半径R, 弧度 q, L=R*q; 二分: 弧度(0~PI) 或者 高度(L/2~L) */ #include<cstdio> #include<i ...

  6. 拓扑排序(一)之 C语言详解

    本章介绍图的拓扑排序.和以往一样,本文会先对拓扑排序的理论知识进行介绍,然后给出C语言的实现.后续再分别给出C++和Java版本的实现. 目录 1. 拓扑排序介绍 2. 拓扑排序的算法图解 3. 拓扑 ...

  7. C#基础-----面向对象

    C#基础-----面向对象(一) 分类: C#基础2015-06-08 14:10 2人阅读 评论(0) 收藏 举报 1,面向对象 什么是面向对象?一个分析问题的方式(增强了程序的可扩展性) 几个名词 ...

  8. Shader 简明入门教程

    Unity3D的所有渲染工作都离不开着色器(Shader),如果你和我一样最近开始对Shader编程比较感兴趣的话,可能你和我有着同样的困惑:如何开始?Unity3D提供了一些Shader的手册和文档 ...

  9. jQuery判断当前元素显示状态并控制元素的显示与隐藏

    1.jQuery判断一个元素当前状态是显示还是隐藏 $("#id").is(':visible');   //true为显示,false为隐藏 $("#id") ...

  10. C#中的new修饰符

    MSDN:在用作声明修饰符时,new 关键字可以显式隐藏从基类继承的成员. 隐藏继承的成员时,该成员的派生版本将替换基类版本. 虽然可以不使用 new 修饰符来隐藏成员,但将收到编译器警告. 如果使用 ...