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

相关推荐
一叶星殇1 天前
版本即契约:.NET 6 WebAPI 多版本治理与 Swagger 文档分治实践
mvc·.net
8Qi82 天前
DDD架构演进
java·分布式·mvc·ddd
yh弓长2 天前
Spring MVC 的请求链路
java·spring·mvc
步行cgn3 天前
Spring MVC 执行流程详解:一次请求的完整旅程
java·spring·mvc
步行cgn3 天前
Spring MVC 九大核心角色详解:请求处理链路中的每一个关键组件
java·spring·mvc
步行cgn4 天前
Spring MVC 拦截器 Interceptor 详解:从执行流程到实战应用
java·spring·mvc
CoderYanger4 天前
Java EE 进阶:5. Spring IoC&DI(第三弹):Spring DI
java·开发语言·spring boot·spring·面试·java-ee·mvc
步行cgn5 天前
FormHttpMessageConverter 详解:Spring MVC 中表单数据的读写转换器
java·spring·mvc
步行cgn5 天前
Spring MVC + Thymeleaf 模板解析失败:从 500 错误到页面正常显示
java·spring·mvc
java_nnnn6 天前
spring web mvc图书管理小案例
前端·spring·mvc