Spring MVC系统学习(二)——Spring MVC的核心类和注解

news/2024/11/18 1:46:14/
webkit-tap-highlight-color: rgba(0, 0, 0, 0);">

Spring MVC(Model-View-Controller)是Spring框架的一个模块,用于构建基于Web的应用程序。它使用模型、视图和控制器分离的设计模式,使得Web开发更加模块化和灵活。在学习Spring MVC时,有几个核心类和注解是非常关键的,尤其是DispatcherServlet@Controller@RequestMapping等。这些知识点是构建Spring MVC应用的基础。接下来我将逐步讲解这些概念,确保详细且易于理解。

1. 核心类 - DispatcherServlet

DispatcherServlet是Spring MVC的核心类,负责将请求转发到适当的处理器(Controller)。它的职责是拦截所有传入的HTTP请求并分发到相应的控制器类进行处理。DispatcherServlet是一个前端控制器(Front Controller),负责协调整个请求的处理过程。其作用主要包括:

  • 接收并拦截用户请求。
  • 解析请求的URL,找到相应的处理器(Controller)。
  • 调用处理器进行业务逻辑处理。
  • 根据处理结果决定跳转到哪个视图(View)。
  • 将处理结果和视图返回给用户。
配置DispatcherServlet

在Spring Boot项目中,DispatcherServlet自动由Spring Boot配置,无需手动配置。在非Spring Boot项目中,需要在web.xml中手动配置:

<servlet><servlet-name>dispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup>
</servlet><servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>/</url-pattern>
</servlet-mapping>

DispatcherServlet的配置会拦截所有以/开头的URL请求,并将它们转发到相关控制器处理。

2. 注解 - @Controller

@Controller是Spring MVC的一个关键注解,用于标记控制器类。控制器类负责处理HTTP请求,执行业务逻辑,并返回相应的视图(或响应数据)。

示例:
java">@Controller
public class HomeController {@RequestMapping("/home")public String home() {return "home"; // 返回视图名称 "home"}
}

在这个示例中,HomeController@Controller注解标记为一个控制器类,并且处理来自/home路径的请求。方法home()返回一个字符串"home",表示要显示的视图名。

3. 注解 - @RequestMapping

@RequestMapping注解用于定义HTTP请求与处理方法之间的映射关系。可以将其用在类或方法上,来定义路径、HTTP请求方法、请求参数等的映射。

3.1 @RequestMapping的使用

@RequestMapping注解可以应用在控制器的类级别和方法级别:

  • 类级别:用于为整个控制器类定义基础路径。
  • 方法级别:用于定义处理某个特定URL的请求。
示例:
java">@Controller
@RequestMapping("/api")
public class ApiController {@RequestMapping("/users")public String getUsers() {return "users"; // 处理 /api/users 请求}
}

在这个例子中,类级别的@RequestMapping("/api")表示该控制器处理所有以/api开头的请求。getUsers()方法处理的是/api/users请求。

3.2 @RequestMapping的属性

@RequestMapping注解有多个属性,可以更精确地控制请求映射:

  • value:定义URL路径,可以是单个路径或者路径数组。value属性是默认属性,可以省略名称。
  • method:指定HTTP请求方法(如GETPOSTPUTDELETE等)。
  • params:限制请求必须包含的参数,或者参数的特定值。
  • headers:限定请求头信息。
  • consumes:指定能够处理的请求的Content-Type
  • produces:指定方法返回的响应内容类型。
示例:
java">@Controller
@RequestMapping("/products")
public class ProductController {// 处理 GET 请求@RequestMapping(value = "/list", method = RequestMethod.GET)public String listProducts() {return "productList"; // 返回视图名}// 处理 POST 请求@RequestMapping(value = "/add", method = RequestMethod.POST)public String addProduct() {return "addProduct"; // 返回视图名}// 处理包含特定参数的请求@RequestMapping(value = "/filter", params = "category")public String filterProducts() {return "filteredProducts";}
}

4. 请求映射方式

Spring MVC提供了多种请求映射的方式,使开发者能够灵活定义请求和控制器方法之间的映射关系。常见的映射方式包括:

  • 精确匹配URL:直接指定路径,如@RequestMapping("/home")
  • 路径参数:通过路径中的占位符接收参数,如@RequestMapping("/user/{id}")
  • 查询参数:通过params属性限制某个请求参数的存在,如@RequestMapping(params = "type=special")
  • 请求方法:限制某个特定HTTP方法(如GETPOST)的请求。
示例 - 路径参数:
java">@Controller
@RequestMapping("/user")
public class UserController {@RequestMapping("/{id}")public String getUserById(@PathVariable("id") int userId, Model model) {model.addAttribute("userId", userId);return "userDetail"; // 显示用户详情}
}

在这个例子中,@RequestMapping("/{id}")定义了一个占位符{id},它会将路径中的id参数映射到方法的参数userId上。

5. 小结

Spring MVC提供了灵活的Web开发功能,核心类DispatcherServlet负责将请求路由到控制器,而控制器通过@Controller@RequestMapping等注解与前端请求建立映射。通过这些注解,我们可以定义路径、请求方式、请求参数等,灵活地处理不同的请求场景。

  • @Controller标记类为控制器,处理前端请求。
  • @RequestMapping定义URL与控制器方法的映射关系,可以限制HTTP方法、请求参数等。
  • DispatcherServlet是整个Spring MVC的核心,用来将请求分发到对应的控制器。

http://www.ppmy.cn/news/1531889.html

相关文章

04_OpenCV图片缩放

import cv2 import matplotlib.pyplot as plt # Python 的 2D绘图库# 读入原图片 img cv2.imread(libarary.JPG) # 打印出图片尺寸 print(img.shape) # 将图片高和宽分别赋值给x&#xff0c;y x, y img.shape[0:2]# 显示原图 #cv.imshow(OriginalPicture, img)# 缩放到原来的…

信息技术的变革:数字时代的机遇与挑战

信息技术的变革&#xff1a;数字时代的机遇与挑战 目录 引言信息技术的关键趋势 云计算的无处不在大数据与数据分析人工智能的快速崛起物联网的广泛应用 信息技术对企业的深远影响 增强决策能力创新商业模式全球化与跨界合作 信息技术的挑战 数据隐私与安全技术更新的持续压力…

全景可视化特点+可视化功能实现

全景可视化介绍 全景可视化是一种利用现代计算机技术、图像处理技术和虚拟现实技术&#xff0c;将现实世界中的场景以360度全景的方式呈现在用户面前的技术。它不仅能够提供水平方向360度的全景视野&#xff0c;还能通过垂直方向的视角变化&#xff0c;实现上下视角的调节&…

【Power Compiler手册】13.UPF多电压设计实现(5)

细化供电集 要重新定义供电集的功能,请使用`create_supply_set`命令的`-update`选项。必须同时使用`-update`和`-function`选项,以将功能名称与供电网络或端口关联起来。 以下示例展示了如何使用`-update`选项将供电网络与供电集的功能关联: create_power_domain PD_TOP c…

Maven(1)什么是Maven?

Maven是一个项目管理和构建自动化工具&#xff0c;它主要用于Java项目的构建、依赖管理和项目信息管理。Maven的核心理念是提供一个统一的构建系统、项目信息管理以及最佳实践指南&#xff0c;帮助开发者更有效地管理Java项目的构建、报告和文档。Maven通过使用XML配置文件&…

Manz S11-0032GWB-Back Glass Cleaner (Left)

Manz S11-0032GWB-Back Glass Cleaner (Left)

中国科学技术大学《2020年+2021年845自动控制原理真题》 (完整版)

本文内容&#xff0c;全部选自自动化考研联盟的&#xff1a;《25届中国科学技术大学845自控考研资料》的真题篇。后续会持续更新更多学校&#xff0c;更多年份的真题&#xff0c;记得关注哦~ 目录 2020年真题 2021年真题 Part1&#xff1a;2020年2021年完整版真题 2020年真…

0基础跟德姆(dom)一起学AI 数据处理和统计分析08-日期类型处理,Matplotlib介绍

* 日期类型处理 * 获取日期中不同部分 * 日期运算 * 日期索引 * 生成日期时间序列 * 数据可视化介绍 * Matplotlib API介绍 * 直方图 * 散点图 --- 1.Pandas日期时间类型简介 * 概述 * 和其它语言类似, Python内置了datetime对象&#xff0c;可以在datetime库中…