Spring MVC研究与学习

本文档主要介绍了Spring MVC的基本概念和核心组件,包括DispatcherServlet、控制器、处理器映射、视图解析和异常处理。Spring MVC以其清晰的角色划分、高度可定制性和适应性,与Struts竞争,并提供了如AbstractController、WebContentGenerator等控制器实现。此外,文章还讨论了如何通过配置BeanNameUrlHandleMapping和SimpleUrlHandleMapping进行处理器映射,以及UrlBasedViewResolver在视图解析中的作用。
摘要由CSDN通过智能技术生成

1        前言

Spring MVC 是spring提供的一种web框架,也是一种很成熟的MVC框架。我们平时大多数时间用的都是struts,对于struts做过web的程序员相信都不陌生。Spring MVC的出现主要和struts进行抗衡,对于我们来说掌握spring mvc 不但拓展了一下知识面而且为以后的工作打好基础并且可以对spring 框架有进一步的了解与掌握,所以学习spring mvc技术还是有必要的。

2        Spring MVC简介

Spring MVC 主要围绕分发器(DispatcherServlet)设计的,DispatcherServlet将web请求分发给不同的处理器来进行处理。框架包括可配置的处理器映射、视图解析,本地化,主题解析等等。默认的处理器是一个简单的控制器(Controller)接口,我们可以实现这个接口来进行生成应用的控制器,使用spring自带的一些控制器更好一些。比如AbstractController,SimpleFormController等,在应用的时候我们根据据需要来继承这些类即可。Spring MVC框架主要有以下特点:

 

l  角色划分详细清晰:控制器、验证器、命令对象、表单对象和模型对象;分发器、视图解析器和处理器映射等。

 

l  可适应性强,但不具有强制性:根据不同的情况,使用使用任何你需要的控制器子类,而不像struts那样任何控制器类都需要从某一个类继承。

 

l  可定制的处理器映射,可定制的视图解析:灵活模型可以根据名字/值映射,处理器映射和视图解析使用应用从简单过渡到复杂。

 

l  直接将框架类和应用类都作为javabean配置,包括通过应用上下文配置中间层的引用,例如从web控制器到业务对象和验证器的引用。

 

以上大致是spring mvc最主要的特点,本人根据查阅资料以及亲自实践,对于spirng  mvc

有了一些了解,本文档主要对于spring 中的几个重要的概念以及我们在web开发中会常用到的知识进行说明,主要面向应用,至于更深入的掌握,需要大家自行研究。

 

3        Spring MVC核心概念

Spring mvc 也是一种成熟的mvc web框架,所以mvc涉及的概念都会包含与struts是有所区别的,初次之外,spring提供自己独特的一些概念。

3.1    分发器(DispatcherServlet

Spring mvc框架类似于struts也是一个请求驱动的web框架其设计围绕一个能将请求分发到控制器的servlet,它和spring的ApplicationContext完全集成在一起,允许你使用spring的其他功能。DispatcherServlet需要定义在web.xml文件中,DispatcherServlet能够处理的请求必须定义在同一个web.xml中使用url-mapping进行映射,这一点类似于servlet。同时也和struts类似,struts2中有拦截器的概念,所有请求都由FilterDispathcer类进行拦截之后再寻找控制器。如图:


  

                         图  A -1

上图中以.htm结尾的请求都会被DispatcherServlet来进行处理。每一个DispatcherServlet需要有一个应用上下文,它包含了DispatcherServlet配置所需要的bean。DispatcherServlet在初始化时会默认在你的web-inf目录下找[servlet-name]-servlet.xml文件,这个默认值可以使用初始化参数修改,通常我们修改成为applcationContext.xml文件。DispatcherServlet需要配置的bean包括处理器映射、控制器、视图解析器等等,稍后我们逐一介绍。

3.2    控制器

控制器的概念是MVC模式的一部分,使用过struts的人相信都一定不陌生。Spring 以一种抽象的模式实现了控制器,使得不同类型的控制器得意创建。Spring包含表单控制器,命令控制器以及执行向导逻辑控制器等。Spring mvc控制器的基础是org.springframework.mvc.Controller接口。其中生命了一个方法:handleRequest,返回ModelAndView类型,返回一个模型和视图。Spring还提供了许多包含特定功能的控制器,这些控制器都有以上共同的功能。

3.2.1AbstractController和WebContentGenerator

只有一个控制器接口是不够的,spring提供了一套基础设施,所有的spring控制器都从AbstractController来继承,当使用AbstractController作为你的控制器基类时,只需重载它的handleRequestInternal方法,并返回一个ModelAndView对象。如图:


                    图  A – 2

WebContentGenerator是AbstractController的超类。

3.2.2 命令控制器

Spring的CommandControllers是MV C 的重要部分。命令控制器提供了一种和数据对象交互的方式,并动态地将来自请求参数绑定到你指定的数据对象上,和struts1的actonForm相比,在spring中你不需要实现任何接口来实现数据绑定。Spring中有以下命令控制器可以使用:

l  AbstractCommandController  你可以继承这个类来实现你自己的控制器,它可以提供验证功能,并且让你在控制器中定义如何处理包含请求参数的数据对象。

l  AbstractFormController   使用这个控制器,你可以定义表单,并使用你从控制获取的数据对象构建表单。当用户输入表单时这个类将用户输入的内容绑定到数据对象并进行验证,将对象提交给控制器。如果你想提交表单,并且不想在应用上下文中指定显示给用户的视图,便可使用这个类。

l  SimpleFormController 它能用相应的数据对象帮你创建表单。SimpleFormController让你指定一个命令对象,表单试图名,当表单提交成功后显示给用户的视图名等。

l  WizardFormController 功能最强的控制器,允许你以向导风格处理数据对象,当使用大的数据对象时,这样的方式相当方便。

 

3.3    处理器映射

所谓处理映射,你可以将web请求映射到正确的处理器(控制器)上,也就是什么样的请求需要使用哪种处理器来处理。

当收到请求时分发器将请求交给处理器映射,让它检查请求并获得一个正确的HandlerExcutionChain(执行链),然后执行定义在执行链中的处理器。

Spring mvc 中两个常用的处理器映射:

 

l  BeanNameUrlHandleMapping  它是一个简单强大的处理器,收到http请求后映射到应用上下文中的bean名字上,例如,以下的配置能将http://samples.com/editaccount.form的http请求映射到合适的FormController上,如图:


                             A – 3

如果使用这个处理器映射,你不必在应用上下文中定义它。缺省情况下,上下文中没有找到处理器映射,分发器会为你创建一个BeanNameUrlHandleMapping。

 

l  SimpleUrlHandleMapping  这是一个更为强大的处理器映射,配置如图:


                          A – 4

 

这个处理器首先将所有目录文件中名为help.html的请求传递给helpContrller,所有ex目中资源名以view开始,.html为结尾的请求都会被传递给控制器。

 

3.4    视图与视图解析

所有MVC 框架都会有自己的处理视图的方式,spring提供了视图解析器,处理视图的两个重要的类是ViewResolver和View 。View接口将请求传递给某个视图技术,ViewResolver提供了一个视图名和实际视图之间的映射。Spring mvc 的每个控制器都返回一个ModelAndView实例,spring 中的视图由视图名识别,解析器解析。Spring中提供很多视图解析器,如下图:


         图  A - 5

当使用jsp时,可以使用UrlBasedViewResolver。这个视图解析器将视图名翻译成URL,并将请求传递给RequestDispatcher显示视图。


                      图  A – 6

当返回test作为视图名时,这个视图解析器将请求传递给RequestDispatcher,RequestDispatcher再将请求传递给/WEB-INF/jsp/test.jsp。“prefix”为视图名字test的前缀,“suffix”为后缀。

当在一个web应用中使用不同的视图技术时,你可以使用ResourceBunndleViewResolver。

 

3.5    处理异常

Spring提供了HandlerExceptionResolvers来帮助处理控制器处理请求时发生的异常。HandlerExceptionResolvers会通知你抛出异常时如何处理。HandlerExceptionResolvers中有一个resolveException方法并返回ModelAndView。

 

4        总结

Springl mvc 中还有一些其他的概念例如使用本地化信息、主题使用、文件上传的支持等,这里就不一一介绍了。本文档的目的主要给大家梳理下spring mvc 中比较长用的概念,希望对大家能有个入门的帮助,至于更深入的研究,大家自己可以查阅互联网以及spring的相关文档。用过struts的人再学习spring不是特别的费力,因为好多概念都是大同小异的。相比之下spring mvc 概念划分的比较清晰详细,这个既是优点,也是它的一个缺点,在项目中采用哪种框架,因人而宜。大家只要亲自动手做一个小demo就可以了解并掌握了,谢谢大家捧场!

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值