SpringMVC基础

以下是 ​​SpringMVC 框架基础​​的核心知识点总结,结合了多个教程和源码解析,帮助你快速掌握其核心原理和开发流程:


一、SpringMVC 概述

  1. ​​定义​​

    SpringMVC 是 Spring 框架的 Web 模块,基于 ​​MVC 设计模式​ ​,通过解耦请求处理、业务逻辑和视图渲染,简化 Web 开发。其核心是 ​​DispatcherServlet​​(前端控制器),负责请求分发和流程控制。

  2. ​​核心特点​​

    • ​​注解驱动​ ​:通过 @Controller、@RequestMapping等注解简化配置。

    • ​​灵活扩展​​:支持自定义拦截器、视图解析器、数据绑定等。

    • ​​RESTful 支持​​:通过 HTTP 方法(GET/POST/PUT/DELETE)映射资源操作。

    • ​​与 Spring 生态无缝集成​​:依赖注入(DI)、事务管理等特性可直接复用。


二、核心组件与工作流程

1. 核心组件
组件 作用 典型实现类/配置
​​DispatcherServlet​​ 前端控制器,接收所有请求并分发到处理器 配置在 web.xml中
​​HandlerMapping​​ 将请求 URL 映射到具体的处理器(Controller) RequestMappingHandlerMapping
​​Controller​​ 处理业务逻辑,返回 ModelAndView或数据 使用 @Controller注解的类
​​ModelAndView​​ 封装模型数据(Model)和视图名称(View) 由 Controller 方法返回
​​ViewResolver​​ 将逻辑视图名解析为具体视图(如 JSP、Thymeleaf) InternalResourceViewResolver
2. 请求处理流程
  1. ​​用户发起请求​ ​ → ​​DispatcherServlet 拦截请求​​

  2. ​​HandlerMapping 查找处理器​ ​ → ​​HandlerAdapter 执行处理器方法​​

  3. ​​Controller 处理逻辑​ ​ → ​​返回 ModelAndView​​

  4. ​​ViewResolver 解析视图​ ​ → ​​视图渲染​ ​ → ​​响应返回客户端​​

    (详细流程可参考 )


三、快速入门示例

1. 项目配置
  • ​​依赖配置(pom.xml)​​

    复制代码
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.10</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>
  • ​​web.xml 配置​​

    复制代码
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring-mvc.xml</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>
2. 控制器示例
复制代码
@Controller
public class HelloController {
    @RequestMapping("/hello")
    public ModelAndView hello() {
        ModelAndView mav = new ModelAndView("hello");
        mav.addObject("message", "Hello, Spring MVC!");
        return mav;
    }
}
  • ​​视图文件(hello.jsp)​​

    复制代码
    <h1>${message}</h1>

四、常用功能与注解

1. 请求映射与参数绑定
注解 用途 示例
@RequestMapping 映射 URL 到方法 @RequestMapping("/user")
@PathVariable 绑定 URL 路径变量 @PathVariable("id") int id
@RequestParam 绑定请求参数 @RequestParam("name") String
@RequestBody 绑定 JSON/XML 请求体 @RequestBody User user
2. 数据验证
  • ​​JSR-303 验证​​

    复制代码
    public class User {
        @NotBlank
        private String name;
        // getters/setters
    }
    
    @PostMapping("/user")
    public String addUser(@Valid User user, BindingResult result) {
        if (result.hasErrors()) {
            return "error";
        }
        return "success";
    }
3. 异常处理
  • ​​局部异常处理​​

    复制代码
    @ExceptionHandler(Exception.class)
    public ModelAndView handleException(Exception ex) {
        ModelAndView mav = new ModelAndView("error");
        mav.addObject("message", ex.getMessage());
        return mav;
    }
  • ​​全局异常处理​​

    复制代码
    @ControllerAdvice
    public class GlobalExceptionHandler {
        @ExceptionHandler(NullPointerException.class)
        public ModelAndView handleNullPointer() {
            // 处理逻辑
        }
    }

五、高级特性

1. RESTful 支持
复制代码
@RestController
@RequestMapping("/api/users")
public class UserController {
    @GetMapping("/{id}")
    public User getUser(@PathVariable Long id) {
        // 查询用户
    }

    @PostMapping
    public ResponseEntity<String> createUser(@RequestBody User user) {
        // 创建用户
        return ResponseEntity.ok("User created");
    }
}
2. 文件上传
  • ​​配置解析器​​

    复制代码
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="10485760"/> <!-- 10MB -->
    </bean>
  • ​​控制器方法​​

    复制代码
    @PostMapping("/upload")
    public String uploadFile(@RequestParam("file") MultipartFile file) {
        // 处理文件
    }

六、源码与扩展

  • ​​DispatcherServlet 源码​​

    核心方法 doDispatch()实现了请求分发逻辑,包括获取 Handler、执行拦截器链、调用适配器等。

  • ​​扩展点​​

    • ​​拦截器(Interceptor)​ ​:实现 HandlerInterceptor,在请求处理前后添加逻辑。

    • ​​视图解析器​​:自定义视图解析规则(如 JSON、PDF)。

    • ​​静态资源处理​ ​:通过 <mvc:resources>配置静态资源路径。


总结

SpringMVC 通过 ​​DispatcherServlet​​ 统筹请求处理流程,结合注解和配置实现灵活的 Web 开发。掌握其核心组件(如 Controller、ModelAndView)和扩展机制(拦截器、异常处理)是进阶的关键。建议结合实际项目练习,并深入阅读源码以理解底层实现。

相关推荐
萧瑟余晖3 天前
Spring MVC文件上传SSE与WebSocket详解
websocket·spring·mvc
乌暮4 天前
# Spring 入门与 Spring MVC 实战指南:从零理解 IoC 到 RESTful 图书管理
java·开发语言·后端·学习·spring·mvc·restful
萧瑟余晖5 天前
Spring MVC拦截器异常处理与跨域详解
java·spring·mvc
弈栈录12 天前
Spring MVC 请求处理流程与核心源码解析
后端·架构·mvc
换元不配限15 天前
Android 架构演进实战:MVC → MVP → MVVM → MVI
android·架构·mvc·mvvm·mvp·mvi
云絮.16 天前
Spring MVC(二)
服务器·spring·mvc
only-lucky16 天前
QML深入学习七(MVC模块)
学习·mvc
1570925113417 天前
Android 架构模式详解:从 MVC、MVP 到 MVVM
android·架构·mvc
曹牧17 天前
Spring MVC:@RequestMapping
java·spring·mvc
wang_shu_mo_ran25 天前
Spring MVC 常用注解和用法(二)——url,cookie,session
java·mvc