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

Spring MVC配置详解:从历史到实战

文章目录

  • 一、Java Web的发展历程
    • 1.Model I与Model II开发模式
      • (1) Model I开发模式
      • (2)Model II开发模式
    • 2.MVC设计模式
      • Spring MVC本质
      • MVC工作流程
  • 二、Spring MVC快速入门实战
    • 1.环境搭建步骤
      • (1)创建Maven Web工程
      • (2)配置web.xml
      • (3) Spring MVC配置文件(springmvc.xml)
      • (4) 编写Controller
      • (5) 创建视图页面
  • 三、Spring MVC核心原理剖析
    • 1.请求处理全流程
      • (1)DispatcherServlet接收请求
      • (2)HandlerAdapter执行方法
      • (3)处理返回结果
      • (4)视图渲染
    • 2.核心组件详解
      • (1)Spring MVC 核心组件功能表
      • (2)组件协作示意图
    • 3.架构优势分析
  • 总结


一、Java Web的发展历程

1.Model I与Model II开发模式

(1) Model I开发模式

核心架构:JSP + JavaBean
流程特点

  • JSP页面直接处理用户请求、执行业务逻辑(通过JavaBean)并渲染页面
  • 优点:快速开发小型项目
  • 致命缺陷:视图展示与业务逻辑高度耦合,JSP文件臃肿,维护困难
浏览器请求 → JSP接收请求 → 调用JavaBean → JSP渲染响应

(2)Model II开发模式

核心架构:JSP + Servlet + JavaBean
分层思想

  • JSP:专注视图渲染
  • Servlet:负责流程控制(Controller前身)
  • JavaBean:处理业务逻辑(Service/DAO层)
浏览器请求 → Servlet接收 → 调用JavaBean → 转发结果至JSP → 渲染响应

划时代意义:首次实现MVC分层,支持中大型项目开发(2000年代主流架构)

2.MVC设计模式

Spring MVC本质

Spring MVC本质:基于Servlet的增强框架,核心思想遵循MVC规范

组件核心职责实现示例
Model1. 处理业务逻辑
2. 封装数据对象
- @Service标注的业务类
- 实体类(如User.java
- DAO层实现类
View1. 数据可视化展示
2. 用户交互界面
- JSP页面(*.jsp
- Thymeleaf模板(*.html
- JSON响应(@ResponseBody
Controller1. 接收请求
2. 调用业务层
3. 返回响应
- @Controller注解类
- @RequestMapping方法
(如/user/login映射)

MVC工作流程

  1. 用户通过View发起请求
  2. Controller接收并解析请求参数
  3. 调用Model层处理业务逻辑
  4. 返回处理结果至View渲染

二、Spring MVC快速入门实战

1.环境搭建步骤

(1)创建Maven Web工程

关键依赖

<dependencies>
    <!-- Spring MVC核心 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.18</version>
    </dependency>
    
    <!-- 视图模板引擎 -->
    <dependency>
        <groupId>org.thymeleaf</groupId>
        <artifactId>thymeleaf-spring5</artifactId>
        <version>3.0.14.RELEASE</version>
    </dependency>
    
    <!-- Servlet API -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

(2)配置web.xml

核心配置项

<!-- 字符编码过滤器 -->
<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>

<!-- 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>classpath:springmvc.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>

(3) Spring MVC配置文件(springmvc.xml)

<!-- 组件扫描 -->
<context:component-scan base-package="com.example.controller"/>

<!-- Thymeleaf视图解析 -->
<bean id="templateResolver" class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
    <property name="prefix" value="/WEB-INF/views/"/>
    <property name="suffix" value=".html"/>
    <property name="templateMode" value="HTML5"/>
</bean>

<bean id="templateEngine" class="org.thymeleaf.spring5.SpringTemplateEngine">
    <property name="templateResolver" ref="templateResolver"/>
</bean>

<bean class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
    <property name="templateEngine" ref="templateEngine"/>
    <property name="characterEncoding" value="UTF-8"/>
</bean>

<!-- 开启注解驱动 -->
<mvc:annotation-driven/>

(4) 编写Controller

@Controller
public class HelloController {

    @RequestMapping("/hello")
    public String sayHello(Model model) {
        model.addAttribute("message", "Welcome to Spring MVC!");
        return "result"; // 对应/WEB-INF/views/result.html
    }
}

(5) 创建视图页面

result.html(Thymeleaf模板)

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Result Page</title>
</head>
<body>
    <h1 th:text="${message}">Default Message</h1>
</body>
</html>

三、Spring MVC核心原理剖析

1.请求处理全流程

(1)DispatcherServlet接收请求

  • 作为统一入口拦截所有请求
  • 通过HandlerMapping查找匹配的Controller方法

(2)HandlerAdapter执行方法

  • 参数绑定:自动将请求参数映射到方法参数
  • 执行@RequestMapping标注的方法

(3)处理返回结果

  • 返回String:通过ViewResolver解析为具体视图
  • 返回@ResponseBody:直接序列化为JSON

(4)视图渲染

  • 模板引擎处理动态内容
  • 生成最终HTML响应

2.核心组件详解

(1)Spring MVC 核心组件功能表

组件名称职责说明实现示例
DispatcherServlet前端控制器,统一处理所有HTTP请求和响应,协调各组件工作流程web.xml中配置的核心Servlet,默认名称dispatcher,处理所有/请求
HandlerMapping建立请求URL与Controller方法的映射关系RequestMappingHandlerMapping(基于@RequestMapping注解的映射策略)
HandlerAdapter实际执行Controller方法,处理参数绑定、数据转换、验证等核心逻辑RequestMappingHandlerAdapter(支持基于注解的处理器方法)
ViewResolver将Controller返回的逻辑视图名解析为具体的视图实现(HTML/JSON等)InternalResourceViewResolver(JSP)、ThymeleafViewResolver(模板引擎)
HandlerExceptionResolver统一处理Controller层抛出的异常,返回定制化错误响应ExceptionHandlerExceptionResolver(配合@ExceptionHandler使用)

(2)组件协作示意图

在这里插入图片描述

3.架构优势分析

  1. 松耦合设计:各组件通过接口定义,易于扩展
  2. 注解驱动开发:@Controller、@RequestMapping简化配置
  3. 强大的数据绑定:自动处理表单数据、JSON转换
  4. 视图技术无关性:支持JSP、Thymeleaf、FreeMarker等

总结

Spring MVC通过清晰的层次划分和强大的扩展能力,已成为Java Web开发的事实标准。理解其核心原理并掌握配置技巧,是构建高性能Web应用的关键。建议通过Debug模式跟踪请求处理流程,深入体会各组件协作机制。


http://www.kler.cn/a/599266.html

相关文章:

  • Node.js系列(6)--安全实践指南
  • 基于PySide6与pycatia的CATIA绘图文本批量处理工具开发实践
  • 永久禁用 firewalld: systemctl disable firewalld
  • C++类与对象的第二个简单的实战练习-3.24笔记
  • MobaXterm配置ssh端口转发autodl服务器网页页面
  • UNIX网络编程笔记:TCP、UDP、SCTP编程的区别
  • 机器视觉工程师如何看机器视觉展会,有些机器视觉兄弟参加机器视觉展会,真的是参加了?重在参与?
  • 【机器学习/大模型/八股文 面经 (一)】
  • 如何扩展 Linux 中 ext4 文件系统的大小
  • 补Java基础之重生(13)类与对象(补充版)+面向对象综合案例
  • 智算中心系统化建设与运营框架
  • Netty源码—5.Pipeline和Handler一
  • 2000-2019年各省地方财政耕地占用税数据
  • Tailwind CSS 学习笔记(四)
  • 免费试用优化指南:提升转化率的关键策略
  • STM32:关于NVIC的工作与优先级分组方式
  • std::endl为什么C++ 智能提示是函数?
  • Python----计算机视觉处理(Opencv:图像亮度变换)
  • 【HTML5】02-列表 + 表格 + 表单
  • C语言动态顺序表的实现