文章目录
- 前言
- 一、 核心的组件
- 二、基本实现流程
- 三、MVC的基本配置使用
前言
Spring MVC是一个用于构建Web应用程序的基于MVC(Model-View-Controller)设计模式的框架。
它是Spring Framework的一部分,提供了一种灵活、可扩展且功能强大的方式来开发Java Web应用程序。
以下是关于Spring MVC的主要特点和核心组件:
特点:
解耦合:
Spring MVC与具体的视图技术解耦,可以方便地切换不同的视图渲染器,如JSP、Thymeleaf、Freemarker等。
基于注解:
通过使用注解,可以简化配置,并提高开发效率。例如,通过@Controller注解声明控制器类,@RequestMapping注解映射URL请求。
强大的数据绑定和验证:
Spring MVC提供了数据绑定和验证功能,让处理表单数据更加方便和安全。
内置支持RESTful风格:
Spring MVC原生支持处理RESTful风格的请求,并提供了@RestController注解,使编写RESTful API更加简洁。
拦截器支持:
通过拦截器(Interceptor),可以在请求处理的各个阶段进行预处理和后处理,实现统一的处理逻辑,如身份验证、日志记录等。
通过Spring MVC,开发人员可以使用简洁的代码组织Web应用程序,并实现良好的分层结构和可测试
一、 核心的组件
DispatcherServlet:
中央调度器,负责接受所有的请求,并调度其他组件的执行,负责将用户请求分配给相应的控制器处理,还可以降低不同组件之间的耦合性,是整个Spring MVC的核心模块
Handler:
处理器,完成具体的业务逻辑,数据处理,相当于Servlet
HandlerMapping:
用于将所有的请求映射到相应的控制器处理方法。Spring MVC 的 HandlerMapping 可以配置多个,以支持不同的 URL 映射方式。
HandlerInterceptor:
处理器拦截器,是一个接口,如果我们需要进行一些拦截处理,可以通过实现该接口完成
HandlerExecutionChain:
处理器执行链,包括两部分内容:Handler和HandlerInterceptor(系统会有一个默认的HandlerInterceptor,如果有额外拦截处理,可以添加拦截器进行设置)
HandlerAdapter:
处理器适配器,Handler执行业务方法之前,需要进行一系列的操作包括表单的数据验证、数据类型转换、把表单数据封装到POJO等,这些一系列的操作都是由HandlerAdapter完成,DispatcherServlet通过HandlerAdapter执行不同的Handler。也就是将控制器处理方法封装成处理器,同时支持多种处理器,以支持不同的控制器处理方法。
ModelAndView:
封装了模型数据和视图信息,作为Handler的处理结果,返回给DispatcherServlet
ViewResolver:
视图解析器,DispatcherServlet通过它把逻辑视图解析为物理视图的路径。
View:
负责渲染数据模型并生成最终的响应结果,可以是HTML页面或其他类型的数据格式。
在 Spring MVC 中,我们通常需要定义一个控制器来处理请求,可以通过 @Controller 注解来标识一个控制器。控制器中的处理方法使用 @RequestMapping 注解来映射请求 URL,并通过 @RequestParam 等注解来获取请求参数和路径变量等信息。模型数据可以通过 ModelAndView 或 ModelMap 等方式传递给视图模板进行渲染。
其中除了以上核心组件,Spring MVC还提供了许多其他功能和扩展点,如数据绑定、表单验证、文件上传、异常处理、国际化支持等,以满足各种Web应用程序的需求。
二、基本实现流程
1. 客户端请求被DispatcherServlet接收
2. 根据这些请求,然后HandlerMapping将请求路径分组映射到不同的Handler
3. Handler和HandlerInterceptor以HandlerExecutionChain的形式一并返回给DispatcherServlet
4. DispatcherServlet通过HandlerAdapter调用Handler的方法完成业务逻辑处理
5. 返回一个ModelAndView对象给DispatcherServlet
6. DispatcherServlet把获取的ModelAndView对象传给ViewResolver视图解析器,把逻辑视图解析成物理视图
7. ViewResolver返回一个View进行视图渲染(把模型填充到视图中)
8. DispatcherServlet把渲染后的视图响应给客户端
在上述工作流程中,DispatcherServlet 充当着中央调度器的角色,负责接收客户端的请求,并将请求分发给相应的 Controller 进行处理。HandlerMapping 和 ViewResolver 则负责解析请求信息和视图信息,将请求路由到正确的 Controller 和对应的视图模板进行处理。Controller 则负责处理业务逻辑,通过 ModelAndView 来封装模型数据和视图名称。最终,DispatcherServlet 将视图渲染之后返回给客户端。
整个流程中涉及到的关键组件包括 DispatcherServlet、HandlerMapping、HandlerAdapter、Controller、ViewResolver 和 View 等 ,Spring MVC 框架处理请求的方式非常灵活,可以通过配置多个 HandlerMapping、HandlerAdapter 和 ViewResolver 等来支持不同的 URL 映射方式和控制器处理方法。
三、MVC的基本配置使用
1.导入依赖:在项目的构建工具(如Maven、Gradle)配置文件中添加Spring MVC的依赖项
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>SpringMVC</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>SpringMVC Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!--mvc支持-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.19</version>
</dependency>
</dependencies>
</project>
2.配置web.xml:在web.xml文件中配置DispatcherServlet,作为中央调度器。
<!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>
<display-name>Archetype Created Web Application</display-name>
<!-- 配置springmvc的核心servlet-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!-- 告诉springmvc配置文件的位置-->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<!-- 拦截所有请求-->
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
3.创建Spring MVC配置文件:在上述配置中指定的位置创建Spring MVC的配置文件,配置各种的组件。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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">
<!-- 1. 开启注解扫描-->
<context:component-scan base-package="com.lin.controller"/>
<!-- 2. 配置处理器映射器-->
<!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />-->
<!-- 3. 开启处理器适配器-->
<!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" />-->
<!-- 上面两段配置被下面的一句话所替代(封装)-->
<mvc:annotation-driven />
<!-- 4. 开启视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
4.创建控制器:在指定的控制器包路径中创建处理请求的控制器类,并添加注解以标识为控制器。
@Controller
public class HomeController {
@RequestMapping("/")
public String home() {
return "home";
}
}
5.创建视图:根据上述配置中的视图解析器,创建对应的JSP视图文件。
6.运行应用程序:部署项目到服务器,并启动服务器,访问相应的URL即可看到处理后的视图。
以上是springmvc的基本流程步骤,要求详细的过程还需要小伙伴多去学习学习