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)和扩展机制(拦截器、异常处理)是进阶的关键。建议结合实际项目练习,并深入阅读源码以理解底层实现。

相关推荐
William_cl2 天前
一、前置基础(MVC学习前提)_核心特性_【C# 泛型入门】为什么说 List<T>是程序员的 “万能收纳盒“?避坑指南在此
学习·c#·mvc
程序员小凯3 天前
Spring MVC 分布式事务与数据一致性教程
分布式·spring·mvc
艾菜籽3 天前
SpringMVC练习:加法计算器与登录
java·spring boot·spring·mvc
程序员小凯3 天前
Spring MVC 多租户架构与数据隔离教程
spring·架构·mvc
艾菜籽4 天前
Spring Web MVC入门补充1
java·后端·spring·mvc
艾菜籽4 天前
Spring MVC入门补充2
java·spring·mvc
风兮w4 天前
MVC、MVP和MVVM的区别
mvc
蓝天智能5 天前
QT MVC中Model的特点及使用注意事项
qt·mvc
低音钢琴5 天前
【SpringBoot从初学者到专家的成长15】MVC、Spring MVC与Spring Boot:理解其差异与联系
spring boot·spring·mvc
.NET修仙日记5 天前
2025年ASP.NETMVC面试题库全解析
面试·职场和发展·c#·asp.net·mvc·面试题·asp.net mvc