
SpringMvc课件.ppt
61页LOGO Spring MVC 目目 录录2 2 SpringMVC 核心组件1 1SpringMVC 入门简介3 3Spring MVC Demo 实例MVCMVC设计思想设计思想MVCMVC即即Model-View-Controller,把一个应用的输入、,把一个应用的输入、处理、输出流程按照处理、输出流程按照ModelModel、、ViewView、、ControllerController的方式进行分离,这样一个应用被分成三个层的方式进行分离,这样一个应用被分成三个层——模型层、视图层、控制层模型层、视图层、控制层 MVCMVC设计思想设计思想 MVC MVC是一种复合模式,结合了观察者模式、是一种复合模式,结合了观察者模式、策略模式、组合模式、适配器模式策略模式、组合模式、适配器模式 模型使用观察者模式模型使用观察者模式,以便观察者更新,同,以便观察者更新,同时保持两者之间的解耦控制器是视图的策略,时保持两者之间的解耦控制器是视图的策略,视图使用组合模式实现用户界面适配器模式用视图使用组合模式实现用户界面。
适配器模式用来将模型适配成符合现有视图和控制器的需要的来将模型适配成符合现有视图和控制器的需要的模型 这些模式合作这些模式合作把把MVCMVC模式的三层解耦模式的三层解耦MVCMVC设计思想设计思想 视图视图(View)(View)代表用户交互界面,对于代表用户交互界面,对于WebWeb应用来应用来说,可以是说,可以是HTMLHTML,也可能是,也可能是jspjsp、、XMLXML和和AppletApplet等一个应用可能有很多不同的视图,一个应用可能有很多不同的视图,MVCMVC设计模式对于设计模式对于视图的处理仅限于视图上数据的采集和处理,以及视图的处理仅限于视图上数据的采集和处理,以及用户的请求,而不包括在视图上的业务流程的处理用户的请求,而不包括在视图上的业务流程的处理业务流程的处理交予模型业务流程的处理交予模型(Model)(Model)处理 比如一个订单的视图只接受来自模型的数据并比如一个订单的视图只接受来自模型的数据并显示给用户,以及将用户界面的输入数据和请求传显示给用户,以及将用户界面的输入数据和请求传递给控制和模型递给控制和模型。
MVCMVC设计思想设计思想 模型模型(Model)(Model):是业务的处理以及业务规则的制定模:是业务的处理以及业务规则的制定模型接受视图请求的数据,并返回最终的处理结果业务模型型接受视图请求的数据,并返回最终的处理结果业务模型的设计是的设计是MVCMVC最主要的核心最主要的核心MVCMVC设计模式告诉我们,把应用设计模式告诉我们,把应用的模型按一定的规则抽取出来,抽取的层次很重要,抽象与的模型按一定的规则抽取出来,抽取的层次很重要,抽象与具体不能隔得太远,也不能太近具体不能隔得太远,也不能太近MVCMVC并没有提供模型的设并没有提供模型的设计方法,而只是组织管理这些模型,以便于模型的重构和提计方法,而只是组织管理这些模型,以便于模型的重构和提高重用性高重用性 业务模型还有一个很重要的模型那就是数据模型数据 业务模型还有一个很重要的模型那就是数据模型数据模型主要指实体对象的数据保存(持续化)比如将一张订模型主要指实体对象的数据保存(持续化)比如将一张订单保存到数据库,从数据库获取订单我们可以将这个模型单保存到数据库,从数据库获取订单我们可以将这个模型单独列出,所有有关数据库的操作只限制在该模型中。
单独列出,所有有关数据库的操作只限制在该模型中MVCMVC设计思想设计思想 控制控制(Controller)(Controller)可以理解为从用户接收请求可以理解为从用户接收请求, , 将模型将模型与视图匹配在一起,共同完成用户的请求划分控制层的作与视图匹配在一起,共同完成用户的请求划分控制层的作用也很明显,它清楚地告诉你,它就是一个分发器,选择什用也很明显,它清楚地告诉你,它就是一个分发器,选择什么样的模型,选择什么样的视图,可以完成什么样的用户请么样的模型,选择什么样的视图,可以完成什么样的用户请求控制层并不做任何的数据处理控制层并不做任何的数据处理 例如,用户点击一个连接,控制层接受请求后例如,用户点击一个连接,控制层接受请求后, , 并不处并不处理业务信息,它只把用户的信息传递给模型,告诉模型做什理业务信息,它只把用户的信息传递给模型,告诉模型做什么,选择符合要求的视图返回给用户因此,一个模型可能么,选择符合要求的视图返回给用户因此,一个模型可能对应多个视图,一个视图可能对应多个模型对应多个视图,一个视图可能对应多个模型JspJsp model 1 model 1架构架构 Model 1的基础是JSP文件,它由一些相互独立的JSP文件和其他一些Java Class组成。
这些JSP从HTTP Request中获得所需要的数据,处理业务逻辑,然后将结果通过Response返前端浏览器Model 1的应该说是唯一的好处是“简单”,可以大大加快系统的开发进度它把表现层和业务逻辑层柔和在一起,不利于以后的维护工作以及开发角色的分配,所以这种模式只能适合于小的系统开发JspJsp model 2 model 2架构架构 Model 2采用面向对象技术实现MVC模式 从而扩展JSP/Servlet的模式 Model2是MVC在Web上的应用一个Model 2规范实现的Web框架 一个Model 2规范实现的Web框架 视图层采用JSP实现;控制层采用Servlet实现,整个框架采用同一个Servlet,以实现请求的中转;模型层采用Java实现,主要决定用来做什么;在模型层后添加了一个DAO,目的是将决定做什么和具体怎么做分开 整个Web框架大致的流程是:首先客户端发送请求,提交JSP页面给中转器(Servlet);中转器根据客户的请求,选择相应的模型层,即Logic,Logic进行相应的逻辑处理;如果需要使用数据库,则通过DAO进行相应的数据库操作。
Spring 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参数,或Action本身的属性数据)传递上去 Spring Web MVC请求处理流程请求处理流程Spring MVC 特点特点 清晰的角色划分:控制器(controller)、验证器(validator)、 命令对象(command object)、表单对象(form object)、模型对象(model object)、 Servlet分发器(DispatcherServlet)、 处理器映射(handler mapping)、视图解析器(view resolver)等 每一个角色都可以由一个专门的对象来实现。
强大而直接的配置方式:将框架类和应用程序类都能作为JavaBean配置,支持跨多个context的引用,例如,在web控制器中对业务对象和验证器(validator)的引用 可适配、非侵入:可以根据不同的应用场景,选择合适的控制器子类 (simple型、command型、form型、wizard型、multi-action型或者自定义),而不是从单一控制器 (比如Action/ActionForm)继承Spring MVC 特点特点 可重用的业务代码:可以使用现有的业务对象作为命令或表单对象,而不需要去扩展某个特定框架的基类可定制的绑定(binding) 和验证(validation):比如将类型不匹配作为应用级的验证错误, 这可以保存错误的值再比如本地化的日期和数字绑定等等在其他某些框架中,你只能使用字符串表单对象, 需要手动解析它并转换到业务对象 可定制的handler mapping和view resolution:Spring提供从最简单的URL映射, 到复杂的、专用的定制策略与某些web MVC框架强制开发人员使用单一特定技术相比,Spring显得更加灵活灵活的model转换:在Springweb框架中,使用基于Map的 键/值对来达到轻易地与各种视图技术的集成。
Spring MVC 特点特点 可定制的本地化和主题(theme)解析:支持在JSP中可选择地使用Spring标签库、支持JSTL、支持Velocity(不需要额外的中间层)等等简单而强大的JSP标签库(Spring Tag Library):支持包括诸如数据绑定和主题(theme) 之类的许多功能JSP表单标签库:在Spring2.0中引入的表单标签库,使得在JSP中编写 表单更加容易Spring Bean的生命周期可以被限制在当前的HTTP Request或者HTTP Session 目目 录录1 1 SpringMVC 入门简介2 2SpringMVC 核心组件3 3Spring MVC Demo 实例Spring MVC Spring MVC 重要组件重要组件1.spring 1.spring mvcmvc请所有的请求都提交给请所有的请求都提交给DispatcherServletDispatcherServlet, ,它会委托应用系它会委托应用系统的其他模块负责负责对请求进行真正的处理工作统的其他模块负责负责对请求进行真正的处理工作2.DispatcherServlet2.DispatcherServlet查询一个或多个查询一个或多个HandlerMappingHandlerMapping, ,找到处理请求的找到处理请求的Controller.Controller.3.DispatcherServlet3.DispatcherServlet请请求提交到目标请请求提交到目标ControllerController4.Controller4.Controller进行业务逻辑处理后,会返回一个进行业务逻辑处理后,会返回一个ModelAndViewModelAndView5.Dispathcher5.Dispathcher查询一个或多个查询一个或多个ViewResolverViewResolver视图解析器视图解析器, ,找到找到ModelAndViewModelAndView对象指定的视图对象对象指定的视图对象6.6.视图对象负责渲染返回给客户端视图对象负责渲染返回给客户端 Spring MVC Spring MVC 架构类图架构类图DispatcherServletDispatcherServletv应用了应用了“ Front ControllerFront Controller”模式模式 – 是所有是所有 Spring MVC Spring MVC 请求的中枢。
请求的中枢v继承了继承了HttpServletHttpServlet,是一个,是一个ServletServlet,由,由WebApplicationContextWebApplicationContext 加载加载v如果不作其它配置,会加载默认组件如果不作其它配置,会加载默认组件在web.xmlweb.xml配配DispatcherServlet web.xml…
v可以给可以给beanbean多个名字多个名字 ( (别名别名) ) 通过空格来分隔通过空格来分隔v必须有一个必须有一个namename属性属性 – “/ /”在在xmlxml中不能定义中不能定义idid属属性性v在在beanbean名字中可以使用通配符名字中可以使用通配符 (/simple*)(/simple*)v是默认的是默认的 HandlerMappingHandlerMapping, ,如果在上下文中没有如果在上下文中没有找到处理器映射,找到处理器映射,DispatcherServletDispatcherServlet会为你创建会为你创建一个一个BeanNameUrlHandlerMappingBeanNameUrlHandlerMapping,但不鼓励,但不鼓励BeanNameUrlHandlerMappingdispatcher-servlet.xml
对来定义影射vBeanBean的名字可以用通配符的名字可以用通配符 (/simple*)(/simple*)SimpleUrlHandlerMappingdispatcher-servlet.xml…
来定义它的处理器映射Removed "Controller" from class nameRemoved "Controller" from class name§全部转为小写§前面加 “/” 后面附 "*“v例子例子: :§WelcomeController映射到“/welcome*”请求URLv极大的减少了影射的配置极大的减少了影射的配置ControllerClassNameHandlerMappingdispatcher-servlet.xml…
的参数绑定到指定的数据对象上v功能和功能和StrutsStruts中的中的ActionFormActionForm有点像,不过在有点像,不过在SpringSpring中,中,不需要实现任何接口来实现数据绑定不需要实现任何接口来实现数据绑定 vCommand Command 可以是任何可以是任何 POJO POJO – 通常是一个通常是一个 domain domain对象对象v提供的功能提供的功能: :§绑定用户类型§自动验证§自动创建command对象v稍后会用到稍后会用到…Command ControllersvAbstractCommandControllerAbstractCommandController – 提供绑定和验证提供绑定和验证vSimpleFormControllerSimpleFormController – 除了提供绑定和验证除了提供绑定和验证, , 还提供了工作流中的表单处理还提供了工作流中的表单处理§对表单form处理很有用§具体细节后面介绍vAbstractWizardFormControllerAbstractWizardFormController – 适合涉及多个适合涉及多个页面的表单页面的表单formform处理处理其他 ControllersvServletWrappingControllerServletWrappingController and and ServletForwardingControllerServletForwardingController –为了为了StrutsStruts专门设专门设计的,在计的,在springspring拦截器里封装了拦截器里封装了Struts Struts servletservlet,作,作用相当于代理用相当于代理StrutsStruts的的ActionServletActionServlet vParameterizableViewControllerParameterizableViewController – 简单的返回一个简单的返回一个指定的视图名称,不涉及客户端视图技术(从而避免指定的视图名称,不涉及客户端视图技术(从而避免了在了在JavaJava代码中的硬编码)代码中的硬编码) vUrlFilenameViewControllerUrlFilenameViewController –会检查会检查URLURL,获取文件,获取文件请求的文件名,并把它作为视图名加以使用。
如:请求的文件名,并把它作为视图名加以使用如:http://http://www.springframework.org/index.htmlwww.springframework.org/index.html对应的对应的视图文件名是视图文件名是indexindex InterceptorsInterceptorsv在请求前后添加其它功能在请求前后添加其它功能v包括拦截器方法包括拦截器方法 – preHandlepreHandle and and postHandlepostHandlev包括回调方法包括回调方法 – afterCompletetionafterCompletetionv可以通过可以通过 HandlerMappingHandlerMapping 和一系列和一系列ControllerController关联上关联上Interceptor 实现v实现实现 HandlerInterceptorHandlerInterceptor 或或WebRequestInterceptorWebRequestInterceptorvSpring Spring 提供的几个实现提供的几个实现§OvenXxxInViewInteceptorOvenXxxInViewInteceptor – 用于 ORM 架构JDO, JPA and Hibernate§UserRoleAuthorizationInterceptorUserRoleAuthorizationInterceptor – 用于各种角色授权验证v其他有用的扩展其他有用的扩展: : 自定义安全自定义安全, caching, , caching, …Interceptor 例子§下面的例子提供了一个拦截器,它拦截所有请求,如果当前时间不是在上午9点到下午6点,它将用户重定向到某个页面。
§所有的请求都将被TimeBasedAccessInterceptor截获, 如果当前时间不在上班时间,用户会被重定向到一个静态html页面,提供诸如只有上班时间才能访问网站之类的告示 Interceptor 例子
典型的实现是持久化对象到数据库Spring MVC 其它特性v其它其它Spring MVC Spring MVC 功能这里不再介绍了,但很优秀功能这里不再介绍了,但很优秀§处理多请求§支持自定义主体§支持国际化§方便 ServletContextListener 初始化 Log4J§Spring MVC标签 目目 录录1 1 SpringMVC 入门简介3 3Spring MVC Demo 实例2 2Spring MVC 核心组件 下面以一个spring mvc的demo介绍spring mvc 具体实际的应用和配置 谢谢。
