1.MVC与三层关系架构的关系
很多同学会认为MVC就是三层架构。其实它们之间区别又有联系,准确的说是站在不同的视角描述着相同的概念
三层架构
为了满足“高内聚、低耦合”的思想,我们把程序结构分为三层,分别是展示层、业务逻辑层和数据访问层。每一层单独负责其职责,各层之间通过接口相互访问,通过对象模型作为数据载体在各层之间传递数据。相信学过JavaWeb的同学,对三层架构的应用已经有一定的认识。在三层架构中,我们提到了对象模型、展示层等概念。而这些概念在MVC架构中有了新的身份。
MVC模型
MVC来自于Model、View、Controller三个单词。
- Model:模型表示业务规则。模型在MVC中拥有最多的处理任务。模型中承载的数据可被视图View来使用,且可被多个View重复使用。
- View:视图是用户看到的,且可以与之交互的界面。在视图中并不会产生真正的处理,只是作为输出数据并允许进行用户交互。
- Controller:控制器旨在接受用户的输入并调用模型和视图来完成用户的需求。控制器本身不做任何处理,只是根据接受的请求来决定调用哪个模型去处理请求,并确定哪个视图来显示返回的数据。
看完MVC的解释后我们发现,MVC离不开三层架构,而三层架构的执行逻辑其实就是MVC执行逻辑。
2.SpringMVC
Spring Web MVC是基于Servlet API构建的原始Web框架,从一开始就包含在Spring框架中。
SpringMVC简化了我们在构建MVC项目时的繁琐操作,而其内部拥有着堪称完美的MVC模型底层执行逻辑。
在上面的执行流程图中详细介绍了SpringMVC在收到请求后是如何通过核心控制器、处理映射器、处理适配器、视图解析器来完成整个MVC执行流程。
下面索尔老师带大家快速搭建一个SpringMVC项目。
3.快速体验SpringMVC
- 导入依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.6.RELEASE</version>
</dependency>
- 配置核心控制器DispatcherServlet
作为一个MVC框架,首先要解决的是如何能够收到请求。所有请求都会经过该核心控制器。此控制器在接收到请求后,还会负责springMVC的核心的调度管理。
Servlet作为核心控制器的技术实现再合适不过了
<servlet>
<servlet-name>mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 声明Spring容器所需的配置文件位置 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:mvc.xml</param-value>
</init-param>
<!-- DispatcherServlet优先启动 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
- 后端控制器
等价于之前定义的Servlet,由DispatcherServlet根据请求路径来调度。在hello方法中可以加入业务逻辑层的调用,这也是三层架构的体现。
@Controller //声明这是一个控制器
@RequestMapping("/hello") //访问路径
public class HelloController {
@RequestMapping("/test1") //访问路径
public String hello(){
System.out.println("hello world");
return "redirect:index.jsp"; // 跳转:/index.jsp
}
}
- 配置文件
SpringMVC项目中用到的业务Bean和实体Bean也同样需要Spring容器来管理,因此需要Spring的配置文件,在配置文件中指明了包扫描路径。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--确定包扫描路径-->
<context:component-scan base-package="com.qf.controller"></context:component-scan>
</beans>
- 访问
完成配置后通过浏览器访问Controller定义的Web路径,既可以问到index.jsp页面内容。
http://localhost:8080/hello/test1
4.总结
SpringMVC是Spring核心框架里的重要组件,掌握他可以快速提升Web项目开发效率。