前言
我们前面学习了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项目
这里创建maven项目不同于我们之前,这里需要勾选Create from archetype并选择archetype-webapp,后面就很简单,一路next下去就ok。
创建项目之后,需要稍等几分钟下载一些依赖。
创建完成之后就是这么个目录结构。weapp包中存放的是weapp的一些组件。
在main目录下创建java文件夹用于存放Java代码,然后右键点击java文件夹。
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,包下创建FirstHandlerjava文件。
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,如图所示:
2.然后,点击左上角的+号。
3.在左侧边栏中找到Tomcat Server并点击Local。
4.点击Deplyment,再点击+号,将项目war包添加进来。
5.修改Application context。
[图片上传失败...(image-10a5e8-1665309532137)]
我们去掉后面的直接访问根目录。然后点击Apply和ok就可以了。
启动项目
运行项目,然后我们在浏览器中访问http://localhost:8080/homepage就能看到我们的页面了。
这样我们就完成了Spring MVC的基本的环境搭建。
对Spring MVC感兴趣的小伙伴们支持一下,后面的内容我会持续更新。