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 完整的项目结构