3.rngMVC概述 1 Spi SpringMVC是一种基于MVC设计模式的使用请求-响应模型的轻量级Web框架。 所谓MVC是一种Web开发领域的设计模式,MVC是Model、View与Controler三个英 文单词的缩写,指的是对Web应用程序中的资源按功能划分为以下三大部分。 View:视图,是用户进行操作的可视化的界面,可以是HTML 、JSP 、XML等。用户 可以在视图上看到服务端传来的数据,或者在视图上录入数据以传递给服务端处理。 Model:模型,用于处理业务逻辑、封装、传输业务数据。 Controler:控制器,是程序的调度中心,控制程序的流转,接收客户端的请求,判断 该调用哪个服务端程序来处理,处理完毕后把获得的模型数据显示到视图,返回给用户。 通过以上分工,将使程序更加简单、高效。著名的Struts2和SpringMVC都是MVC 框架。 3.1 SpigMVC的优点 1.rn SpringMVC跟Struts2相比,具有更好的安全性和可靠性,运行速度更快。目前, SpringMVC已成为JavaWeb开发的一款利器,越来越受到Java开发者的喜欢。其主要 优点如下。 (1)角色划分清晰。核心控制器(DispatcherServlet)、处理器映射器(HandlerMapping)、 处理器适配器(HandlerAdapter)、视图解析器(ViewResolver)、处理器控制器(Controler)、验 证器(Validator)、命令对象(即Command请求参数绑定到的对象)、表单对象(即Form Object提供给表单展示和提交到的对象)。 (2)分工明确,扩展灵活。作为Spring的一部分,易与Spring其他框架集成。 (3)可适配性好。通过HandlerAdapter就可以支持任意一个类作为处理器。 (4)支持数据验证、数据格式化、数据绑定机制。 (5)提供功能强大的JSP标签库,使数据在视图中的展示或者获取更加丰富与灵活。 (6)RESTful风格的支持,简单的文件上传、下载功能。 (7)注解的零配置支持等。 第3章SpringMVC简介11 3.1.2 SpringMVC的运行原理 SpringMVC的工作流程如图3-1所示。 图3- 1 SpringMVC的工作流程 (1)浏览器向服务端提交请求,请求会被核心控制器DispatcherServlet拦截。 (2)核心控制器将请求转给处理器映射器HandlerMapping。 (3)处理器映射器HandlerMapping会根据请求找到处理该请求的具体的处理器,并 将其封装为处理器执行链后返回给核心控制器DispatcherServlet。 (4)核心控制器根据处理器执行链中的处理器,找到能够执行该处理器的处理器适 配器HandlerAdapter。 (5)处理器适配器HandlerAdapter调用执行处理器控制器Controler。 (6)处理器控制器Controler将处理结果及要跳转的视图封装到一个对象 ModelAndView中,并将其返回给处理器适配器HandlerAdapter。 (7)处理器适配器HandlerAdapter直接将结果返回给核心控制器。 (8)核心控制器调用视图解析器ViewResolver,将ModelAndView中的视图名称封 装为视图对象View。 (9)视图解析器ViewResolver将封装了的视图对象View返回给核心控制器 DispatcherServlet,到此一个流程结束。 (10)核心控制器DispatcherServlet调用视图对象View,让其自己进行数据填充,形 成响应对象。 (11)核心控制器把填充好数据的View响应给浏览器。 3.创建一个SprngMVC程序 2i 项目案例:用户通过浏览器提交一个请求,服务端处理器在接收到这个请求后,给出 一条欢迎信息:HeloSpringMVC,在响应页面中显示该信息,采用传统的配置式开发 SSM 开12 发技术 方式。 (1)在Eclipse中新建一个DynamicWebProject项目。 (2)导入Spring的jar包。项目结构如图3-2所示。 图3-2 项目结构 (3)在web.xml上配置DispatcherServlet核心控制器,在项目WebContent/WEBINF 目录下的web.xml文件关键配置如下: Spring MVC org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:Spring MVC.xml Spring MVC *.do (4)编写一个Controller类。 public class FirstController implements Controller{ @Override public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse 第3章 SpringMVC简介 13 arg1) throws Exception { ModelAndView mv=new ModelAndView(); mv.addObject("hello", "Hello Spring MVC!!!"); mv.setViewName("welcome"); return mv; } } 这个方法的作用是创建一个ModelAndView 对象,在该对象中添加hello字符串对 象,值为“HelloSpring MVC!!!”,并在ModelAndView 对象中设置返回的逻辑视图为 welcome,这里逻辑视图welcome本身还不是完整的视图路径,将在下述有关步骤(视图 解析器)进一步解释为完整路径。此方法意味着程序将携带hello对象数据跳转到名为 welcome的逻辑视图。 (5)配置HandlerMapping处理器映射器。在src下新建一个xml文件,命名为Spring MVC.xml,输入如下关键内容。 上面代码的意思是创建一种类型为BeanNameUrlHandlerMapping的处理器映射 器,即定义一种“请求/响应”映射规则,客户端的URL请求如果跟某一个bean的name 属性匹配,则由该bean的class属性指定的控制器Controller类进行响应处理。 (6)配置处理器适配器。配置完处理器映射器后,接着在SpringMVC.xml中插入 如下内容(插入位置在如上代码的下方,节点的上方)。 该代码的意思是创建一种处理器适配器,类型为SimpleControllerHandlerAdapter, 用于对上述指定的控制器Controller类的handleRequest()方法的调用与执行。 (7)配置自定义控制器。继续在SpringMVC.xml中输入如下内容。 该代码自定义了一个bean,定义了一种具体的“请求/响应”映射关系,表示假如客户 端发出的url请求的是/hello.do,则指定由服务端的com.fqy.controller.FirstController 程序来处理,通过这行代码确定了一条具体的“请求/响应”映射关系,一种一对一的对应 关系,即name属性表示的客户端请求(如URL路径),对应class属性表示的服务端的响 应程序。 注意:这个bean的配置要有效,前提是第(5)步要配置类型为BeanNameUrlHandlerMapping 的映射器,以及第(6)步的适配器。第(5)步相当于制定了一个规则,如乒乓球比赛的“男 SSM 开14 发技术 女混合双打”,而第(7)步则是这个规则下的具体条文,如指派张无忌与赵敏搭配去参加 “男女混合双打”。 (8)配置视图解析器。视图解析器用来解释控制器返回的逻辑视图的真实路径,这 样更方便,易于扩展。在SpringMVC.xml中输入如下代码。 上面代码的意思是控制器Controller返回的逻辑视图,需要加上前缀“/WEB-INF/ jsp/”>和后缀“.jsp”,最后拼接成完整的视图路径。如本例中,Controller返回的视图为 welcome,视图解析器将为它加上前缀、后缀,最终构成完整路径为“/WEB-INF/jsp/ welcome.jsp”。视图解析器不是非要不可,如果没有视图解析器,则Controller返回的视 图必须打上完整路径的视图名称,Controller类应修改为如下所示: public class FirstController implements Controller{ @Override public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception { ModelAndView mv=new ModelAndView(); mv.addObject("hello", "Hello Spring MVC!!!"); mv.setViewName("/WEB-INF/jsp/welcome.jsp"); return mv; } } 到此,完整的SpringMVC.xml内容结构如下所示。 < bean name ="/hello. do" class =" com. fqy. controller. FirstController" > 第3章 SpringMVC简介 15 提示:上述类型的处理器映射器是默认的,同样,上述类型的处理器适配器也是默认 的,两者均可省略,因此,SpringMVC.xml又可以简化为 (9)定义一个响应页面。在目录WebContent/WEB-INF/jsp下新建一个jsp文件 welcome.jsp,打开welcome.jsp文件,在之间输入如下代码:

${hello }

(10)运行项目,在浏览器中输入http://localhost:8080/springmvc1/hello.do,出现 如图3-3所示结果,最终完整的项目结构如图3-4所示。 图3-3 SpringMVC项目运行结果 图3-4 完整的项目结构