# SpringMVC学习

SpringMVC

1、SpringMVC是什么?

SpringMVC 是 Spring 框架的一个模块,专门用于构建 Web 应用程序。它基于 Model-View-Controller (MVC) 设计模式,帮助开发者将应用程序的不同部分(模型、视图和控制器)分离,从而提高代码的可维护性和可扩展性。以下是 SpringMVC 的一些关键点:

  1. MVC 架构:
    Model(模型):负责处理业务逻辑和数据操作。
    View(视图):负责展示数据给用户,通常使用 JSP、Thymeleaf 等模板引擎。
    Controller(控制器):处理用户请求,调用模型和视图,返回响应结果。
  2. 松耦合:通过依赖注入(DI)和面向接口编程,SpringMVC 使组件之间解耦,便于测试和维护。
  3. 配置灵活:支持 XML 和注解两种配置方式,提供了丰富的配置选项。
  4. 功能丰富:包括数据验证、类型转换、数据绑定、国际化(i18n)、主题支持等。
  5. RESTful 支持:提供对 RESTful 风格的 Web 服务的支持,简化 RESTful API 的开发。
  6. 易于集成:与 Spring 框架的其他模块(如 Spring Security、Spring Data)无缝集成,构建复杂的企业级应用。

2、SpringMVC能做什么?

处理 HTTP 请求

处理用户的 HTTP 请求和响应。

支持 GET、POST、PUT、DELETE 等多种 HTTP 方法。

路由和分发

将请求分发到不同的控制器方法。

支持 URL 映射和参数绑定。

数据绑定

自动将请求参数绑定到控制器方法的参数上。

支持复杂对象的自动绑定。

数据验证

使用 JSR-303(如 Hibernate Validator)进行数据验证。

在控制器方法中处理验证错误。

视图渲染

支持多种视图技术,如 JSP、Thymeleaf、FreeMarker 等。

渲染视图并返回响应给客户端。

国际化(i18n)

支持多语言和区域设置。

动态切换语言和区域设置。

异常处理

统一处理异常,提供友好的错误页面或错误信息。

支持全局异常处理器和局部异常处理器。

文件上传和下载

支持文件上传和下载功能。

处理大文件上传和下载。

RESTful API 开发

支持开发 RESTful 风格的 Web 服务。

提供注解(如 @RestController、@RequestMapping)简化 RESTful API 的开发。

安全性和认证

与 Spring Security 集成,提供安全性和认证功能。

保护 Web 应用免受常见的安全威胁。

缓存支持

支持缓存机制,提高应用性能。

使用注解(如 @Cacheable)管理缓存。

异步处理

支持异步请求处理,提高应用的响应速度。

使用 @Async 注解实现异步方法。

拦截器

使用拦截器(Interceptor)在请求处理前后执行特定逻辑。

用于日志记录、性能监控、权限检查等。

3、SpingMVC能给我带来什么好处?

快速开发

注解配置:使用注解简化配置,减少 XML 文件的编写,加快开发速度。

自动配置:Spring Boot 集成后,自动配置很多常见功能,减少初始配置时间。

代码清晰

MVC 分层:将业务逻辑、数据和视图分离,代码结构清晰,易于维护。

依赖注入:通过 DI 减少代码耦合,提高代码的可读性和可测试性。

功能丰富

数据绑定:自动将请求参数绑定到方法参数,简化数据处理。

数据验证:内置支持 JSR-303 验证,确保输入数据的有效性。

视图渲染:支持多种视图技术(JSP、Thymeleaf、FreeMarker 等),灵活选择。

易于测试

单元测试:Spring 提供了丰富的测试支持,便于编写和运行单元测试。

Mock 对象:使用 Mock 对象模拟依赖,简化测试环境的搭建。

安全性

集成 Spring Security:轻松实现用户认证和授权,保护应用安全。

细粒度控制:支持方法级别的安全控制,确保敏感操作的安全性。

性能优化

缓存支持:使用注解管理缓存,减少数据库访问,提高性能。

异步处理:支持异步请求处理,提高应用的响应速度和并发处理能力。

国际化

多语言支持:轻松实现多语言和区域设置,满足国际化需求。

文件上传下载

文件处理:内置支持文件上传和下载功能,处理大文件传输。

RESTful API 开发

简化 RESTful 开发:使用 @RestController 和 @RequestMapping 注解,快速开发 RESTful API。

社区支持

活跃社区:拥有庞大的开发者社区,遇到问题时可以快速获得帮助。

丰富资源:官方文档详尽,提供了大量示例和教程,便于学习和使用

4、SpringMVC如何使用?

1.添加依赖

首先,在项目的 pom.xml 文件中添加 SpringMVC 的依赖。如果你使用的是 Maven,可以添加以下依赖:

xml 复制代码
<dependencies>
    <!-- Spring Web MVC -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.10</version>
    </dependency>

    <!-- Servlet API -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>

    <!-- Thymeleaf 视图模板(可选) -->
    <dependency>
        <groupId>org.thymeleaf</groupId>
        <artifactId>thymeleaf-spring5</artifactId>
        <version>3.0.12.RELEASE</version>
    </dependency>
</dependencies>

2.配置 SpringMVC

创建一个 SpringMVC 配置类或 XML 配置文件。

  1. 以java 配置为例:
java 复制代码
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

    @Bean
    public InternalResourceViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
    }
}
  1. 以 XML 配置为例:
xml 复制代码
<?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">

    <!-- 启用 SpringMVC 的注解驱动 -->
    <mvc:annotation-driven />

    <!-- 扫描控制器类 -->
    <context:component-scan base-package="com.example.controller" />

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

</beans>

3.创建控制器类

创建一个控制器类,使用 @Controller 注解标记,并定义处理请求的方法:

java 复制代码
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HomeController {

    @GetMapping("/")
    public String home(Model model) {
        model.addAttribute("message", "Hello, SpringMVC!");
        return "home";
    }
}

4.创建视图模板

jps 复制代码
<!DOCTYPE html>
<html>
<head>
    <title>SpringMVC Example</title>
</head>
<body>
    <h1>${message}</h1>
</body>
</html>

5.配置Web 应用

xml 复制代码
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
         http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextClass</param-name>
            <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
        </init-param>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>com.example.config.WebConfig</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

6.运行应用

将项目部署到支持 Servlet 的容器(如 Tomcat),启动服务器,访问应用的根路径(例如 http://localhost:8080/),你应该会看到显示 "Hello, SpringMVC!" 的页面。

5、SpingMVC的实现原理是什么?

1. 前端控制器:DispatcherServlet

作用:作为前端控制器,DispatcherServlet 接收所有的 HTTP 请求,并将请求分发给相应的处理器。

初始化:在应用启动时,DispatcherServlet 会加载配置文件(通常是 spring-mvc-config.xml),初始化各种 Bean 和处理器映射。

2. 处理器映射:HandlerMapping

作用:HandlerMapping 负责根据请求 URL 查找并返回相应的处理器(Controller)。

类型:常用的 HandlerMapping 实现有 RequestMappingHandlerMapping,它基于 @RequestMapping 注解来匹配请求。

3. 处理器适配器:HandlerAdapter

作用:HandlerAdapter 负责调用处理器(Controller)中的具体方法,并处理方法的返回值。

类型:常用的 HandlerAdapter 实现有 RequestMappingHandlerAdapter,它支持多种类型的处理器方法,包括 @GetMapping、@PostMapping 等。

4. 视图解析器:ViewResolver

作用:ViewResolver 负责将逻辑视图名称解析为具体的视图对象(如 JSP、Thymeleaf 等)。

类型:常用的 ViewResolver 实现有 InternalResourceViewResolver,它用于解析 JSP 视图。

5. 处理流程

请求到达:客户端发送 HTTP 请求到 DispatcherServlet。

请求分发:DispatcherServlet 调用 HandlerMapping 查找合适的处理器(Controller)。

处理器执行:DispatcherServlet 调用 HandlerAdapter 执行处理器方法。

模型数据准备:处理器方法处理业务逻辑,并将模型数据添加到 Model 中。

视图解析:HandlerAdapter 返回一个 ModelAndView 对象,包含视图名称和模型数据。DispatcherServlet 使用 ViewResolver 将逻辑视图名称解析为具体的视图对象。

视图渲染:视图对象负责将模型数据渲染成 HTML 页面,返回给客户端。

6. 拦截器:HandlerInterceptor

作用:拦截器可以在请求处理的不同阶段进行干预,如预处理、后处理和完成处理。

类型:常用的拦截器接口有 HandlerInterceptor,可以通过 InterceptorRegistry 注册拦截器。

7. 数据绑定和验证

数据绑定:SpringMVC 自动将请求参数绑定到处理器方法的参数上。

数据验证:可以使用 JSR-303 验证注解(如 @NotNull、@Size 等)对请求参数进行验证。

8. 异常处理

作用:SpringMVC 提供了多种方式处理异常,如 @ExceptionHandler 注解和全局异常处理器。

类型:常用的异常处理机制有 @ControllerAdvice,可以集中处理多个控制器的异常。

9. 国际化

作用:SpringMVC 支持多语言和区域设置,可以通过 LocaleResolver 和 ResourceBundleMessageSource 实现国际化。

10. 文件上传

作用:SpringMVC 提供了文件上传的支持,可以通过 MultipartFile 接口处理上传的文件。

6、SpringMVC总结

SpringMVC 是 Spring 框架的一部分,专门用于构建 Web 应用程序。它遵循 MVC(Model-View-Controller)设计模式,通过一系列组件和机制实现了请求的接收、处理和响应。以下是 SpringMVC 的主要特点和总结:

1. 核心组件

DispatcherServlet:前端控制器,接收所有 HTTP 请求并分发给相应的处理器。

HandlerMapping:处理器映射,根据请求 URL 查找并返回相应的处理器(Controller)。

HandlerAdapter:处理器适配器,调用处理器方法并处理方法的返回值。

ViewResolver:视图解析器,将逻辑视图名称解析为具体的视图对象。

2. 主要功能

请求处理:通过 @Controller 和 @RequestMapping 注解定义处理器方法,处理不同的 HTTP 请求。

数据绑定:自动将请求参数绑定到处理器方法的参数上。

数据验证:支持 JSR-303 验证注解(如 @NotNull、@Size 等)对请求参数进行验证。

视图渲染:支持多种视图技术(如 JSP、Thymeleaf、Freemarker 等),将模型数据渲染成 HTML 页面。

异常处理:通过 @ExceptionHandler 和 @ControllerAdvice 注解集中处理异常。

拦截器:通过 HandlerInterceptor 在请求处理的不同阶段进行干预。

国际化:支持多语言和区域设置,通过 LocaleResolver 和 ResourceBundleMessageSource 实现。

文件上传:通过 MultipartFile 接口处理上传的文件。

3. 配置方式

XML 配置:通过 spring-mvc-config.xml 文件配置 SpringMVC 的各个组件。

Java 配置:通过 @Configuration 和 @EnableWebMvc 注解创建配置类,实现更灵活的配置。

4. 优点

松耦合:MVC 设计模式使得模型、视图和控制器分离,提高了代码的可维护性和可测试性。

高度可扩展:通过各种组件和机制,可以轻松扩展和定制功能。

强大的数据绑定和验证:简化了数据处理和验证的代码。

丰富的视图技术支持:支持多种视图技术,满足不同需求。

良好的异常处理机制:提供了多种方式处理异常,提高应用的健壮性。

5. 缺点

学习曲线:对于初学者来说,SpringMVC 的配置和使用可能有一定的学习曲线。

配置复杂:虽然可以通过 Java 配置简化,但大型项目中配置管理仍然可能较为复杂。

6. 使用场景

Web 应用开发:适用于各种 Web 应用,尤其是需要处理大量 HTTP 请求的应用。

RESTful API 开发:通过 @RestController 和 @RequestMapping 注解,可以方便地开发 RESTful API。

企业级应用:SpringMVC 与 Spring 框架的其他模块(如 Spring Data、Spring Security 等)无缝集成,适合企业级应用开发。

7. 最佳实践

分层架构:遵循 MVC 设计模式,明确划分模型、视图和控制器的职责。

单元测试:编写单元测试,确保处理器方法的正确性。

异常处理:合理使用 @ExceptionHandler 和 @ControllerAdvice,集中处理异常。

性能优化:通过缓存、异步处理等方式优化性能。

通过以上总结,可以看出 SpringMVC 是一个强大且灵活的 Web 框架,适用于各种规模和复杂度的 Web 应用开发。

相关推荐
一元咖啡1 小时前
SpringCloud Gateway转发请求到同一个服务的不同端口
spring·spring cloud·gateway
java亮小白19972 小时前
Spring循环依赖如何解决的?
java·后端·spring
苏-言3 小时前
Spring IOC实战指南:从零到一的构建过程
java·数据库·spring
草莓base3 小时前
【手写一个spring】spring源码的简单实现--容器启动
java·后端·spring
冰帝海岸10 小时前
01-spring security认证笔记
java·笔记·spring
没书读了11 小时前
ssm框架-spring-spring声明式事务
java·数据库·spring
代码小鑫14 小时前
A043-基于Spring Boot的秒杀系统设计与实现
java·开发语言·数据库·spring boot·后端·spring·毕业设计
真心喜欢你吖14 小时前
SpringBoot与MongoDB深度整合及应用案例
java·spring boot·后端·mongodb·spring
斗-匕16 小时前
Spring事务管理
数据库·spring·oracle
Doker 多克19 小时前
Spring AI 框架使用的核心概念
人工智能·spring·chatgpt