目录

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

文章目录


一、Java Web的发展历程

1.Model I与Model II开发模式

(1) Model I开发模式

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

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

(2)Model II开发模式

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

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

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

2.MVC设计模式

Spring MVC本质

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

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

MVC工作流程

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

二、Spring MVC快速入门实战

1.环境搭建步骤

(1)创建Maven Web工程

关键依赖

c 复制代码
<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

核心配置项

c 复制代码
<!-- 字符编码过滤器 -->
<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)

c 复制代码
<!-- 组件扫描 -->
<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

c 复制代码
@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模板)

c 复制代码
<!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模式跟踪请求处理流程,深入体会各组件协作机制。

本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
cop_g1 分钟前
Java安全-类的动态加载
java·代码审计·java安全
何似在人间5753 分钟前
怎么简单设计一个文件上传系统?
java·文件
এ旧栎27 分钟前
蓝桥与力扣刷题(蓝桥 蓝桥骑士)
java·数据结构·算法·leetcode·蓝桥杯·二分·学习和成长
程序猿DD_1 小时前
如何用Spring AI构建MCP Client-Server架构
java·人工智能·后端·spring·架构
进阶的猿猴1 小时前
微信小程序登录和获取手机号
java·微信小程序·小程序
牛马baby1 小时前
Java高频面试之集合-18
java·开发语言·面试
cijiancao2 小时前
23种设计模式中的中介者模式
java·设计模式·中介者模式
mango02192 小时前
Spring AOP 应用
java
ForteScarlet2 小时前
Kotlin 中那些无法复现的 Java 写法
android·java·开发语言·kotlin·jetbrains
数据小小爬虫2 小时前
Java爬虫如何解析返回的JSON数据?
java·爬虫·json