前言

我们前面学习了Spring两大核心机制IoC和AOP,接下来我们一起来学习Spring MVC。这篇文章带你快速入门Spring MVC。

Spring MVC概述

Spring MVC是目前主流的实现MVC设计模式的框架,是Spring框架的一个分支产品,以Spring loC容器为基础,并利用容器的特性来简化它的配置。Spring MVC相当于Spring的-一个子模块,可以很好的和Spring结合起来进行开发,是Java Web开发者必须要掌握的框架。

什么是MVC设计模式?

将应用程序分为Controller Model View 三层,Controller 接收客户端请求,调用Model生成业务数据,传递给View,Spring MVC就是对这套流程的封装,屏蔽了很多底层代码,开放出接口,让开发者可以更加轻松、便捷地完成基于MVC模式的Web开发。

MVC核心组件

  • DispatcherServlet: 前置控制器,是整个流程控制的核心,控制其他组件的执行,进行统一调度,降低组件之间的耦合性,相当于总指挥。
  • Handler: 处理器,完成具体的业务逻辑,相当于Servlet 或Action。
  • HandlerMapping: DispatcherServlet 接收到请求之后,通过HandlerMapping将不同的请求映射到不同的Handler。
  • HandlerInterceptor: 处理器拦截器,是-一个接口,如果需要完成- -些拦截处理, 可以实现该接口。
  • HandlerExecutionChain: 处理器执行链,包括两部分内容: Handler 和HandlerInterceptor (系统会有一个默认的HandlerInterceptor,如果需要额外设置拦截,可以添加拦截器)。
  • HandlerAdapter: 处理器适配器,Handler执行业务方法之前,需要进行- -系列的操作,包括表单数据的验证、数据类型的转换、将表单数据封装到JavaBean等,这些操作都是由HandlerApater来完成,开发者只需将注意力集中业务逻辑的处理上,DispatcherServlet 通过HandlerAdapter执行不同的Handler。
  • ModelAndView: 装载了模型数据和视图信息,作为Handler的处理结果,返回给DispatcherServlet。
  • ViewResolver: 视图解析器,DispatcheServlet 通过它将逻辑视图解析为物理视图,最终将渲染结果响应给客户端。

Spring MVC的工作流程

  • 客户端请求被DisptacherServlet接收。
  • 根据HandlerMapping映射到Handler。
  • 生成Handler和HandlerInterceptor。
  • Handler 和HandlerInterceptor以HandlerExecutionChain的形式一并返回给DisptacherServlet。
  • DispatcherServlet 通过HandlerAdapter调用Handler的方法完成业务逻辑处理。
  • Handler 返回一个ModelAndView给DispatcherServlet。
  • DispatcherServlet将获取的ModelAndView对象传给ViewResolver视图解析器,将逻辑视图解析为物理视图View。
  • ViewResovler 返回-个View给DispatcherServlet。
  • DispatcherServlet 根据View进行视图渲染。
  • DispatcherServlet 将渲染后的结果响应给客户端。

创建第一个Spring MVC项目

前面我们讲了这么多的理论,看起来非常的复杂,其实,在我们实际开发中,Spring MVC使用起来还是比较简单的,其中很多的过程Spring都会自动去处理好。下面我们就来创建自己的第一个Spring MVC项目。

1.创建一个maven项目

快速入门Spring MVC 一篇就够了_spring

这里创建maven项目不同于我们之前,这里需要勾选​​Create from archetype​​并选择​​archetype-webapp​​,后面就很简单,一路next下去就ok。

创建项目之后,需要稍等几分钟下载一些依赖。

快速入门Spring MVC 一篇就够了_spring_02

创建完成之后就是这么个目录结构。weapp包中存放的是weapp的一些组件。

在main目录下创建java文件夹用于存放Java代码,然后右键点击java文件夹。

快速入门Spring MVC 一篇就够了_视图解析器_03

2.在pom.xml中引入spring-webmvc依赖

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.15</version>
</dependency>

3.在web.xml中配置DispatcherServlet

<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>
</servlet>

<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern></url-pattern>
</servlet-mapping>

4.spring.xml配置

<!-- 自动扫描 -->
<context:component-scan base-package="com"></context:component-scan>

<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"></property>
<property name="suffix" value=".jsp"></property>
</bean>

自动扫描我们应该比较熟悉,之前在AOP中有配置过。

这个视图解析器呢实际上就是相当于把逻辑视图解释成物理视图,这么说可能比较抽象。比如我们一个方法返回了一个​​homepage​​,我们这时需要将​​homepage​​和​​homepage.jsp​​匹配起来,我们就需要配个前缀和后缀,​​prefix​​和​​suffix​​分别就是前缀和后缀的意思。前缀是在​​homepage​​前面写的​​/​​ 表示根目录,后缀即写在​​homepage​​后面的就是​​.jsp​​。

5.创建Handler

在java文件下创建一个包,我的包名为​​com.controller​​,包下创建​​FirstHandler​​java文件。

package com.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class FirstHandler {

@RequestMapping("/homepage")
public String homepage(){
System.out.println("打开homepage");
return "homepage";
}
}

代码解析

​@Controller​​注解与​​@Component​​注解类似,都是将类交给IoC容器来进行管理,但与​​@Component​​不同的是,​​@Controller​​多了一个控制器的功能。

​homepage()​​就是我们的业务方法,这时我们需要将业务方法和控制器关联起来,我们就需要用到 ​​@RequestMapping​​注解参数为​​"/homepage"​​,这样在我们在浏览器中访问​​http://localhost:8080/homepage​​的时候,我们就能执行​​homepage()​​方法,这个方法又返回一个​​"homepage"​​相当于一个逻辑视图,这样再配合我们前面配置的视图解析器就能找到我们的​​homepage.jsp​​文件了。

6.创建homepage.jsp文件

<html>
<head>
<title>Title</title>
</head>
<body>
<h1>HelloWorld</h1>
</body>
</html>

这样我们Spring MVC的基本环境就配置好了,接下来要运行我们的项目就需要配置tomcat。

配置tomcat

1.首先,我们点击​​ADD Configurations​​,如图所示:

快速入门Spring MVC 一篇就够了_视图解析器_04

2.然后,点击左上角的​​+​​号。

快速入门Spring MVC 一篇就够了_mvc_05

3.在左侧边栏中找到Tomcat Server并点击Local。

快速入门Spring MVC 一篇就够了_spring_06

4.点击Deplyment,再点击+号,将项目war包添加进来。

快速入门Spring MVC 一篇就够了_视图解析器_07

快速入门Spring MVC 一篇就够了_视图解析器_08

5.修改Application context。

[图片上传失败...(image-10a5e8-1665309532137)]

我们去掉后面的直接访问根目录。然后点击Apply和ok就可以了。

启动项目

运行项目,然后我们在浏览器中访问​​http://localhost:8080/homepage​​就能看到我们的页面了。

快速入门Spring MVC 一篇就够了_mvc_09

这样我们就完成了Spring MVC的基本的环境搭建。

对Spring MVC感兴趣的小伙伴们支持一下,后面的内容我会持续更新。