[SpringMVC]SpringMVC学习笔记一: springmvc原理及实例解析.
前言:
今天来回顾下SpringMVC的开发原理, 使用图文并茂的方式 来解析其中的内幕, 我相信懂了其中的运行机制后, 对于面试中SpringMVC大家都可以说so easy了.
一, 图示法

第二张图的前端控制器应为DispatcherServlet. 看完图中的整体流程后, 我们再使用实际代码来说明每一步需要处理 的事情.
二. 代码示例
第一步: 用户发送请求, 前端控制器DispatcherServlet开始处理.
在web.xml中配置前端控制器:
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 默认加载springmvc配置文件: 但是springmvc配置文件必须符合规范
名称规范:servelt-name-servlet.xml======springmvc-servlet.xml
路径规范:springmvc-servlet.xml必须在WEB-INF下面
但是自己可以通过配置init-param属性来指定springmvc配置文件的名称和路径.
-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet> <servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
第二步:请求寻找Action(处理映射器处理)
处理映射器有三种, 这三种在配置和代码实现中稍有不同, 下面给出三种不同模式下的springmvc.xml的配置:
BeanNameUrlhandlerMapping:
功能:默认的映射器,复杂寻找Controller。根据bean(Controller)的name属性的匹配daoController. 需要在springmvc定义:
SimpleUrlHandlerMapping:简单处理映射器, 功能: 寻找Controller,把url进行集中处理.
通过prop中的value值区 对应找到具体的Controller, 当在浏览器中输入abc.do 或者wangmeng.do或者barrywang.do都会映射到这个Controller去执行.
ControllerClassNameUrlHandlerMapping:类名映射器: 通过类名访问, 首字母需要小写. 类名如果有三个单词以上: 除了最后一个, 其他的单词首字母都小写.
如果配置了 就可以在浏览器上直接访问controller的名字.在浏览器直接使用userController去访问即可 .
如若使用注解开发, 那么注解的处理器映射器的写法是: springmvc.xml
<!-- 配置注解的处理器映射器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>
第三步:处理器映射器返回chain给前端控制器.
第四步:请求执行Action.
第五步:处理器适配器HandlerAdapter 执行Action.
处理器适配器也有两种.
SimpleControllerHandlerAdapter
功能:执行Controller。调用Controller方法。默认的处理使配置
如果使用简单处理器适配器, 那么我们自定义的Handler方法则需要实现Controller接口.
自定义Handler:
public class UserController implements Controller{
@Override
public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
//接受请求,封装参数,验证参数,调用业务方法,返回执行结果
//返回视图。
ModelAndView mv = new ModelAndView();
//设置数据,任意pojo,在页面回显
mv.addObject("Hello", "凤姐喜欢你,非常喜欢你!");
//指定返回页面,指定物理视图
//mv.setViewName("/WEB-INF/jsps/index.jsp");
//指定返回页面, 指定逻辑视图
mv.setViewName("index");
return mv;
}
}
在springmvc中的配置:
<!-- 配置处理器适配器
功能: 执行Controler,调用Controller方法.
SimpleControllerHandlerAdapter:默认的处理使配置
-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean> <!-- 配置自定义bean -->
<bean id="user" name="/hello.do" class="cn.augmentum.controller.UserController"></bean>
HttpRequestHandlerAdapter:执行实现接口HttpRequestHandler的Controller。
自定义的Handler需要实现HttpRequestHandler接口.
public class ItemsController implements HttpRequestHandler{
public void handleRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//给request域中设置值
request.setAttribute("hello", "奥巴马喜欢凤姐!");
//使用Request转发
request.getRequestDispatcher("/WEB-INF/jsps/index.jsp").forward(request, response);
}
}
spring.xml中的配置:
<!-- 创建执行实现HttpRequestHandler接口适配器 -->
<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"></bean>
如若使用注解开发, 那么注解形式的处理器适配器写法为: springmvc.xml:
<!-- 配置注解的处理器适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>
第六步:自定义Handler(Controller)返回ModleAndView
这里有两种方式, 一种是指定返回页面,指定物理视图. 另一种是指定返回页面, 指定逻辑视图. 如果是指定逻辑视图, 我们还需要在springmvc中配置视图解析器.
第七步:处理器适配器将ModleAndView返还给前端控制器进行处理.
第八/九步: 前端控制器像视图解析器发送请求, 请求解析ModleAndView, 并将解析后的物理视图返回.(如果本身定义的就是物理视图则无需解析)
在springmvc.xml中需要配置:

这里是解析UserController.java从传递过来的: index, 经过解析后得到物理视图为: /WEB-INF/jsps/index.jsp.
第十/十一 步: 将解析后的物理视图 渲染, 然后展示index.jsp给用户.
第十二步: 响应页面.
到了这里SpringMVC的整个执行流程就非常清晰明了啦, 这里严格的使用了MVC的设计思想, 如果面试中遇到springmvc执行流程的问题, 相信大家再也不用担心了.
更多的推荐大家有时间的话看看springmvc的源码解析: http://my.oschina.net/lichhao/blog?catalog=285356
[SpringMVC]SpringMVC学习笔记一: springmvc原理及实例解析.的更多相关文章
- Spring MVC 学习笔记12 —— SpringMVC+Hibernate开发(1)依赖包搭建
Spring MVC 学习笔记12 -- SpringMVC+Hibernate开发(1)依赖包搭建 用Hibernate帮助建立SpringMVC与数据库之间的联系,通过配置DAO层,Service ...
- springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定
springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定 标签: springmvc springmvc学习笔记13-springmvc注解开发之集合类型參数绑定 数组绑定 需 ...
- springmvc学习笔记(12)-springmvc注解开发之包装类型參数绑定
springmvc学习笔记(12)-springmvc注解开发之包装类型參数绑定 标签: springmvc springmvc学习笔记12-springmvc注解开发之包装类型參数绑定 需求 实现方 ...
- springmvc学习笔记(10)-springmvc注解开发之商品改动功能
springmvc学习笔记(10)-springmvc注解开发之商品改动功能 标签: springmvc springmvc学习笔记10-springmvc注解开发之商品改动功能 需求 开发mappe ...
- 机器学习实战(Machine Learning in Action)学习笔记————03.决策树原理、源码解析及测试
机器学习实战(Machine Learning in Action)学习笔记————03.决策树原理.源码解析及测试 关键字:决策树.python.源码解析.测试作者:米仓山下时间:2018-10-2 ...
- python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例
python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例 新浪爱彩双色球开奖数据URL:http://zst.aicai.com/ssq/openInfo/ 最终输出结果格 ...
- OGG学习笔记02-单向复制配置实例
OGG学习笔记02-单向复制配置实例 实验环境: 源端:192.168.1.30,Oracle 10.2.0.5 单实例 目标端:192.168.1.31,Oracle 10.2.0.5 单实例 1. ...
- python3.4学习笔记(十一) 列表、数组实例
python3.4学习笔记(十一) 列表.数组实例 #python列表,数组类型要相同,python不需要指定数据类型,可以把各种类型打包进去#python列表可以包含整数,浮点数,字符串,对象#创建 ...
- 学习笔记_J2EE_SSM_01_spring+springMVC+Mybatis整合_XML配置示例
spring+springMVC+Mybatis整合_XML配置示例 1.概述 spring+springMVC+Mybatis整合 XML配置方式 1.1 测试环境说明 名称 版本 备注 操作系统 ...
- SpringMVC学习笔记:SpringMVC框架的执行流程
一.MVC设计模式 二.SpringMVC框架介绍 三.SpringMVC环境搭建 四.SpringMVC框架的请求处理流程及体系结构
随机推荐
- Win7下安装一个装逼文本编辑器Atom + activate-power-mode插件
Atom是Github推出的一个文本编辑器,搜索一下大概是给Web前端用的,最近比较火的是他的一个插件activate-power-mode,可以实现打字屏振效果. 用来装装逼还是挺适合的,本来想试试 ...
- JAVA里的异常
一.概念和分类 JAVA程序设计语言中,异常对象都是Throwable类的一个实例.Throwable分为Error和Exception. 其中,Error类层次结构描述了JAVA运行时系统的内部错误 ...
- hdu acm 2082 找单词
找单词 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- 各廠商ERP系統架構圖連結 (ERP流程圖)(轉)
各廠商ERP系統架構圖連結 (ERP流程圖) 資料來源 Google圖片搜尋ERP整理而來 資通電腦 ArgoERP 資通電腦 Oracle ERP 鼎新電腦 Workflow ERP鼎新電腦 S ...
- SHELL实现同时操作多个服务器:服务器批量管理
引言: 1.如果你想知道你所管理的几万台服务器的/home分区使用率是多少. 2.如果你想为你所管理的几万台服务器添加同一个计划任务你该怎么办? 3.如果你想让你所管理的几万台 ...
- 简单易懂的Activity四种启动模式
Activity的四种启动模式 我们在项目开发的过程中,会涉及到应用中各个Activity的跳转,有些Activity是可以复用,不用重复加载,节约内存的使用. 将第二个Activity的启动模式修改 ...
- 影响Java EE性能的十大问题(转)
本文作者是一名有10多年经验的高级系统架构师,他的主要专业领域是Java EE.中间件和JVM技术.他在性能优化和提升方面也有很深刻的见解,下面他将和大家分享一下常见的10个影响Java EE性能问题 ...
- storysnail的Windows串口编程笔记
storysnail的Windows串口编程笔记 作者 He YiJun – storysnail<at>gmail.com 团队 ls 版权 转载请保留本声明! 本文档包含的原创代码根据 ...
- Swift 对比学习 (二)
书接上回,可以作为参数和返回值的函数数型,以及嵌套函数,绝对继承了动态语言的优良传统: 函数嵌套了,那必然少不了闭包问题,Swift的闭包表达式语法也蛮有趣的. { (paraeeters) -> ...
- SQL语言分类
SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML, 数据定义语言DDL,数据控制语言DCL. 1 数据查询语言DQL数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHER ...
