【Java】小白友好的SpringMVC开发基础学习笔记

目录

简介

Bean加载控制

设置请求映射路径

5种请求类型参数传递

JSON数据传递请求参数

响应

Jackson库处理JSON响应

REST风格

RESTful快速开发

拦截器


简介

Spring MVC是一个强大而灵活的Web应用程序框架,它通过使用MVC架构模式、注解和配置文件来实现请求的分发和处理。它具有丰富的功能和特性,使开发者能够快速构建可靠和高效的Web应用程序。

在Spring MVC中,请求由前端控制器(Front Controller)负责接收并将其分发给适当的处理程序。该处理程序可以是一个方法、一个类或者一个注解控制器。处理程序负责处理请求,并生成一个模型对象来保存数据,然后选择适当的视图来呈现数据给用户。视图可以是JSP页面、HTML页面、JSON、XML或者其他格式。

Bean加载控制

Spring MVC框架使用IoC容器来管理和加载Bean。我们可以通过在配置文件中定义Bean,或使用注解标记Bean来实现加载控制。例如,使用@Controller注解标记一个类为控制器Bean,使用@Service注解标记一个类为服务Bean。

设置请求映射路径

在Spring MVC中,我们可以使用@RequestMapping注解来设置请求URL和处理程序方法之间的映射关系。例如,@RequestMapping("/hello")表示处理程序方法将处理以"/hello"开头的所有请求。

5种请求类型参数传递

Spring MVC支持五种类型的参数传递方式:

  • 路径变量(Path Variables):使用@PathVariable注解从URL路径中提取参数。
  • 请求参数(Request Parameters):使用@RequestParam注解从请求中获取参数。
  • 请求体参数(Request Body Parameters):使用@RequestBody注解将请求体转化为Java对象。
  • 请求头参数(Request Header Parameters):使用@RequestHeader注解获取请求头中的参数。
  • Cookie参数(Cookie Parameters):使用@CookieValue注解获取Cookie中的参数。

JSON数据传递请求参数

在Spring MVC中,我们可以使用@RequestBody注解将接收到的JSON数据转化为Java对象。

举例:

@PostMapping("/user")
public void createUser(@RequestBody User user) {// 处理接收到的User对象
}

响应

Spring MVC支持多种类型的响应,包括HTML、JSON、XML等。我们可以使用不同的视图解析器来选择合适的视图类型。例如,InternalResourceViewResolver用于解析JSP页面视图,MappingJackson2JsonView用于生成JSON响应。

Jackson库处理JSON响应

1.添加Jackson依赖: 在项目的Maven或Gradle配置文件中,确保已添加Jackson库的依赖项。

2.启用注解驱动: 在Spring MVC配置类上添加@EnableWebMvc注解,以启用注解驱动的Spring MVC功能。

3.配置Jackson转换器: 在Spring MVC配置类中添加MappingJackson2HttpMessageConverter作为消息转换器。这将告诉Spring MVC使用Jackson库来处理JSON响应。

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {@Overridepublic void configureMessageConverters(List<HttpMessageConverter<?>> converters) {MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();converters.add(converter);}
}

4.测试JSON响应: 使用控制器方法返回一个Java对象,并使用@ResponseBody注解将其转换为JSON响应。

@RestController
@RequestMapping("/users")
public class UserController {@GetMapping("/{id}")public User getUser(@PathVariable("id") int id) {// 从数据库或其他数据源获取用户信息User user = userService.getUserById(id);return user;}
}

REST风格

REST(Representational State Transfer)是一种基于HTTP协议的网络应用程序架构风格。它使用标准的HTTP方法(如GET、POST、PUT、DELETE)来对资源进行操作,并通过URL来唯一标识资源。Spring MVC可以很好地支持REST风格的开发。

RESTful快速开发

使用Spring MVC,我们可以轻松地开发RESTful Web服务。通过合理地设计请求路径和使用适当的HTTP方法,我们可以实现资源的增删改查操作。

@RestController
@RequestMapping("/users")
public class UserController {@GetMapping("/{id}")public User getUser(@PathVariable("id") int id) {// 根据id查询用户}@PostMappingpublic void createUser(@RequestBody User user) {// 创建用户}@PutMapping("/{id}")public void updateUser(@PathVariable("id") int id, @RequestBody User user) {// 更新用户信息}@DeleteMapping("/{id}")public void deleteUser(@PathVariable("id") int id) {// 删除用户}
}

拦截器

在Spring MVC中,我们可以使用拦截器(Interceptor)来拦截请求并进行相应的处理。拦截器可以用于实现认证、日志记录、异常处理等功能。拦截器可以在处理程序方法执行前后进行预处理和后处理。我们可以通过实现HandlerInterceptor接口来创建自定义拦截器,并在配置文件中进行配置。

举例:

public class MyInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 在处理程序方法执行前进行预处理return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {// 在处理程序方法执行后进行后处理}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {// 在视图渲染完成后进行清理工作}
}

在配置文件中配置拦截器:

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {@Autowiredprivate MyInterceptor myInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(myInterceptor).addPathPatterns("/**");}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/665836.shtml

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

相关文章

作业2.2

一&#xff0e;选择题 1、编写C程序一般需经过的几个步骤依次是&#xff08; B &#xff09; A. 编辑、调试、编译、连接 B. 编辑、编译、连接、运行 C. 编译、调试、编辑、连接 D. 编译、编辑、连接、运行 2、所谓数据封装就是将一组数据和与这组数据有关操作组装在…

ctfshow web-77

开启环境: 先直接用伪协议获取 flag 位置。 c?><?php $anew DirectoryIterator("glob:///*"); foreach($a as $f) {echo($f->__toString(). );} exit(0); ?> 发现 flag36x.txt 文件。同时根目录下还有 readflag&#xff0c;估计需要调用 readflag 获…

魔改冰蝎 —— 绕过检测,自动生成免杀后门

为什么要魔改工具&#xff1f; 生成的代码很容易被监测 生成的后门很容易被杀软杀掉 了解冰蝎流量特征 开启http代理&#xff0c;数据经过BP抓包进行分析数据 冰蝎数据包分析&#xff1a; 1、三个请求头固定 AcceptAccept-LanguageUser-Agent&#xff08;内部有十个&a…

Web3行业研究逐步加强,“链上数据”缘何成为关注焦点?

据中国电子报报道&#xff0c;近日&#xff0c;由中关村区块链产业联盟指导&#xff0c;中国信息通信研究院牵头&#xff0c;欧科云链控股有限公司参与编写的《全球Web3产业全景与发展趋势研究报告&#xff08;2023年&#xff09;》正式发布。研究报告通过全面追踪国内外Web3产…

给mysql设置时区

每次重启MySQL服务器后&#xff0c;使用IDEA的database navigator连接都会出现这种情况 解决方式就是 命令行登录后 set global time_zone 8:00;嘿嘿把之前自家简书文章 给mysql设置时区 搬运过来了&#xff0c;方便查阅

01-Java基础语法

Java基础语法 1. 注释使用的技巧&#xff1a;注意点 2. 关键字2.1 概念2.2 第一个关键字class 3. 字面量区分技巧&#xff1a;扩展&#xff1a; 制表符&#xff1a; 4. 变量4.1 什么是变量&#xff1f;4.2 变量的定义格式4.2.1 格式详解4.2.2 常用的数据类型4.2.3 变量的注意事…

手册前端在线学习网站

电脑重装了&#xff0c;收藏夹没了&#xff0c;在线上记录一下吧&#xff0c;如果有别的好的地址&#xff0c;欢迎在评论区给我&#xff0c;我确认后会同步更新到这里&#xff1b; 前端进阶之旅_刷题-注意收费项目是作者自己的与本人分享无关 React 技术揭秘 Vue 技术揭秘 ES6 …

斗地主登录界面(JAVA图形化界面)设置

1.实现代码 import CodeUtil.CodeUtil; import domain.User;import javax.swing.*; import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.ArrayList;public class LoginGame extends JFrame implements MouseListen…

MongoDB复制集实战及原理分析

文章目录 MongoDB复制集复制集架构三节点复制集模式PSS模式&#xff08;官方推荐模式&#xff09;PSA模式 典型三节点复制集环境搭建复制集注意事项环境准备配置复制集复制集状态查询使用mtools创建复制集安全认证复制集连接方式 复制集成员角色属性一&#xff1a;Priority 0属…

【数据分享】1929-2023年全球站点的逐月降雪深度数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、能见度等指标&#xff0c;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 之前我们分享过1929-2023年全球气象站点的逐月平均气温数据、逐月最高气温数据…

一副扑克牌一共54张,平均分成2份,求这2份都有2张A的概率。

这是一道高中数学题&#xff0c;此处介绍2个解法&#xff0c;第1个是我喜欢用的快速解法&#xff0c;第2个是公式解法。 1. 我的快速解法 第1张A随便在哪份&#xff0c; ①如果第2张A和第1张A在同一份(概率是26/53)&#xff0c;此时第3、4张牌必须在另一份&#xff0c;此时的…

力扣刷题-55.跳跃游戏

给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 class Solution { publ…

C语言入门到精通之练习37:输入3个数a,b,c,按大小顺序输出。

题目&#xff1a;输入3个数a,b,c&#xff0c;按大小顺序输出。 程序分析&#xff1a;利用指针方法。 实例 // Created by www.erdangjiade.com on 15/11/9. //# include<stdio.h>void swap(int *, int *); int main(void) {int a, b, c;int *p1, *p2, *p3;printf(&qu…

【鸿蒙】大模型对话应用(四):页面发起请求实现对话能力

Demo介绍 本demo对接阿里云和百度的大模型API&#xff0c;实现一个简单的对话应用。 DecEco Studio版本&#xff1a;DevEco Studio 3.1.1 Release HarmonyOS SDK版本&#xff1a;API9 关键点&#xff1a;ArkTS、ArkUI、UIAbility、网络http请求、列表布局、层叠布局 定义接…

MongoDB实战 – 创建和删除数据库

MongoDB实战 – 创建和删除数据库 MongoDB In Action - Create and Drop Databases By Jackson@ML 根据前文介绍,MongoDB安装完毕后,可以有不同方法进行访问。 本文简要介绍在Windows操作系统中,如何使用MongoDB Shell进行文档数据库的基本操作,并以实例加以说明。 1.…

C#(C Sharp)学习笔记_前言及Visual Studio Code配置C#运行环境【一】

前言 这可以说是我第一次正式的踏入C#的学习道路&#xff0c;我真没想过我两年前是怎么跳过C#去学Unity3D游戏开发的&#xff08;当然了&#xff0c;游戏开发肯定是没有成功的&#xff0c;都是照搬代码&#xff09;。而现在&#xff0c;我真正地学习一下C#&#xff0c;就和去年…

MySQL 表的增删改查(基础)

1.CRUD 注释:在SQL中可以使用"--空格描述"来表示注释说明 CRUD 即增加(Create).查询(Retrieve).更新(Update).删除(Delete) 2.新增(Create) insert into 表名 values (列,列...); insert into 表名(列名,列名...) values (列,列...); insert into 表名 values(),(),…

【QT+QGIS跨平台编译】之二十七:【librttopo+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、librttopo介绍二、文件下载三、文件分析四、pro文件五、编译实践一、librttopo介绍 rttopo(Real-Time Topology)是一个用于实时拓扑计算的开源库。它提供了一种高效的方式来管理和处理动态改变的拓扑结构,例如网络、图形、地理空间数据等。 rttopo的主要特点…

笔记本从零安装ubuntu系统(2):环境配置

文章目录 前言相关链接ubuntu Server 安装教程屏幕自动息屏关上盖子不休眠MobaXterm外网SSH内网穿透IPV6远程 为什么我要笔记本装Linux为什么要换ubuntu Server版能否连接wifi之后Linux 配置清单总结 前言 之前装了个ubuntu desktop 版&#xff0c;发现没有命令行&#xff0c;…

2401cmake,学习cmake3

步7:构建安装器. 下一步,假定想要发布项目,以便其他人可用.想在多种平台上发布二进制和源码.这和第四步有所不同. 第四步安装的是从源码构建的二进制.本例中,会构建支持二进制安装和包管理特性的安装包.为此,使用CPack来生成对应平台的安装器. 即,需要在顶级CMakeLists.txt底…