Spring MVC 框架:构建高效 Java Web 应用的利器

devtools/2025/2/4 0:57:46/

Java学习资料

Java学习资料

Java学习资料


一、引言

在 Java Web 开发领域,Spring MVC 框架是一颗耀眼的明星。它作为 Spring 框架家族的重要成员,为开发者提供了一套强大而灵活的解决方案,用于构建 Web 应用程序。Spring MVC 遵循模型 - 视图 - 控制器(MVC)设计模式,将业务逻辑、数据展示和用户交互进行了有效的分离,使得代码结构清晰、易于维护和扩展。

二、MVC 设计模式概述

2.1 基本概念

MVC 设计模式将一个应用程序分为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。

模型(Model):负责处理应用程序的数据和业务逻辑。它可以是一个 JavaBean,也可以是与数据库交互的 DAO(数据访问对象)或服务层组件。模型封装了应用程序的状态和行为,为视图提供数据支持。

视图(View):负责将模型中的数据呈现给用户。常见的视图技术包括 JSP、Thymeleaf、FreeMarker 等。视图只关注数据的展示,不涉及业务逻辑的处理。

控制器(Controller):负责接收用户的请求,调用相应的模型进行业务处理,并将处理结果传递给合适的视图进行展示。控制器起到了协调模型和视图的作用,是整个应用程序的核心调度者。

2.2 优势

MVC 设计模式的主要优势在于提高了代码的可维护性、可测试性和可扩展性。通过将不同的功能模块分离,各个部分可以独立开发、测试和维护,降低了代码之间的耦合度。

三、Spring MVC 框架架构

3.1 核心组件

Spring MVC 框架的核心组件包括:

DispatcherServlet:作为前端控制器,是整个 Spring MVC 框架的核心。它负责接收所有的 HTTP 请求,并将请求分发给合适的处理器进行处理。

HandlerMapping:根据请求的 URL 路径,将请求映射到相应的处理器(Controller)。Spring MVC 提供了多种 HandlerMapping 实现,如 BeanNameUrlHandlerMapping、RequestMappingHandlerMapping 等。

Controller:负责处理具体的业务逻辑。它接收请求参数,调用模型进行业务处理,并返回处理结果。在 Spring MVC 中,Controller 通常是一个带有 @Controller 注解的 Java 类。

ModelAndView:用于封装处理结果和视图信息。它包含了模型数据和要使用的视图名称,DispatcherServlet 根据这些信息选择合适的视图进行渲染。

ViewResolver:根据视图名称解析出具体的视图对象。Spring MVC 支持多种视图技术,如 JSP、Thymeleaf 等,ViewResolver 负责将视图名称转换为对应的视图实现。

3.2 请求处理流程

客户端发送 HTTP 请求到 DispatcherServlet。

DispatcherServlet 接收到请求后,通过 HandlerMapping 查找合适的处理器(Controller)。

DispatcherServlet 将请求发送给找到的处理器进行处理。

处理器处理请求,调用模型进行业务逻辑处理,并返回一个 ModelAndView 对象。

DispatcherServlet 接收到 ModelAndView 对象后,通过 ViewResolver 解析出具体的视图对象。

视图对象根据 ModelAndView 中的模型数据进行渲染,并将渲染结果返回给客户端。

四、Spring MVC 框架的配置与使用

4.1 配置 DispatcherServlet

在 web.xml 文件中配置 DispatcherServlet:

<servlet><servlet-name>dispatcherServlet</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>dispatcherServlet</servlet-name><url-pattern>/</url-pattern>
</servlet-mapping>

4.2 配置 Spring MVC 上下文

spring-mvc.xml 文件中进行 Spring MVC 的配置,包括视图解析器、处理器映射器等:

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!-- 开启注解驱动 --><mvc:annotation-driven/><!-- 扫描控制器所在的包 --><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>
</beans>

4.3 创建控制器

创建一个带有 @Controller 注解的控制器类:

java">import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;@Controller
public class HelloController {@GetMapping("/hello")public String sayHello(Model model) {model.addAttribute("message", "Hello, Spring MVC!");return "hello";}
}

4.4 创建视图

在 /WEB-INF/views 目录下创建 hello.jsp 文件:

java"><!DOCTYPE html>
<html>
<head><title>Hello Spring MVC</title>
</head>
<body><h1>${message}</h1>
</body>
</html>

五、Spring MVC 的常用注解

5.1 @Controller

用于标记一个类为控制器类,Spring MVC 会自动扫描带有该注解的类,并将其注册为控制器。

5.2 @RequestMapping

用于将请求映射到控制器的方法上。可以指定请求的 URL 路径、请求方法(如 GET、POST)等。例如:

java">@Controller
@RequestMapping("/user")
public class UserController {@RequestMapping(value = "/list", method = RequestMethod.GET)public String listUsers(Model model) {// 处理用户列表请求return "userList";}
}

5.3 @RequestParam

用于获取请求参数。例如:

java">@GetMapping("/search")
public String search(@RequestParam("keyword") String keyword, Model model) {// 根据关键字进行搜索return "searchResult";
}

5.4 @ModelAttribute

用于将请求参数绑定到模型对象上,或者将模型对象添加到模型中。例如:

java">@PostMapping("/save")
public String saveUser(@ModelAttribute("user") User user) {// 保存用户信息return "redirect:/user/list";
}

六、Spring MVC 的数据绑定与验证

6.1 数据绑定

Spring MVC 提供了强大的数据绑定功能,能够将请求参数自动绑定到 Java 对象上。例如,当表单提交的数据与 JavaBean 的属性名相匹配时,Spring MVC 会自动将表单数据绑定到 JavaBean 对象中。

6.2 数据验证

Spring MVC 支持使用 JSR - 303 验证规范进行数据验证。通过在 JavaBean 的属性上添加验证注解(如 @NotNull、@Size 等),可以对输入数据进行验证。例如:

java">import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;public class User {@NotNull(message = "用户名不能为空")@Size(min = 3, max = 20, message = "用户名长度必须在 3 到 20 之间")private String username;// 其他属性和方法
}

在控制器方法中,可以使用 BindingResult 对象来获取验证结果:

java">import org.springframework.validation.BindingResult;
import javax.validation.Valid;@PostMapping("/register")
public String register(@Valid @ModelAttribute("user") User user, BindingResult bindingResult) {if (bindingResult.hasErrors()) {return "register";}// 保存用户信息return "redirect:/login";
}

七、总结

Spring MVC 框架以其遵循 MVC 设计模式的特性,为 Java Web 开发带来了高效、灵活和可维护的开发体验。通过合理配置核心组件、运用常用注解、实现数据绑定与验证等功能,开发者能够快速搭建出高质量的 Web 应用程序。无论是小型项目还是大型企业级应用,Spring MVC 都能展现出其强大的优势,是 Java Web 开发者不可或缺的工具之一。随着技术的不断发展,Spring MVC 也在持续进化,与其他优秀的技术和框架相结合,为开发者提供更完善的解决方案。


http://www.ppmy.cn/devtools/155864.html

相关文章

12 向量结构模块(vector.rs)

一vector.rs源码 // Copyright 2013 The Servo Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution. // // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or // http://www.apache.org/licenses/LICENSE…

如何用微信小程序写春联

​ 生活没有模板,只需心灯一盏。 如果笑能让你释然,那就开怀一笑;如果哭能让你减压,那就让泪水流下来。如果沉默是金,那就不用解释;如果放下能更好地前行,就别再扛着。 一、引入 Vant UI 1、通过 npm 安装 npm i @vant/weapp -S --production​​ 2、修改 app.json …

Hive:日志,hql运行方式,Array,行列转换

日志 可以在终端通过 find / | grep hive-log4j2 命令查找Hive的日志配置文件 这些文件用于配置Hive的日志系统。它们不属于系统日志也不属于Job日志&#xff0c;而是用于配置Hive如何记录系统日志和Job日志, 可以通过hive-log4j2 查找日志的位置 HQL的3种运行方式 第1种就是l…

强化学习数学原理(四)——蒙特卡洛方法

一、蒙特卡洛方法 蒙特卡洛方法是一种无模型&#xff08;Model-Free&#xff09;的强化学习算法&#xff0c;它通过直接与环境交互采样轨迹&#xff08;episodes&#xff09;来估计状态或动作的价值函数&#xff08;Value Function&#xff09;&#xff0c;而不需要依赖环境动态…

2025年2月2日(tcp_server_socket.listen(128))

tcp_server_socket.listen(128) 是 Python 中用于设置 TCP 服务器套接字&#xff08;socket&#xff09;在监听传入连接时的最大连接数。 具体来说&#xff1a; tcp_server_socket 是一个通过 socket.socket() 创建的服务器套接字。listen() 方法用于将套接字设置为“监听模式…

wax到底是什么意思

在很久很久以前&#xff0c;人类还没有诞生文字之前&#xff0c;人类就产生了语言&#xff1b;在诞生文字之前&#xff0c;人类就已经使用了语言很久很久。 没有文字之前&#xff0c;人们的语言其实是相对比较简单的&#xff0c;因为人类的生产和生活水平非常低下&#xff0c;…

LM Studio windows系统断网教程,通过防火墙禁止联网

使用LM Studio 进行大模型的使用&#xff0c;有时候需要断网&#xff0c;下面是断网教程 1、找到文件位置 右键LM Studio &#xff0c;查看起始位置 2、在搜索里搜防火墙&#xff0c; 打开高级安全Windows Defender防火墙 打开之后如图所示 3、入站规则处理 3.1、LM S…

doris:聚合模型的导入更新

这篇文档主要介绍 Doris 聚合模型上基于导入的更新。 整行更新​ 使用 Doris 支持的 Stream Load&#xff0c;Broker Load&#xff0c;Routine Load&#xff0c;Insert Into 等导入方式&#xff0c;往聚合模型&#xff08;Agg 模型&#xff09;中进行数据导入时&#xff0c;都…