MVC 设计不仅限于 Java Web 应用,还包括许多应用,比如前端、PHP、.NET 等语言。之所以那么做的根本原因在于各个模块的解耦。
MVC 是 Model、View 和 Controller 的缩写,分别代表 Web 应用程序中的 3 种职责。
(1)、模型:用于存储数据以及处理用户请求的业务逻辑。
(2)、视图:向控制器提交数据,显示模型中的数据。
(3)、控制器:根据视图提出的请求判断将请求和数据交给哪个模型处理,将处理后的有关结果交给哪个视图更新显示
介绍 一下:
springMVC它为控制器和处理程序提供了大量与此模式相关的功能。并且当向 MVC 添加反转控制(Inversion of Control,IoC)时,它使应用程序高度解耦,提供了通过简单的配置更改即可动态更改组件的灵活性。
SpringMVC框架是高度可配置的,包含多种视图技术,比如:jsp、Velocity、themlefy等。SpringMVC框架并不关心使用的视图技术,也不会去强迫开发者只使用jsp技术,但教程中使用的视图是jsp。
Spring MVC 框架处理用户请求的完整流程和处理中包含的 4 个接口。
Spring MVC初学重点掌握的4个接口分别是:
- DispatcherServlet :Spring MVC 所有的请求都经过 DispatcherServlet 来统一分发,在 DispatcherServlet 将请求分发给Controller之前需要借助 Spring MVC 提供的 HandlerMapping 定位到具体的 Controller。
- HandlerMapping :HandlerMapping 接口负责完成客户请求到 Controller 映射。
- Controller:Controller接口将处理用户请求,这和 Java Servlet 扮演的角色是一致的。一旦 Controller 处理完用户请求,将返ModelAndView对象给DispatcherServlet前端控制器,ModelAndView中包含了模型(Model)和视图(View)。从宏观角度看DispatcherServlet是整个 Web 应用的控制器;从微观考虑,Controller 是单个 Http 请求处理过程中的控制器,而 ModelAndView 是 Http 请求过程中返回的模型(Model)和视图(View)。
- ViewResolver :ViewResolver 接口(视图解析器)在 Web 应用中负责查找 View 对象,从而将相应结果渲染给用户。
- 用户发送请求至前端控制器DispatcherServlet。
- DispatcherServlet收到请求,调用HandlerMapping处理器映射器。
- 处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器一并返回给DispatcherServlet。
- DispatcherServlet调用HandlerAdapter适配器。
- HandlerAdapter经过适配调用具体的处理器(一般是开发人员编写的Controller)。
- Controller执行完成返回ModelAndView。
- HandlerAdapter将Controller执行结果ModelAndView返回DispatcherServlet。
- DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
- ViewReslover解析后返回具体View。
- DispatcherServlet根据View进行渲染视图。
- DispatcherServlet响应用户。
工作流程图:
配置文件的xml
在src目录下创建Spring MVC的配置文件 xxx.xml :
//使用扫描机制扫描控制器类,控制器类都在controller包及其子包下 包含了<context:annotation‐config>
的功能
<context:component-scan base-package="com.gx.controller"/>
//配置视图解析器 使用JSP
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
视图路径前缀 /WEB-INF/jsp/目录
<property name="prefix" value="/WEB-INF/jsp/"/>
视图的后缀 JSP的后缀为.jsp
<property name="suffix" value=".jsp"/>
</bean>
在JavaWeb 项目的web.xml中配置SpringMVC的核心
<url-pattern>/</url-pattern>
<!--第一种配置:<url-pattern>*.do</url-pattern> 古老的写法,还可以写*.action等等, 表示以.do结尾的或者以.action结尾的URL都由前端控制器DispatcherServlet来解析 , 其余的匹配不上的静态资源由web.xml下的defaultservlet处理。
第二种配置: <url-pattern>/</url-pattern> 推荐写法,这个路径可以匹配所有的请求,匹配到的url都由DispatcherServlet来解析, 其实是覆盖掉呢web.xml下的default, 需要对静态资源单独处理,一般使用
<mvc:resources location="/js/" mapping="/js/**"/> 这种配置还能实现restful
第三种配置:【不要使用】错误配置:/*, 就会匹配到所有类型的url,包括路径型的,有各种后缀的等等, 注意这里是不能这样配置的, 因为如果这样写,最后转发到 jsp 页面的时候,仍然会由DispatcherServlet进行解析, 而 这时候会找不到对应的Handler,从而报404!!! -->
注意:
<url-pattern>/</url-pattern>
表示的为只匹配/login和/demo,后面不带.xxx的 <url-pattern>/*</url-pattern>
表示匹配的为所有,包括.jsp、.js、.html等 在Spring中的Springmvc配置中url-pattern应该使用/。不然会导致jsp页面都被DispatcherServlet给转发了,无法被解析。