当前位置: 首页 > news >正文

深入剖析Spring MVC

一、Spring MVC 概述

1. 什么是 Spring MVC?

Spring MVC 是基于 Spring 框架的 Web 框架,它实现了 MVC 设计模式,将应用程序分为三个核心部分:

  • Model:封装应用程序的数据和业务逻辑。

  • View:负责渲染数据(通常是 HTML 页面)。

  • Controller:处理用户请求并协调 Model 和 View。

2. Spring MVC 的优势

  • 松耦合:通过清晰的职责分离,降低代码的耦合度。

  • 灵活性:支持多种视图技术(如 JSP、Thymeleaf、FreeMarker 等)。

  • 强大的数据绑定:自动将请求参数绑定到 Java 对象。

  • 易于测试:Controller 是 POJO(Plain Old Java Object),易于单元测试。

  • 与 Spring 生态无缝集成:可以轻松整合 Spring 的其他模块(如 Spring Security、Spring Data 等)。


二、Spring MVC 的核心组件

1. DispatcherServlet

DispatcherServlet 是 Spring MVC 的核心,负责接收所有的 HTTP 请求并将其分发给相应的 Controller。

2. HandlerMapping

HandlerMapping 负责将请求映射到对应的 Controller。

3. Controller

Controller 是处理用户请求的核心组件,通常使用 @Controller 注解标记。

4. ModelAndView

ModelAndView 是 Controller 返回的结果,包含模型数据(Model)和视图名称(View)。

5. ViewResolver

ViewResolver 负责根据视图名称解析实际的视图(如 JSP 页面)。

6. HandlerInterceptor

HandlerInterceptor 用于在请求处理前后执行额外的逻辑(如权限检查、日志记录等)。


三、Spring MVC 的工作流程

关键阶段解析

        1. 请求分发

     DispatcherServlet 接收请求后,委托 HandlerMapping 查找匹配的控制器。

        2. 参数处理

      HandlerAdapter 负责方法参数绑定(支持 @RequestParam@RequestBody 等注解)。

        3. 拦截器链

     HandlerInterceptor 在预处理、后处理、完成回掉三个阶段插入逻辑。

        4. 视图渲染

     ViewResolver 根据逻辑视图名定位物理视图,View 对象将模型数据转换为响应内容。

四、Spring MVC 的配置

1. 基于 XML 的配置

1.1 在 web.xml 中配置 DispatcherServlet

<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-config.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>

 1.2  在 spring-mvc-config.xml 中配置 Spring MVC

<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>

2. 基于 JavaConfig 的配置

2.1 在 web.xml 中配置 DispatcherServlet

=================== 配置与 1.1 相同 ==================

2.2 使用 @Configuration 和 @EnableWebMvc 注解配置 Spring MVC

@Configuration
@EnableWebMvc
@ComponentScan("com.example.controller")
public class WebConfig implements WebMvcConfigurer {

    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
    }
}

五、Spring MVC 的核心注解

1. @Controller

        标记一个类为 Controller。

2. @RequestMapping

        将请求 URL 映射到 Controller 的方法。

3. @RequestParam

        将请求参数绑定到方法参数。

4. @ModelAttribute

        将请求参数绑定到模型对象。

5. @ResponseBody

        将方法返回值直接写入 HTTP 响应体。

6. @PathVariable

        将 URL 中的变量绑定到方法参数。

六、Spring MVC 的高级特性

1. 文件上传

使用 MultipartFile 处理文件上传:

@RequestMapping(value = "/upload", method = RequestMethod.POST)
public String handleFileUpload(@RequestParam("file") MultipartFile file) {
    // 处理文件
    return "uploadSuccess";
}

2. 异常处理

使用 @ExceptionHandler 处理异常:

@ExceptionHandler(UserNotFoundException.class)
public String handleUserNotFound() {
    return "error/userNotFound";
}

相关文章:

  • CMake技术细节:解决未定义,提供参数
  • 从零到一实现微信小程序计划时钟:完整教程
  • 【ClickHouse 特性及应用场景】
  • ubuntu 执行 sudo apt-get update 报错
  • redis7 for windows的安装教程
  • vue 接口传formdata
  • 基于Java+Swing+Mysql实现旅游管理信息系统
  • Promise异步编程
  • 【阮一峰】6.对象
  • 【阮一峰】8.类
  • 如何写出优秀的测试用例?
  • QT基础七、用纯代码编写界面
  • 使用Keras构建图像分类模型的入门指南
  • ssm019基于ssm社区文化宣传网站+jsp(源码+包运行+LW+开题报告+任务书+技术指导)
  • 第一期——LeetCode 26删除有序数组中的重复项
  • Vulnhub中的Lupinone
  • Flutter:K线图
  • 鸿蒙(HarmonyOS)开发学习路线指南:从零到实战
  • Arduino IDE编程ESP32-C3的Flash选项
  • 轻松搭建本地大语言模型(一)Ollama安装与使用
  • 上海高院与上海妇联签协议,建立反家暴常态化联动协作机制
  • 国际奥委会举办研讨会,聚焦如何杜绝操纵比赛
  • 体坛联播|博洛尼亚时隔51年再夺意杯,皇马逆转马洛卡
  • 男子不满和睦家医院手术效果还遇到了“冒牌医生”?院方回应
  • 京东一季度净利增长五成,营收增速创近三年新高,称外卖业务取得显著进展
  • 独行侠以1.8%概率获得状元签,NBA原来真的有剧本?