1.1 简介
1.1.1 概述
Spring Web MVC 框架简称 Spring MVC,Spring MVC 属于 SpringFrameWork 的后续产品,已经融合在 Spring Web Flow 里面。实现了 Web 开发中的经典的 MVC(Model-View-
Controller)模式。使用 Spring 可插入的 MVC 架构,从而在使用 Spring 进行 WEB 开发时,可以选择使用 Spring 的 Spring MVC 框架或集成其他 MVC 开发框架, MVC 由以下 3 部分组成:
♞ 模型(Model):应用程序的核心功能,管理模块中用到的数据和值。
♞ 视图(View):提供模型的展示,管理模型如何显示给用户,它是应用程序的外观。
♞ 控制器(Controller):对用户的输入做出反应,管理用户和视图的交互,是连接模型和视图的枢纽。
Spring Web MVC 是基于 Servlet APl 来构建的,自 Spring 框架诞生之日起,就包含在 Spring 中了。要使用 Spring Web MVC 框架的功能,需要添加 spring-webmvc 模块。
1.1.2 Spring MVC 组件
- DispatcherServlet
整个流程控制的核心,调用其他组件处理用户的请求,降低了组件之间的耦合性 - HandleMapping
根据用户请求找到 Handle - HandleAdpater
执行 Handle - ViewResolver
将结果处理成 View - Handle 【自己写的controller层】
业务逻辑 - View 【JSP、HTML】
渲染 View
1.1.3 执行流程
♞ 浏览器发送请求到服务器,DispatcherServlet(前端核心控制器) 匹配所有请求
♞ DispatcherServlet 将 url 发送给 HandleMapping(处理器映射器)
♞ HandleMapping 查找是否有符合该路径的方法,有则将方法全限定名返回给 DispatcherServlet,没有则报 404
♞ DispatcherServlet 拿到 HandleMapping 返回的全限定名,将其交给 HandleAdapater(处理器适匹配器)
♞ HandleAdpater 拿到全限定名后执行方法
♞ 方法返回 视图名称,HandleAdpater 将其返回给 DispatcherServlet
♞ DispatcherSerclet 拿到 视图名称 后,将其交给 ViewResolver(视图解析器)
♞ ViewResolver 拿到 视图名称 查找是否有匹配的资源
♞ 有则将 视图 返回给 DispatcherServlet
♞ DispatcherServlet 拿到 视图 后,将其交给 View 渲染,填充数据后,DispatcherServlet 将 视图 响应给浏览器
1.2 基本使用
1.2.1 相关依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
1.2.2 spring 配置(spring-mvc.xml)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
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/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 开启注解扫描 -->
<context:component-scan base-package="com.software.spring"/>
<!-- 开启 MVC 注解支持 -->
<mvc:annotation-driven/>
</beans>
1.2.3 配置前端核心控制器(web.xml)
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<!-- 配置前端核心控制器 -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 初始化参数, 指定加载配置文件 -->
<init-param>
<!-- 参数名 -->
<param-name>contextConfigLocation</param-name>
<!-- 值 -->
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<!--
load-on-startup 元素标记容器是否应该在 web 应用程序启动的时候就加载这个 servlet,即实例化并调用 init() 方法
它的值必须是一个整数,表示 servlet 被加载的先后顺序。
如果该元素的值为负数或者没有设置,则容器会当 servlet 被请求时再加载
如果值为正整数或者 0 时,表示容器在应用启动时就加载并初始化这个 servlet
值越小,servlet 的优先级越高,就越先被加载。值相同时,容器就会自己选择顺序来加载。
-->
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
1.2.4 @RequestMapping 指定请求路径
/**
* Created with IntelliJ IDEA.
*
* @author Demo_Null
* @date 2020/8/24
* @description 控制器
*/
@Controller
public class DemoController {
/*
* value:用于指定请求的 URL。它和 path 属性的作用是一样的
* method:用于指定请求的方式
* params:用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的 key 和 value 必须和配置的一模一样
* headers:指定限制请求的请求头信息
*/
@RequestMapping(value = "/get", method = RequestMethod.GET)
public void get() {
System.out.println("请求到了~~~~");
}
}
1.2.5 项目目录
1.2.6 IDEA 启动
☞ 打包项目
☞ 配置 Tomcat
☞ 启动项目
启动项目之后,请求 Tomcat 中配置好的 URL + @RequestMapping 上配置好的请求路径就可以请求到对应的方法。