SpringMVC的架构有什么优势?——控制器(一)

ops/2024/12/22 13:35:54/

文章目录

    • 控制器(Controller)
      • 1. 控制器(Controller):
      • 2. 请求映射(Request Mapping):
      • 3. 参数绑定(Request Parameters Binding):
      • 4. 视图解析器(View Resolver):
      • 5. 数据绑定(Data Binding):
      • 6. 表单验证(Form Validation):
      • 7. 异常处理(Exception Handling):

在这里插入图片描述

控制器(Controller)

控制器是Spring MVC中最重要的组件之一,它处理来自客户端的请求并返回响应。控制器通常使用注解或XML配置方式将请求映射到处理方法上。 控制器(Controller)是Spring MVC中最重要的组件之一,它负责接收来自客户端的请求并执行相应的业务逻辑,并将结果返回给客户端。Spring MVC框架提供了多种方式来实现控制器,其中最常用的方式是使用注解或XML配置方式将请求映射到处理方法上。

以下是Spring MVC控制器的核心概念和相应的Java代码示例:

1. 控制器(Controller):

控制器负责接收来自客户端的请求,并调用相应的服务层方法来处理请求。在Spring MVC中,控制器通常使用@Controller注解来定义。

@Controller
public class UserController {<!-- -->@Autowiredprivate UserService userService;@RequestMapping(value = "/users/{id}", method = RequestMethod.GET)public ModelAndView getUser(@PathVariable("id") Long id) {<!-- -->User user = userService.getUserById(id);ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("user", user);modelAndView.setViewName("user");return modelAndView;}
}

在上面的示例中,@Controller注解告诉Spring这是一个控制器类。@RequestMapping注解告诉Spring将请求映射到getUser()方法上。该方法通过调用userService的getUserById()方法来获取用户信息,并将结果添加到ModelAndView对象中,然后将返回的视图名称设置为"user"。

2. 请求映射(Request Mapping):

请求映射指定将HTTP请求映射到处理程序方法的方式。在Spring MVC中,可以使用@RequestMapping注解进行请求映射。

@Controller
public class UserController {<!-- -->@RequestMapping(value = "/users/{id}", method = RequestMethod.GET)public ModelAndView getUser(@PathVariable("id") Long id) {<!-- -->// 处理GET请求}@RequestMapping(value = "/users", method = RequestMethod.POST)public String addUser(HttpServletRequest request) {<!-- -->// 处理POST请求}
}

在上面的示例中,@RequestMapping注解告诉Spring将GET请求映射到getUser()方法上,并将请求参数id作为PathVariable传递给getUser()方法。同样地,@RequestMapping注解也告诉Spring将POST请求映射到addUser()方法上,并使用HttpServletRequest对象获取请求参数。

3. 参数绑定(Request Parameters Binding):

参数绑定指定如何将HTTP请求参数绑定到控制器处理方法的参数上。在Spring MVC中,有多种方式可以进行参数绑定,包括@RequestParam、@PathVariable和@ModelAttribute等注解。

@Controller
public class UserController {<!-- -->@RequestMapping(value = "/users", method = RequestMethod.GET)public ModelAndView getUsers(@RequestParam(value = "page", defaultValue = "1") int page,@RequestParam(value = "size", defaultValue = "10") int size) {<!-- -->List&lt;User&gt; users = userService.getUsers(page, size);ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("users", users);modelAndView.setViewName("users");return modelAndView;}@RequestMapping(value = "/users/{id}", method = RequestMethod.PUT)public void updateUser(@RequestBody User user, @PathVariable("id") Long id) {<!-- -->userService.updateUser(id, user);}
}

在上面的示例中,@RequestParam注解告诉Spring将请求参数映射到getUsers()方法的page和size参数上。@RequestBody注解告诉Spring将HTTP请求正文中的数据绑定到User对象上。

4. 视图解析器(View Resolver):

视图解析器负责将逻辑视图名称解析为实际的视图实现。在Spring MVC中,可以使用InternalResourceViewResolver或其他自定义的视图解析器来解析视图。

&lt;bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"&gt;&lt;property name="prefix" value="/WEB-INF/views/"/&gt;&lt;property name="suffix" value=".jsp"/&gt;
&lt;/bean&gt;

在上面的示例中,我们配置了一个InternalResourceViewResolver作为视图解析器,并将前缀设置为"/WEB-INF/views/“,后缀设置为”.jsp"。

以上就是Spring MVC控制器的核心概念和相应Java代码示例的详细解释。

5. 数据绑定(Data Binding):

数据绑定是将表单参数绑定到Java对象属性上的过程。在Spring MVC中,可以使用@ModelAttribute注解实现数据绑定。

@Controller
public class UserController {<!-- -->@RequestMapping(value = "/users", method = RequestMethod.POST)public String addUser(@ModelAttribute("user") User user) {<!-- -->userService.addUser(user);return "redirect:/users";}
}

在上面的示例中,@ModelAttribute注解告诉Spring将表单参数映射到User对象上,并将User对象添加到Model中。在JSP视图中,我们可以使用el表达式访问User对象的属性值。

6. 表单验证(Form Validation):

表单验证是确保表单数据符合预期格式并能够通过验证规则的过程。在Spring MVC中,我们可以使用Spring的Validator接口来实现表单验证。

@Controller
public class UserController {<!-- -->@RequestMapping(value = "/users", method = RequestMethod.POST)public String addUser(@Valid @ModelAttribute("user") User user, BindingResult result) {<!-- -->if (result.hasErrors()) {<!-- -->return "addUser";}userService.addUser(user);return "redirect:/users";}
}

在上面的示例中,@Valid注解告诉Spring启用表单验证,并将验证结果保存在BindingResult对象中。如果表单验证失败,则返回"addUser"视图;否则,调用userService的addUser()方法来添加新用户。

7. 异常处理(Exception Handling):

异常处理是处理应用程序中可能发生的异常情况的过程。在Spring MVC中,我们可以使用@ControllerAdvice注解定义全局异常处理器。

@ControllerAdvice
public class GlobalExceptionHandler {<!-- -->@ExceptionHandler(value = {<!-- -->IOException.class, SQLException.class})public ModelAndView handleException(Exception ex) {<!-- -->ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("error", ex.getMessage());modelAndView.setViewName("error");return modelAndView;}
}

在上面的示例中,@ControllerAdvice注解告诉Spring这是一个全局异常处理器类。@ExceptionHandler注解告诉Spring该方法处理IOException和SQLException异常。如果应用程序抛出这些异常,则Spring将调用handleException()方法,并将异常信息添加到ModelAndView对象中,然后返回"error"视图。

通过以上的介绍,我们可以看出,Spring MVC控制器包含了多个重要的组件,包括控制器、请求映射、参数绑定、视图解析器、数据绑定、表单验证和异常处理等。只有深入理解这些概念,并熟练掌握相应的Java代码技巧,才能够在实际开发中灵活运用Spring MVC框架,构建高效、可靠、易于维护的Web应用程序。


http://www.ppmy.cn/ops/54720.html

相关文章

Supabase 自托管部署实践

Supabase 是 Firebase 的开源替代品。使用 Postgres 数据库、身份验证、即时 API、边缘函数、实时订阅、存储和向量嵌入来启动您的项目。 Supabase介绍 Supabase 是一个开源的后端即服务&#xff08;BaaS&#xff09;平台&#xff0c;提供了一系列工具和服务&#xff0c;帮助…

机器人控制系列教程之并联机器人简介

背景 根据其构件的连接是否构成闭环形式&#xff0c;机器人可分为串联机器人和并联机器人两种。对于串联机器人&#xff0c;其所有的构件以串联的结构形式连接起来&#xff0c;在空间组成一种开环结构&#xff0c;因而具有工作空间大&#xff0c;灵活性好等优点&#xff0c;但…

C++ 指针介绍

指针是C编程语言中的一个强大且重要的特性。它允许程序员直接操作内存地址&#xff0c;从而提供了对低级别内存的访问和控制。虽然指针在使用时可能比较复杂且容易出错&#xff0c;但它们在提高程序效率和灵活性方面有着不可替代的作用。本文将介绍C指针的基本概念、用法及其应…

Flutter循序渐进==>数据结构(列表、映射和集合)和错误处理

导言 填鸭似的教育确实不行&#xff0c;我高中时学过集合&#xff0c;不知道有什么用&#xff0c;毫无兴趣&#xff0c;等到我学了一门编程语言后&#xff0c;才发现集合真的很有用&#xff1b;可以去重&#xff0c;可以看你有我没有的&#xff0c;可以看我有你没有的&#xf…

HarmonyOS ArkUi ArkWeb加载不出网页问题踩坑

使用 使用还是比较简单的&#xff0c;直接贴代码了 别忘了配置网络权限 Entry Component struct WebPage {State isAttachController: boolean falseState url: string State title: string Prop controller: web_webview.WebviewController new web_webview.WebviewCont…

如何跑起来一个前后端项目

后端部署 第一步配置自己的maven 第二步优先导入自己本地jar包当本地没有在从远程下载 第三步找到配置文件 第四步成功运行后端部署完毕 前端部署 第一步看看项目node_modules有没有文件如果有就是已经安装好了对应的依赖&#xff0c;没有执行npm install 第二步运行即可

最新AIGC系统源码-ChatGPT商业版系统源码,自定义ChatGPT指令Promp提示词,AI绘画系统,AI换脸、多模态识图理解文档分析

目录 一、前言 系统文档 二、系统演示 核心AI能力 系统快速体验 三、系统功能模块 3.1 AI全模型支持/插件系统 AI模型提问 文档分析 ​识图理解能力 3.2 GPts应用 3.2.1 GPTs应用 3.2.2 GPTs工作台 3.2.3 自定义创建Promp指令预设应用 3.3 AI专业绘画 3.3.1 文…

24 年程序员各岗位薪资待遇汇总(最新)

大家好&#xff0c;我是程序员鱼皮。今天分享 24 年 6 月最新的程序员各岗位薪资待遇汇总。 数据是从哪儿来的呢&#xff1f;其实很简单&#xff0c;BOSS 直聘上有一个免费的薪酬查询工具&#xff0c;只要认证成为招聘者就能直接看&#xff0c;便于招聘者了解市场&#xff0c;…