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

相关推荐
神仙别闹15 小时前
基于ASP.NET+SQL Server简单的 MVC 电商网站
log4j·asp.net·mvc
TanYYF17 小时前
Spring MVC 请求执行流程详解
java·spring·mvc
Cyan_RA99 天前
SpringMVC @RequestMapping的使用演示和细节 详解
java·开发语言·后端·spring·mvc·ssm·springmvc
周杰伦fans12 天前
.net core webapi/mvc阿里云服务器部署 - 错误解决
阿里云·mvc·.netcore
BFT白芙堂12 天前
GRASP 实验室研究 论文解读 | 机器人交互:基于神经网络引导变分推理的快速失配估计
人工智能·神经网络·机器学习·mvc·人机交互·科研教育机器人·具身智能平台
William_cl13 天前
MVC 中 AJAX 与前后端交互深度实战(含独家避坑与场景化方案)
ajax·mvc·交互
Cyan_RA914 天前
SpringMVC 执行流程分析 详解(图解SpringMVC执行流程)
java·人工智能·后端·spring·mvc·ssm·springmvc
hello 早上好14 天前
Spring MVC 类型转换与参数绑定:从架构到实战
spring·架构·mvc
sanggou14 天前
License 集成 Spring Gateway:解决 WebFlux 非阻塞与 Spring MVC Servlet 阻塞兼容问题
spring·gateway·mvc