java:SpringBootWeb请求响应

2024-04-28 10:52

本文主要是介绍java:SpringBootWeb请求响应,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Servlet

用java编写的服务器端程序

客户端发送请求至服务器

服务器启动并调用Servlet,Servlet根据客户端请求生成响应内容并将其传给服务器

服务器将响应返回给客户端

javaweb的工作原理

在这里插入图片描述

在SpringBoot进行web程序开发时,内置了一个核心的Servlet程序DispatcherServlet,称之为核心控制器.

DispatcherServlet负责接收页面发送的请求,根据资源链接执行的规则,将请求再分发给部署在tomcat中的请求处理器Controller,请求处理器处理完请求之后,最终再由DispatcherServlet给浏览器响应数据.

浏览器发送请求到后端服务器tomcat后,tomcat会负责解析这些请求数据,将解析后数据传递到Servlet程序的HttpServletRequest对象,意味着HttpServletRequest对象可以获取到请求数据.同时传递了一个HttpServletResponse对象,来给浏览器设置响应数据.

请求:浏览器->HTTP->tomcat(内置servlet解析)->request对象->数据

响应:数据->response对象->servlet解析->HTTP->浏览器

请求

接收页面传递来的请求数据

后端接收前端传递的数据

底层依赖于getset方法进行取值(反射)

Postman

一款功能强大的网页调试和发送网页HTTP请求的Chrome插件

用于接口测试

接口测试:模拟前端发送请求,检验数据传输的正确性

界面功能如下所示

在这里插入图片描述

后端资源链接不能重复

简单参数

通过Servlet中提供的API HttpServletRequest可以获取请求的相关信息
@RequestMapping("/simpleParam")
public String simpleParam(HttpServletRequest request){String name = request.getParameter("name");String age = request.getParameter("age");System.out.println(name+" : "+age);return "OK";
}
//request对象中包含请求数据,可以直接通过getParameter()方法进行获取
使用SpringBoot方式

在SpringBoot环境中,对原始的API进行了封装,接收参数形式更加简单.

可以直接定义同名参数接收数据.

@RequestMapping("/simpleParam")public String simpleParam(String name , Integer age ){System.out.println(name+" : "+age);return "OK";
}
使用postman进行测试

在这里插入图片描述

快速提交带参数的请求

参数名不一致

可以使用@RequestParam进行映射

用法如下

@RequestMapping("/simpleParam")
public String simpleParam(@RequestParam("username") String name ,Integer age){System.out.println(name+" : "+age);return "OK";
}
//在形参前加上注解完成映射

实体参数

如果参数数量比较多,可以通过封装到一个pojo对象的方式进行数据封装

参数名需与POJO属性名一致

简单实体对象

定义一个pojo实体类

public class User {private String name;private Integer age;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", age=" + age +'}';}
}

在controller方法中传入pojo对象接受数据

@RequestMapping("/simplePojo")
public String simplePojo(User user){System.out.println(user);return "OK";
}
//pojo对象接受与其属性名相同的参数
复杂实体对象

在实体类中的一个或多个属性为其他实体类的对象

封装需要遵循如下规则:

请求参数名与形参对象的属性名相同,即接收属性中的实体类对象属性时,参数需要为对象.属格式.

在这里插入图片描述

数组集合参数

数组参数

请求参数名和形参对象属性名相同且请求参数为多个.

即接收多个同名参数

传递形式:

在这里插入图片描述

集合

集合参数

请求参数名和形参集合对象名字相同且请求参数为多个

使用@RequestParam绑定参数关系
@RequestMapping("/listParam")
public String listParam(@RequestParam List<String> hobby){System.out.println(hobby);return "OK";
}

传递形式

在这里插入图片描述

日期参数

对日期类型的参数进行封装的时候,需要通过@DateTimeFormat注解,以及其中的pattern属性来设置日期格式

pattern属性中制定了前端传递参数时的规格.

@RequestMapping("/dateParam")
public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){System.out.println(updateTime);return "OK";
}

传递形式

在这里插入图片描述

JSON参数

比较复杂的参数可以通过JSON格式进行传输,JSON数据键名和形参对象属性名相同,定义POJO类型形参即可接收参数,controller方法需要使用@RequestBody注解

使用实体类对象接受
@RequestMapping("/jsonParam")
public String jsonParam(@RequestBody User user){System.out.println(user);return "OK";
}

传递形式

在这里插入图片描述

路径参数

通过请求URL传递参数,使用{}进行标识,需要使用@PathVariable注解获取路径参数

参数尽量使用包装类
@RequestMapping("/path/{id}")
public String pathParam(@PathVariable Integer id){System.out.println(id);return "OK";
}@RequestMapping("/path/{id}/{name}")
public String pathParam2(@PathVariable Integer id, @PathVariable
String name){System.out.println(id+ " : " +name);return "OK";
}

传递形式

在这里插入图片描述

响应

@RestController注解

包含@Controller注解和@ResponseBody注解

Controller注解声明类为控制器

ResponseBody将返回值解析为JSON或者XML格式

可以在controller类中响应一个实体对象或者集合

eg:

响应一个实体类对象

@RequestMapping("/simpleParam")
public String simpleParam( String name , Integer age){User user = new User();user.setName();user.setAge();return user;
}

响应一个集合

@RequestMapping("/list")
public ArrayList<String> simpleParam( String name , Integer age){ArrayList<String> list = new ArrayList<>();return list;
}
无论响应数据形式是什么,都应该以Result形式返回(统一规范)
Result
{Integer code//1:成功 0:失败String msg//响应码 描述字符串Object data//使用Object类型可以接收任意数据static Result success(data){//返回成功时的result}static Result error(msg){//返回失败时的result}
}

综合案例(解析xml文件传递到前端页面)

前端

页面绑定js数据,数据绑定钩子函数请求的数据

钩子函数:

mounted() {axios.get("/User").then(result=>(this.tableData=result.data.data))
},

在组件加载阶段使用axios异步请求数据

后端

读取解析xml文件

String file = 
类名.class//获取字节码文件
.getClassLoader()//获取类加载器
.getResource()//获得资源
.File()//文件路径
XmlParserUtils.parse(file)对xml进行解析,得到一个对象集合

调用result里的success方法

返回成功对象

 return Result.success(list);

分层解耦

三层架构

数据访问->逻辑访问->请求处理

数据访问:

负责业务数据的维护操作,包括增,删,改,查等操作

逻辑处理:

负责业务逻辑处理的代码

请求处理,响应数据:

负责,接收页面的请求,给页面响应数据

按照三个组成部分,将代码分为三层
Controller(控制层)

接收前端发送的请求,对请求进行处理,并响应数据

Service(业务层)

处理具体的业务逻辑,对数据进行处理

Dao/Mapper(数据访问层/持久层)

负责数据的访问操作,包含数据的增删改查操作

分层解耦

内聚:软件中各个功能模块内部的功能联系

耦合:软件中各个层(模块)之间的依赖关联程度

IOC/DI技术(inversion of control/dependency injection)

IOC容器中管理的对象称为bean

@Component(加在实现类上)

@Primary有多个实现类对象时优先用被primary注解标注的

把实现类对象直接放入IOC容器中(控制反转)

@Autowired(加在声明对象语句上)

把IOC容器中的对象拿出来(依赖注入)

解决创建对象时产生的耦合

UserService a = new UserService();
//左侧通过实现接口实现多态进行解耦
//右侧通过IOC/DI思想解决
Bean的声明

把对象交给IOC容器管理,需要以如下注解代替@Component

Dao层->@Repository(自定义名字(默认类名小写))

Service层->@Service(自定义名字(默认类名小写))

Controller层->@Controller(自定义名字(默认类名小写))

其他类对象->@Componet(自定义名字(默认类名小写))

以上四大注解生效需要被组件扫描注解@ComponentScan扫描

默认扫描范围为引导类所在包以及其子包

Bean注入

@Primary优先使用本类对象

@Qualifier(“str”)选择名字为str的bean对象进行使用

由SpringBoot框架提供

@Resource(name=“str”)选择名字为str的bean对象使用

由java提供

rvice();
//左侧通过实现接口实现多态进行解耦
//右侧通过IOC/DI思想解决

#### Bean的声明把对象交给IOC容器管理,需要以如下注解代替@ComponentDao层->@Repository(自定义名字(默认类名小写))Service层->@Service(自定义名字(默认类名小写))Controller层->@Controller(自定义名字(默认类名小写))其他类对象->@Componet(自定义名字(默认类名小写))以上四大注解生效需要被组件扫描注解@ComponentScan扫描默认扫描范围为引导类所在包以及其子包#### Bean注入@Primary优先使用本类对象@Qualifier("str")选择名字为str的bean对象进行使用由SpringBoot框架提供@Resource(name="str")选择名字为str的bean对象使用由java提供

这篇关于java:SpringBootWeb请求响应的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/943046

相关文章

SpringBoot全局域名替换的实现

《SpringBoot全局域名替换的实现》本文主要介绍了SpringBoot全局域名替换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录 项目结构⚙️ 配置文件application.yml️ 配置类AppProperties.Ja

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

SpringBoot日志级别与日志分组详解

《SpringBoot日志级别与日志分组详解》文章介绍了日志级别(ALL至OFF)及其作用,说明SpringBoot默认日志级别为INFO,可通过application.properties调整全局或... 目录日志级别1、级别内容2、调整日志级别调整默认日志级别调整指定类的日志级别项目开发过程中,利用日志

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版