1、Spring MVC 技术体系介绍2022-12-61Spring MVC 培训培训孙林孙林MVC模式介绍Spring MVC 架构Spring MVC 重要组件2022-12-62Spring MVC 培训培训孙林孙林目录目录MVCMVC模式介绍模式介绍J2EEJ2EE中的中的MVCMVC2022-12-63Spring MVC 培训培训孙林孙林模型-视图-控制器(Model-View-Controller)把一个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离,这样一个应用被分成三个层模型层、视图层、控制层。MVC模式是解决了展示以及业务逻辑实现的分离
2、。让开发者可以专心地解决不同层的编码。也方便代码重用和测试和维护。JSP、HTML、XMLServlet、Struts、Spring实体Bean、Entity、VO、FormBean2022-12-64Spring MVC 培训培训孙林孙林Services层层View展示层Controller控制层业务逻辑处理层数据持久化层(DAO)实体Bean、Entity层数据库2022-12-65Spring MVC 培训培训孙林孙林MVC是一种复合模式,结合了观察者模式、策略模式、组合模式、适配器模式。模型使用观察者模式,以便观察者更新,同时保持两者之间的解耦。控制器是视图的策略,视图使用组合模式实现
3、用户界面。适配器模式用来将模型适配成符合现有视图和控制器的需要的模型。这些模式合作把MVC模式的三层解耦。2022-12-66Spring MVC 培训培训孙林孙林 视图视图(View)(View)代表用户交互界面,对于代表用户交互界面,对于WebWeb应用来说,应用来说,可以是可以是HTMLHTML,也可能是,也可能是jspjsp、XMLXML和和AppletApplet等。一等。一个应用可能有很多不同的视图,个应用可能有很多不同的视图,MVCMVC设计模式对于设计模式对于视图的处理仅限于视图上数据的采集和处理,以及视图的处理仅限于视图上数据的采集和处理,以及用户的请求,而不包括在视图上的业
4、务流程的处理。用户的请求,而不包括在视图上的业务流程的处理。业务流程的处理交予模型业务流程的处理交予模型(Model)(Model)处理。处理。比如一个订单的视图只接受来自模型的数据并显比如一个订单的视图只接受来自模型的数据并显示给用户,以及将用户界面的输入数据和请求传递示给用户,以及将用户界面的输入数据和请求传递给控制和模型。给控制和模型。2022-12-67Spring MVC 培训培训孙林孙林 模型模型(Model)(Model):是业务的处理以及业务规则的制定。模型接受:是业务的处理以及业务规则的制定。模型接受视图请求的数据,并返回最终的处理结果。业务模型的设计是视图请求的数据,并返回
5、最终的处理结果。业务模型的设计是MVCMVC最主要的核心。最主要的核心。MVCMVC设计模式告诉我们,把应用的模型按一设计模式告诉我们,把应用的模型按一定的规则抽取出来,抽取的层次很重要,抽象与具体不能隔得太定的规则抽取出来,抽取的层次很重要,抽象与具体不能隔得太远,也不能太近。远,也不能太近。MVCMVC并没有提供模型的设计方法,而只是组织并没有提供模型的设计方法,而只是组织管理这些模型,以便于模型的重构和提高重用性。管理这些模型,以便于模型的重构和提高重用性。业务模型还有一个很重要的模型那就是数据模型。数据模型业务模型还有一个很重要的模型那就是数据模型。数据模型主要指实体对象的数据保存(持
6、续化)。比如将一张订单保存到主要指实体对象的数据保存(持续化)。比如将一张订单保存到数据库,从数据库获取订单。我们可以将这个模型单独列出,所数据库,从数据库获取订单。我们可以将这个模型单独列出,所有有关数据库的操作只限制在该模型中。有有关数据库的操作只限制在该模型中。2022-12-68Spring MVC 培训培训孙林孙林 控制控制(Controller)(Controller)可以理解为从用户接收请求可以理解为从用户接收请求,将模型与视图将模型与视图匹配在一起,共同完成用户的请求。划分控制层的作用也很匹配在一起,共同完成用户的请求。划分控制层的作用也很明显,它清楚地告诉你,它就是一个分发器
7、,选择什么样的明显,它清楚地告诉你,它就是一个分发器,选择什么样的模型,选择什么样的视图,可以完成什么样的用户请求。控模型,选择什么样的视图,可以完成什么样的用户请求。控制层并不做任何的数据处理。制层并不做任何的数据处理。例如,用户点击一个连接,控制层接受请求后例如,用户点击一个连接,控制层接受请求后,并不处理并不处理业务信息,它只把用户的信息传递给模型,告诉模型做什么,业务信息,它只把用户的信息传递给模型,告诉模型做什么,选择符合要求的视图返回给用户。因此,一个模型可能对应选择符合要求的视图返回给用户。因此,一个模型可能对应多个视图,一个视图可能对应多个模型。多个视图,一个视图可能对应多个模
8、型。2022-12-69Spring MVC 培训培训孙林孙林 Model 1的基础是JSP文件,它由一些相互独立的JSP文件和其他一些Java Class组成。这些JSP从HTTP Request中获得所需要的数据,处理业务逻辑,然后将结果通过Response返前端浏览器。Model 1的应该说是唯一的好处是“简单”,可以大大加快系统的开发进度。它把表现层和业务逻辑层柔和在一起,不利于以后的维护工作以及开发角色的分配,所以这种模式只能适合于小的系统开发。2022-12-610Spring MVC 培训培训孙林孙林Model 2采用面向对象技术实现MVC模式 从而扩展JSP/Servlet的模
9、式。Model2是MVC在Web上的应用。2022-12-611Spring MVC 培训培训孙林孙林2022-12-612Spring MVC 培训培训孙林孙林 视图层采用JSP实现;控制层采用Servlet实现,整个框架采用同一个Servlet,以实现请求的中转;模型层采用Java实现,主要决定用来做什么;在模型层后添加了一个DAO,目的是将决定做什么和具体怎么做分开。整个Web框架大致的流程是:首先客户端发送请求,提交JSP页面给中转器(Servlet);中转器根据客户的请求,选择相应的模型层,即Logic,Logic进行相应的逻辑处理;如果需要使用数据库,则通过DAO进行相应的数据库操
10、作。2022-12-613Spring MVC 培训培训孙林孙林2022-12-614Spring MVC 培训培训孙林孙林 Spring MVC是结构最清晰的MVC Model 2实现。它的Action也不叫Action,而是称做Controller;Controller接收request,response参数,然后返回ModelAndView(其中的Model不是Object类型,而是Map类型)。但在其它的Web Framework中,Action返回值一般都只是一个View Name;Model则需要通过其它的途径(如request.attribute,Context参数,或Actio
11、n本身的属性数据)传递上去。2022-12-615Spring MVC 培训培训孙林孙林2022-12-616Spring MVC 培训培训孙林孙林 清晰的角色划分:控制器(controller)、验证器(validator)、命令对象(command object)、表单对象(form object)、模型对象(model object)、Servlet分发器(DispatcherServlet)、处理器映射(handler mapping)、视图解析器(view resolver)等。每一个角色都可以由一个专门的对象来实现。强大而直接的配置方式:将框架类和应用程序类都能作为JavaBean
12、配置,支持跨多个context的引用,例如,在web控制器中对业务对象和验证器(validator)的引用。可适配、非侵入:可以根据不同的应用场景,选择合适的控制器子类(simple型、command型、form型、wizard型、multi-action型或者自定义),而不是从单一控制器(比如Action/ActionForm)继承。2022-12-617Spring MVC 培训培训孙林孙林 可重用的业务代码:可以使用现有的业务对象作为命令或表单对象,而不需要去扩展某个特定框架的基类。可定制的绑定(binding)和验证(validation):比如将类型不匹配作为应用级的验证错误,这可以
13、保存错误的值。再比如本地化的日期和数字绑定等等。在其他某些框架中,你只能使用字符串表单对象,需要手动解析它并转换到业务对象。可定制的handler mapping和view resolution:Spring提供从最简单的URL映射,到复杂的、专用的定制策略。与某些web MVC框架强制开发人员使用单一特定技术相比,Spring显得更加灵活。灵活的model转换:在Springweb框架中,使用基于Map的 键/值对来达到轻易地与各种视图技术的集成。2022-12-618Spring MVC 培训培训孙林孙林 可定制的本地化和主题(theme)解析:支持在JSP中可选择地使用Spring标签库
14、、支持JSTL、支持Velocity(不需要额外的中间层)等等。简单而强大的JSP标签库(Spring Tag Library):支持包括诸如数据绑定和主题(theme)之类的许多功能。JSP表单标签库:在Spring2.0中引入的表单标签库,使得在JSP中编写 表单更加容易。Spring Bean的生命周期可以被限制在当前的HTTP Request或者HTTP Session。2022-12-619Spring MVC 培训培训孙林孙林Spring MVC Spring MVC 重要组件重要组件2022-12-620Spring MVC 培训培训孙林孙林1.Spring mvc请所有的请求都
15、提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller。3.DispatcherServlet请请求提交到目标Controller。4.Controller进行业务逻辑处理后,会返回一个ModelAndView。5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象。6.视图对象负责渲染返回给客户端。2022-12-621Spring MVC 培训培训孙林孙林202
16、2-12-622Spring MVC 培训培训孙林孙林2022-12-623Spring MVC 培训培训孙林孙林应用了“Front Controller”模式 是所有 Spring MVC 请求的中枢。继承了HttpServlet,是一个Servlet,由WebApplicationContext 加载如果不作其它配置,会加载默认组件2022-12-624Spring MVC 培训培训孙林孙林web.xml dispatcher org.springframework.web.servlet.DispatcherServlet contextConfigLocation WEB-INF/mv
17、c.xml 12022-12-625Spring MVC 培训培训孙林孙林2022-12-626Spring MVC 培训培训孙林孙林将web请求映射到正确的处理器(handler)上,通常是一个 Controller不需用自定义处理器映射 已经内置了很多处理器映射策略 在处理器映射中通过配置拦截器(包括处理器执行前、执行后、或者执行前后运行拦截器)将使其功能更强大 2022-12-627Spring MVC 培训培训孙林孙林 把一个 URL 影射到一个和它名字相同的已注册的bean 比如/simple 将影射到一个名为“/simple”的bean。可以给bean多个名字(别名)通过空格来分隔
18、 必须有一个name属性 “/”在xml中不能定义id属性 在bean名字中可以使用通配符(/simple*)是默认的 HandlerMapping,如果在上下文中没有找到处理器映射,DispatcherServlet会为你创建一个BeanNameUrlHandlerMapping,但不鼓励2022-12-628Spring MVC 培训培训孙林孙林dispatcher-servlet.xml 2022-12-629Spring MVC 培训培训孙林孙林最常用的处理器映射,将请求的URLs 影射到handlers由一系列的分别代表URLs 和bean 的名字的name/value 对来定义影射
19、。Bean的名字可以用通配符(/simple*)2022-12-630Spring MVC 培训培训孙林孙林dispatcher-servlet.xml /simple.htm=simpleController /test*=testController 2022-12-631Spring MVC 培训培训孙林孙林u支持惯例优先原则 u在它的应用上下文中找出所有不同的处理器(handler)(或Controller)bean,并去掉名称中的Controller,来定义它的处理器映射。Removed Controller from class name全部转为小写前面加“/”后面附*“u例子:W
20、elcomeController映射到“/welcome*”请求URL极大的减少了影射的配置dispatcher-servlet.xml2022-12-632Spring MVC 培训培训孙林孙林2022-12-633Spring MVC 培训培训孙林孙林l负责处理请求负责处理请求l内部参数继承内部参数继承 HttpServletHttpServletnhandleRequest(HttpServletRequest,handleRequest(HttpServletRequest,HttpServletResponse)HttpServletResponse)l返回一个返回一个 ModelA
21、ndView ModelAndView对象对象l所有实现都是线程安全的所有实现都是线程安全的l基本不用自己实现接口基本不用自己实现接口 已经提供了很多实用的已经提供了很多实用的实现类实现类2022-12-634Spring MVC 培训培训孙林孙林l封装了用来渲染页面的封装了用来渲染页面的 model model和和view view lModel Model 用用 java.util.Mapjava.util.Map实现的实现的l添加对象,可以不需用名字添加对象,可以不需用名字:naddObject(String,Object)addObject(String,Object)用显式名字用显式
22、名字添加添加naddObject(Object)addObject(Object)用默认名添加用默认名添加 (惯例惯例优先优先)lView View 用用 String String 或或 View View 对象表示对象表示l类似类似 StrutsStruts的的 ActionAction2022-12-635Spring MVC 培训培训孙林孙林l通常在我们的应用中要求通常在我们的应用中要求Controllers:Controllers:n自动作默认处理自动作默认处理(不用编码不用编码)n简单简单webweb处理处理n在在web web 层和层和service service 层之间作相应
23、的处理层之间作相应的处理参数处理视图跳转输入验证2022-12-636Spring MVC 培训培训孙林孙林l提供了简单的操作提供了简单的操作l用来处理一个简单的请求用来处理一个简单的请求protected ModelAndView handleRequestInternal(protected ModelAndView handleRequestInternal(HttpServletRequest request,HttpServletResponse response)HttpServletRequest request,HttpServletResponse response)Stri
24、ng text=service.getText();String text=service.getText();return new ModelAndView(simple,text,text);return new ModelAndView(simple,text,text);2022-12-637Spring MVC 培训培训孙林孙林l中文叫做一次性控制器,也就像一次性筷子那样用完即丢 l并不在Spring的Controller继承架构中,而是一个独立的接口定义l当映射的不是一个model 对象时很有用lBean的作用域必须是prototype,他们本身不是线程安全的2022-12-638
25、Spring MVC 培训培训孙林孙林dispatcher-servlet.xml配置作为一个 prototype bean2022-12-639Spring MVC 培训培训孙林孙林public class ExampleThrowawayController implements ThrowawayController private String message;public void setMessage(String message)this.message=message;public ModelAndView execute()throws Exception String ha
26、shCodeMessage=+hashCode()+-+message;return new ModelAndView(throwaway,message,hashCodeMessage);2022-12-640Spring MVC 培训培训孙林孙林l提供了一种和数据对象交互的方式,并动态地将来自HttpServletRequest的参数绑定到指定的数据对象上。l功能和Struts中的ActionForm有点像,不过在Spring中,不需要实现任何接口来实现数据绑定 lCommand 可以是任何 POJO 通常是一个 domain对象l提供的功能:绑定用户类型自动验证自动创建command对象
27、l稍后会用到2022-12-641Spring MVC 培训培训孙林孙林lAbstractCommandController AbstractCommandController 提供绑定和验证提供绑定和验证lSimpleFormController SimpleFormController 除了提供绑定和验证除了提供绑定和验证,还提供还提供了工作流中的表单处理了工作流中的表单处理n对表单对表单formform处理很有用处理很有用n具体细节后面介绍具体细节后面介绍lAbstractWizardFormController AbstractWizardFormController 适合涉及多个页面
28、适合涉及多个页面的表单的表单formform处理处理2022-12-642Spring MVC 培训培训孙林孙林lServletWrappingController and ServletForwardingController ServletWrappingController and ServletForwardingController 为了为了StrutsStruts专门设计的,在专门设计的,在springspring拦截器里封装了拦截器里封装了Struts servletStruts servlet,作用相当于代理作用相当于代理StrutsStruts的的ActionServlet
29、ActionServlet lParameterizableViewController ParameterizableViewController 简单的返回一个指定的视图名简单的返回一个指定的视图名称,不涉及客户端视图技术(从而避免了在称,不涉及客户端视图技术(从而避免了在JavaJava代码中的硬编码)代码中的硬编码)lUrlFilenameViewController UrlFilenameViewController 会检查会检查URLURL,获取文件请求的文件,获取文件请求的文件名,并把它作为视图名加以使用。如:名,并把它作为视图名加以使用。如:http:/www.springfr
30、amework.org/index.htmlhttp:/www.springframework.org/index.html对应的视图文件名对应的视图文件名是是index index 2022-12-643Spring MVC 培训培训孙林孙林2022-12-644Spring MVC 培训培训孙林孙林u在请求前后添加其它功能u包括拦截器方法 preHandle and postHandleu包括回调方法 afterCompletetionu可以通过 HandlerMapping 和一系列Controller关联上2022-12-645Spring MVC 培训培训孙林孙林u 实现 Handl
31、erInterceptor 或WebRequestInterceptoru Spring 提供的几个实现 OvenXxxInViewInteceptor 用于 ORM 架构JDO,JPA and Hibernate UserRoleAuthorizationInterceptor 用于各种角色授权验证u 其他有用的扩展:自定义安全,caching,2022-12-646Spring MVC 培训培训孙林孙林u 下面的例子提供了一个拦截器,它拦截所有请求,如果当前时间不是在上午9点到下午6点,它将用户重定向到某个页面。u 所有的请求都将被TimeBasedAccessInterceptor截获,
32、如果当前时间不在上班时间,用户会被重定向到一个静态html页面,提供诸如只有上班时间才能访问网站之类的告示。2022-12-647Spring MVC 培训培训孙林孙林 bean id=handlerMapping class=org.springframework.web.servlet.handler.SimpleUrlHandlerMapping /*.form=editAccountFormController.form=editAccountFormController/*.view=editAccountFormController.view=editAccountFormCont
33、roller 2022-12-648Spring MVC 培训培训孙林孙林package samples;public class TimeBasedAccessInterceptor extends HandlerInterceptorAdapter private int openingTime;private int closingTime;public void setOpeningTime(int openingTime)this.openingTime=openingTime;public void setClosingTime(int closingTime)this.closi
34、ngTime=closingTime;public boolean preHandle(HttpServletRequest request,HttpServletResponse response,Object handler)throws Exception Calendar cal=Calendar.getInstance();int hour=cal.get(HOUR_OF_DAY);if(openingTime=hour closingTime)return true;else response.sendRedirect(http:/ false;2022-12-649Spring
35、MVC 培训培训孙林孙林2022-12-650Spring MVC 培训培训孙林孙林p从一个逻辑视图名映射到一个视图对象从一个逻辑视图名映射到一个视图对象p可以排序可以排序,所以能链在一起所以能链在一起p对对JSPJSP用户用户,通常实现通常实现 InternalResourceViewResolver:InternalResourceViewResolver:bean id=internalResourceViewResolver 2022-12-651Spring MVC 培训培训孙林孙林uVelocityViewResolver VelocityViewResolver 针对针对Velo
36、city templatesVelocity templates设计的设计的uFreeMarkerViewResolver FreeMarkerViewResolver 针对针对 FreeMarker FreeMarker templatestemplates设计的设计的uResourceBundleViewResolver ResourceBundleViewResolver 映射关系在一个映射关系在一个 properties properties 文件文件支持国际化支持国际化uXmlViewResolver XmlViewResolver 映射关系在映射关系在XMLXML文件文件2022-
37、12-652Spring MVC 培训培训孙林孙林2022-12-653Spring MVC 培训培训孙林孙林n支持的几种视图模板技术:InternalResourceView(JSP)JstlView(JSP+JSTL)VelocityView(Velocity)FreeMarkerView(FreeMarker)TilesView(Tiles)TilesJstlView(Tiles+JSTL)n还支持渲染下列视图:Excel filesPDF filesXSLT resultsJasper Reports2022-12-654Spring MVC 培训培训孙林孙林lSimpleFormCo
38、ntrollerSimpleFormController提供了表单处理通用工作流程提供了表单处理通用工作流程 n提供了用户自定义标签,用来展示和处理常用的提供了用户自定义标签,用来展示和处理常用的表单表单n默认默认,GET,GET 用于用于formform展示展示 ,POST POST 用于用于 formform处理处理l通过一些通过一些ControllerController类实现表单展示处理类实现表单展示处理l能处理完整的工作流能处理完整的工作流 这是亮点这是亮点2022-12-655Spring MVC 培训培训孙林孙林lSimpleFormControllers 关联一个关联一个 Co
39、mmand classn因为是紧耦合因为是紧耦合,配置这个配置这个Controller class是可以的是可以的public class PlayerFormController extends SimpleFormController public PlayerFormController()setCommandClass(Player.class);setCommandName(player);2022-12-656Spring MVC 培训培训孙林孙林l在工作流中展示在工作流中展示 formform涉及的三个方法涉及的三个方法nformBackingObject formBacking
40、Object 在在formform里返回一个里返回一个 command command 对象对象ninitBinder initBinder 注册用户自定义属性注册用户自定义属性nreferenceData referenceData 导入要在页面实现的数据导入要在页面实现的数据2022-12-6Spring MVC 培训培训孙林孙林57l处理处理formform表单的两个主要方法表单的两个主要方法:nonBindAndValidateonBindAndValidate()()允许用户邦定和验证允许用户邦定和验证ndoSubmitActiondoSubmitAction()()处理完表单后,回调动作。处理完表单后,回调动作。典典型的实现是持久化对象到数据库。型的实现是持久化对象到数据库。2022-12-6Spring MVC 培训培训孙林孙林58l其它其它Spring MVC Spring MVC 功能这里不再介绍了,但功能这里不再介绍了,但很优秀很优秀n处理多请求处理多请求n支持自定义主体支持自定义主体n支持国际化支持国际化n方便方便 ServletContextListenerServletContextListener 初始化初始化 Log4JLog4JnSpring MVCSpring MVC标签标签2022-12-6Spring MVC 培训培训孙林孙林59
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。