什么是 spring MVC
Spring MVC 属于 SpringFrameWork 的后续产品, 已经融合在 Spring web Flow 里面. Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块. 使用 Spring 可插入的 MVC 架构, 从而在使用 Spring 进行 WEB 开发时, 可以选择使用 Spring 的 SpringMVC 框架或集成其他 MVC 开发框架, 如 Struts1(现在一般不用),Struts2(一般老项目使用)等.
spring mvc 简介
springmvc 是 spring 的一个模块, 提供 web 层解决方案(基于 mvc 设计架构)
采用 springmvc 的好处
Spring MVC 中提供一个 DispatcherServlet, 无需额外开发.
springMVC 中使用基于 xml 的配置文件, 可以编辑, 无需重新编译应用程序.
springMVC 实例化控制器, 并根据用户输入来构造 bean.
springMVC 可以自动绑定用户输入, 并正确的转换数据类型. 例如, springMVC 能自动解析字 符串, 并设置 float 或 decimal 类型的属性.
springMVC 可以检验用户输入, 若校验不通过, 则重定向回输入表单. 输入校验是可选的, 支持编码方式以及声明. 关于这一点, springMVC 内置了常见的校验器.
springMVC 是 spring 框架的一部分. 可以利用 spring 提供的其它能力.
springMVC 支持国际化和本地化, 支持根据用户区域显示多国语言.
springMVC 支持多种视图技术, 最常见的 JSP 技术以及其它技术包括 Velocity 和 FreeMarker.
使用 springMVC 的优势
1, 清晰的角色分配: 前段控制器(dispatcherServlet) , 请求到处理器映射(handlerMapping), 处理器适配器(HandlerAdapter), 视图解析器(ViewResolver),
处理器和页面控制器(Controller), 验证器(Validator), 命令对象(Command),
表单对象(FromObject)
2, 分工明细
3, 和 Spring 框架无缝结合
spring mvc 框架流程图
SpringMvc 整个的执行流程:
1, 发起请求到前端控制器(DispatcherServlet )
2, 前端控制器请求 HandlerMapping 查找 Handler(可以根据 xml, 注解进行查找)
3, 处理器映射器 HandlerMapping 向前端控制器 DispatcherServlet 返回 Handler
4, 前端控制器 DispatcherServlet 调用处理器适配器 HandlerAdapter 执行 Handler
5, 处理器适配器 HandlerAdapter 执行 Handler
6,Handler 执行完给处理器适配器返回 ModelAndView
7, 处理器适配器向前端控制器返回 ModelAndView (ModelAndView 是 SpringMvc 的底层对象 包括 model 和 view)
8, 前端控制器请求视图解析器去解析视图
根据逻辑视图名解析成真正的视图(jsp)
9, 视图解析器向前端控制器返回 view
10, 前端控制器进行视图渲染
视图渲染将模型数据 (模型数据在 ModelAndView 对象中) 填充到 request 域
11, 前端控制器向用户响应结果
组件:
1, 前端控制器 DispatcherServlet(不需要程序员开发)
作用接收请求, 响应结果, 相当于转发器, 中央处理器.
有了 DispatcherServlet 减少了其它组件之间的耦合度.
2, 处理器映射器 HandlerMapping(不需要程序员开发)
作用: 根据请求的 url 查找 Handler
3, 处理器适配器 HandlerAdapter
作用: 按照特定规则 (HandlerAdapter 要求的规则) 去执行 Handler
4, 处理器 Handler(需要程序员开发)
注意: 编写 Handler 时按照 HandlerAdapter 的要求去做, 这样适配器才可以去正确执行 Handler
5, 视图解析器 View resolver(不需要程序员开发)
作用: 进行视图解析, 根据逻辑视图名解析成真正的视图(view)
6, 视图 View(需要程序员开发 jsp)
View 是一个接口, 实现类支持不同的 View 类型(jsp,freemarker,pdf...)
springMVC 常用注解
1. 在 struts-config.xml 文件中加入
2. 在 applicationContext.xml 文件中加入
3.cn.base.GetPersonListAction 实现请求响应代码
可以看出一次请求需求如此多的步骤, 在加上一个项目下来有很多这样的请求响应, 将给配置文件管理带来很大的麻烦.
经过对 Spring 的深入应用, Spring 本身提供的 URL 请求控制, 对其天然支持可以让我们不需要 applicationContext.xml 再次声明一次 URL 请求 Bean , 即减少了 Struts 的声明 URL , 达到减少些繁琐的配置. 但只是少了一些而已, 同样也会面临着配置文件的管理问题.
Spring 注解将给我们的工作带来些轻松, 利用反射机制原理出现的注解就是为了解决配置大量的配置问题. 请看下处理一次简单的请求响应代码
@Controller -- 声明控制器
@RequestMapping("/person") - 声明 URL
public class PersonControl extends BaseController {
@Autowired - 业务接口注入
private personServices personServices;/*** 获得人员列表 *@param request* @param response* @throws Exception*/
@RequestMapping(params = "method=geList") -- 即处理 / person.do? method=geList 方法
public void getnodeList(HttpServletRequest request,HttpServletResponse response) throws Exception { // 处理请求 // 处理响应}}
可以看出, 在代码上加入注解可以省去我们上面说的多个配置文件的工作, 达到简便的 MVC 处理请求响应.
再配上简单的配置文件声明, 即可轻松处理项目的全部请求控制工作.
来源: http://www.jianshu.com/p/e8e9746da032