1、MVC模式简介
M-Model模型
模型(Model)的职责是负责业务逻辑。包含两层:业务数据和业务处理逻辑。比如实体类、DAO、Service都属于模型层。
V-View视图
视图(View)的职责是负责显示界面和用户交互(收集用户信息)。属于视图的组件是不包含业务逻辑和控制逻辑的JSP
C-Controller控制器
控制器是模型层M和视图层V之间的桥梁,用于控制流程
比如:在Servlet项目中的单一控制器ActionServlet。
2、什么是Spring Web MVC
Spring web MVC 是Spring框架一个非常重要的功能模块。实现了MVC结构,便于简单、快速开发MVC结构的Web程序。Spring web MVC 提供的API封装了web开发中常用的功能,简化了Web过程。
3、Spring Web MVC的核心组件
Spring Web MVC提供了M、V和C相关的主要实现组件,具体如下
DispatcherServlet(控制器,请求入口)
HandlerMapping(控制器,请求派发)
Controller(控制器,请求处理流程)
ModelAndView(模型,封装业务处理结果和视图)
ViewResolver(视图,视图显示处理器)
4、Spring Web MVC的处理流程
5、搭建Spring Web MVC 环境
搭建Spring Web MVC开发环境的主要步骤下
创建Web工程导入Spring web mvc 相关开发包
Spring API、web、webmvc等开发包
在src下添加Spring的XML配置文件
名称可以自定义,例如spring-mvc.xml
在web.xml中配置DispatcherServlet前端控制器组件
DispatchherServlet组件在spring mvc中以提供,只需要配置即可
配置DispatcherServlet时,同时指定XML的配置文件
6、DispatcherServlet控制器配置
<!-- Spring前端控制器 --> <servlet> <servlet-name>SpringMVC</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:applicationContext.xml </param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>SpringMVC</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
7、HandlerMapping组件
通过HandlerMapping组件,DispatcherServlet控制器可以将客户HTTP请求映射到Controller组件上。
SimpleUrlHandlerMapping
维护一个HTTP请求和Controller映射关系列表(map),根据列表对应关系调用Controller
8、HandlerMapping组件
SimpleUrlHandlerMapping使用定义如下
<!--HandlerMapping组件--> <bean id="handlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/login.form" >loginController</prop> <prop key="/hello.form" >helloController</prop> </props> </property> </bean> <bean id="helloController" class="org.tarena.web.HelloController"/>
//或
<!--HandlerMapping组件 -->
<bean id="handlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<!-- 指定请求和Controller对应关系 -->
<property name="mappings" ref="urlMappings" />
</bean>
<!-- 定义请求映射表map -->
<util:properties id="urlMapping">
<prop key="/hello.form">helloController</prop>
</util:properties>
RequestMappingHandlerMapping
RequestMappingHandlerAdapter
在Controller类和方法上使用@RequestMapping注解指定对应的客户HTTP请求
9、Controller组件
Controller组件负责执行具体的业务处理,可调用DAO等组件,编写时需要实现Controller接口及约定方法
10、ModelAndView组件
Controller组件约定的handlerRequest方法执行后返回一个ModelAndView对象,该对象可封装模型数据和视图名响应信息。ModelAndView构造器如下:
ModelAndView(String viewName)
ModelAndView(String viewName,Map model)
viewName是jsp页面的名字
model的数据存储到request的attribute中
11、ViewResoler组件
所有Controller组件都返回一个ModelAndView实例,封装了视图名。Spring中的视图以名字为标识,视图解析器ViewResolver通过名字来解析视图。
Spring提供了多种视图解析器,具体如图示;
InternalResourceViewResolver使用示例如下
<!-- 处理请求转发 --> <!--ViewResolver--> <bean id="viewResoler" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/"/> <property name="suffix" value=".jsp"/> </bean>
如:视图名hello通过以上配置可以映射到
/WEB-INF/jsp/hello.jsp