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

文章目录

    • 控制器(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.rhkb.cn/news/368410.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Workerman在线客服系统源码,附搭建教程

源码介绍&#xff1a; Workerman在线客服系统源码。 workerman是一个高性能的PHP socket 服务器框架&#xff0c;workerman基于PHP多进程以及libevent事件轮询库&#xff0c;PHP开发者只要实现一两个接口&#xff0c;便可以开发出自己的网络应用&#xff0c;例如Rpc服务、聊天…

leetCode.98. 验证二叉搜索树

leetCode.98. 验证二叉搜索树 题目描述 代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(n…

秋招Java后端开发冲刺——并发篇2(JMM与锁机制)

本文对Java的内存管理模型、volatile关键字和锁机制进行详细阐述&#xff0c;包括synchronized关键字、Lock接口及其实现类ReentrantLock、AQS等的实现原理和常见方法。 一、JMM&#xff08;Java内存模型&#xff09; 1. 介绍 JMM定义了共享内存中多线程程序读写操作的行为规…

51单片机第18步_将TIM0用作13位定时器

本章重点学习将TIM0用作13位定时器。 1、定时器0工作在模式0框图 2、定时器0工作在模式0举例 1、Keil C51中有一些关键字&#xff0c;需要牢记&#xff1a; interrupt 0&#xff1a;指定当前函数为外部中断0&#xff1b; interrupt 1&#xff1a;指定当前函数为定时器0中断…

【C语言】union 关键字

在C语言中&#xff0c;union关键字用于定义联合体。联合体是一种特殊的数据结构&#xff0c;它允许不同的数据类型共享同一段内存。所有联合体成员共享同一个内存位置&#xff0c;因此联合体的大小取决于其最大成员的大小。 定义和使用联合体 基本定义 定义一个联合体类型时…

ubuntu20.04配置调试工具

1.准备工作&#xff1a;安装g或者gdb sudo apt updatesudo apt install gg --versionsudo apt install gdbgdb --version 2.配置环境 2.1在本地新建一个main.cpp #include <iostream> #include <vector> #include <string>using namespace std;int main(…

克隆gitee仓库,在vs2022创建文件夹开发项目操作步骤

git网站 git知识大全 git教程&#xff1a;廖雪峰的官方网站 git菜鸟教程 gitee之创建项目步骤 同步源仓库 2. 克隆命令 3. 右击git Bash Here>粘贴命令行 4. 选中项目文件夹》创建本人文件夹&#xff08;ZYY&#xff09; 5. 打开vs2022》新建项目》选择Framework》下…

C++精解【10】

文章目录 读写文件概述example csv读文件读取每个字段读取机器学习数据库iris constexpr函数GMP大整数codeblock环境配置数据类型函数类 EigenminCoeff 和maxCoeffArray类 读写文件 概述 fstream typedef basic_fstream<char, char_traits<char>> fstream;此类型…

VSCode常用的一些插件

Chinese (Simplified) 汉语&#xff08;简体&#xff09;拓展包。 Auto Close Tag 可以自动增加xml/html的闭合标签。 CodeSnap 截图神器。截图效果在下面。 Dracula Official vscode一个很好看的主题。 Git Graph git管理工具。 GitHub Repositories 有了它&#xff0c;不…

前端利用vue如何实现导入和导出功能.md

1. 前端利用vue如何实现导入和到处功能 1.1. 导入功能&#xff08;以导入Excel文件为例&#xff09; 1.1.1. 实现步骤: 1.1.1.1. 安装依赖: 首先&#xff0c;你需要安装处理Excel文件的库&#xff0c;如xlsx。1.1.1.2. 创建上传组件: 使用Element UI的<el-upload>组件或其…

Qt:5.QWidget属性介绍(Enabled属性-控件可用性设置、geometry属性-控件位置/大小设置)

目录 一、 QWidget属性的介绍&#xff1a; 二、Enabled属性-控件可用性设置&#xff1a; 2.1Enabled属性的介绍&#xff1a; 2.2获取控件当前可用状态的api——isEnabled()&#xff1a; 2.3设置控件当前的可用状态的api—— setEnabled() &#xff1a; 2.4 实例&#xff…

git提交实战

以新项目为例&#xff0c;如何在新项目新分支提交代码。 1.查看文件所在位置 git init 2.克隆项目到本地并完成身份配置 3.将需要新增的文件放到指定目录路径下 4.进入新克隆的文件 cd XXX 5.切换分支 git checkout XXX 6.标红者即为新提交的文件 git status 7.加入 git …

Is ChatGPT a Good Personality Recognizer? A Preliminary Study?

ChatGPT是一个很好的人格识别者吗&#xff1f;初步调研 摘要1 介绍2 背景和相关工作3 实验3.1 数据集3.2 提示策略3.3 基线3.4 评估指标3.5 实现细节3.6 Overall Performance (RQ1)3.7 ChatGPT在人格识别上的公平性 (RQ2)3.8 ChatGPT对下游任务的人格识别能力&#xff08;RQ3&a…

linux——IPC 进程间通信

IPC 进程间通信 interprocess communicate IPC&#xff08;Inter-Process Communication&#xff09;&#xff0c;即进程间通信&#xff0c;其产生的原因主要可以归纳为以下几点&#xff1a; 进程空间的独立性 资源隔离&#xff1a;在现代操作系统中&#xff0c;每个进程都…

ValidateAntiForgeryToken、AntiForgeryToken 防止CSRF(跨网站请求伪造)

用途&#xff1a;防止CSRF&#xff08;跨网站请求伪造&#xff09;。 用法&#xff1a;在View->Form表单中: aspx&#xff1a;<%:Html.AntiForgeryToken()%> razor&#xff1a;Html.AntiForgeryToken() 在Controller->Action动作上&#xff1a;[ValidateAntiForge…

SSM少儿读者交流系-计算机毕业设计源码20005

摘要 随着信息技术的发展和互联网的普及&#xff0c;少儿读者之间的交流方式发生了革命性的变化。通过使用Java编程语言&#xff0c;可以实现系统的高度灵活性和可扩展性。而SSM框架的采用&#xff0c;可以提供良好的开发结构和代码管理&#xff0c;使系统更加稳定和易于维护。…

基于Springboot的智慧信息化机房管理系统

1 项目介绍 1.1 研究目的和意义 随着社会的快速发展&#xff0c;计算机的影响是全面且深入的。人们生活水平的不断提高&#xff0c;日常生活中人们对高校共享机房管理方面的要求也在不断提高&#xff0c;需要高校共享机房的人数更是不断增加&#xff0c;使得高校共享机房管理…

向量数据库、主键存储引擎、高速网络 RDMA 框架……DolphinDB 版本更新啦!

盛夏已至&#xff0c;炎热的七月伊始&#xff0c;DolphinDB 也迎来了版本的更新。此次更新的 3.00.1 与 2.00.13 版本从多个维度进行了优化扩展&#xff0c;进一步深化了 DolphinDB 在机器学习、数据分析等领域的尝试与探索。 为了响应用户日益增长的 AI 运算需求&#xff0c;…

idea Git操作

1、代码拉取&#xff08;左上角&#xff09; 或 2、代码push&#xff08;左上角&#xff09; 3、切换分支&#xff08;右下角&#xff09; 4、分支管理 5、当前分支和某一个分支对比差异 6、当前分支某一个提交需要恢复成提交前状态&#xff08;revert&#xff09; 7、其他分…