SpringBoot框架Web开发

news/2024/9/18 7:59:41/ 标签: spring boot, 前端, 后端

1. 控制器开发

(1) JSON的支持

Spring Boot默认支持JSON格式的数据交换,主要通过以下方式实现:

  • 依赖spring-boot-starter-web 依赖包已经包括了 Jackson,用于将Java对象序列化为JSON,以及将JSON反序列化为Java对象
  • 注解:使用 @RequestBody 注解将请求体中的JSON数据转换为Java对象,使用 @ResponseBody 注解将Java对象转换为JSON响应
  • 配置:可以通过 application.propertiesapplication.yml 文件配置JSON序列化和反序列化的细节,如日期格式、字段忽略等
@RestController
public class SampleController {@GetMapping("/user")public User getUser() {return new User("张三");}@PostMapping("/user")public User postUser(@RequestBody User user) {return user;}
}

(2) RESTful的支持

Spring Boot支持RESTful API的开发,可以使用以下注解来实现:

  • @RestController:用于定义RESTful控制器,结合@RequestMapping@GetMapping@PostMapping等注解处理HTTP请求
  • @PathVariable:用于提取URL路径中的参数
  • @RequestParam:用于提取请求参数
  • @RequestBody:用于接收请求体中的数据
@RestController
@RequestMapping("/api")
public class ApiController {@GetMapping("/users/{id}")public User getUserById(@PathVariable("id") Long id) {}@PostMapping("/users")public User createUser(@RequestBody User user) {}
}

(3) Web测试的支持

Spring Boot提供了强大的测试支持,主要通过以下方式:

  • @SpringBootTest:用于启动整个Spring应用程序上下文,用于集成测试
  • @WebMvcTest:用于测试Spring MVC控制器,加载Spring MVC相关组件而不启动整个应用上下文
  • MockMvc:用于模拟HTTP请求和响应,进行控制器层的测试
@SpringBootTest
public class UserControllerTest {@Autowiredprivate MockMvc mockMvc;@Testpublic void testGetUser() throws Exception {mockMvc.perform(get("/users/1")).andExpect(status().isOk()).andExpect(jsonPath("$.name").value("张三"));}
}
2. 视图开发

(1) SpringBoot整合JSP

Spring Boot支持JSP视图模板,但需要一些配置:

  • 依赖:添加 spring-boot-starter-tomcat 依赖(使用provided范围)和 spring-boot-starter-web
  • 配置:在 application.propertiesapplication.yml 中配置视图解析器,指定JSP文件的位置
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

(2) 静态资源引入

Spring Boot默认支持静态资源的引入,资源文件可以放在以下目录中:

  • src/main/resources/static
  • src/main/resources/resources
  • src/main/resources/META-INF/resources

访问静态资源时,可以直接通过URL路径访问。

(3) 支持热部署

Spring Boot支持热部署,可以通过以下方式实现:

  • Spring Boot DevTools:一个开发工具,可以通过 spring-boot-devtools 依赖实现自动重启和热部署功能
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional>
</dependency>
3. 过滤器和拦截器

(1) 自定义过滤器

自定义过滤器用于在请求处理之前或之后执行一些操作,例如日志记录、请求检查等:

  • 实现:实现 javax.servlet.Filter 接口,重写 doFilter 方法
  • 注册:通过 @Component 注解自动注册,或在 WebMvcConfigurer 中进行注册
@Component
public class CustomFilter implements Filter {@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {chain.doFilter(request, response);}
}

(2) 自定义拦截器

自定义拦截器用于在请求处理前后执行操作,例如权限验证:

  • 实现:实现 HandlerInterceptor 接口,重写 preHandlepostHandleafterCompletion 方法
  • 注册:通过 WebMvcConfigureraddInterceptors 方法注册
@Component
public class CustomInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {return true;}
}
@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new CustomInterceptor());}
}
4. 打包部署

(1) 多环境配置

Spring Boot支持不同的环境配置,可以通过以下方式实现:

  • 配置文件:使用 application-{profile}.propertiesapplication-{profile}.yml 来定义不同环境的配置
  • 激活配置:通过 spring.profiles.active 属性激活指定的环境配置
# application-dev.properties
spring.datasource.url=jdbc:mysql://localhost:3306/devdb# application-prod.properties
spring.datasource.url=jdbc:mysql://localhost:3306/proddb
# application.properties
spring.profiles.active=dev

(2) 服务器配置

Spring Boot应用可以打包成独立的JAR或WAR文件:

  • JAR包:适合嵌入式服务器的应用,通常使用 spring-boot-maven-plugin 插件进行打包
  • WAR包:适合传统的Web服务器部署,需继承 SpringBootServletInitializer 并重写 configure 方法

可以直接在pom.xml中进行配置

<<!-- 任选其一 -->
<packaging>jar</packaging>
<packaging>war</packaging>

(3) 项目打包

项目打包可通过以下步骤完成:

  • Maven/Gradle打包:使用Maven或Gradle进行项目打包
  • 打包命令:使用 mvn clean package./gradlew build 命令生成JAR或WAR文件
mvn clean package

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

相关文章

Protubuf入门

⼀、初识 ProtoBuf 1. 序列化概念 序列化和反序列化 序列化&#xff1a;把对象转换为字节序列的过程 称为对象的序列化。 反序列化&#xff1a;把字节序列恢复为对象的过程 称为对象的反序列化。 什么情况下需要序列化 存储数据&#xff1a;当你想把的内存中的对象状态…

Java零基础-replace(CharSequence target, CharSequence replacement)详解

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云/阿里云/华为云/51CTO&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互…

2024年某大厂HW蓝队面试题分享

&#x1f91f; 基于入门网络安全/黑客打造的资源包无偿分享中&#xff1a; &#x1f449;黑客&网络安全入门&进阶学习资源包 应急响应流程 1&#xff09;首先判断服务器资产、影响范围以及严重程度&#xff0c;确认有没有必要将服务器下线隔离&#xff0c;然后根据服务…

【佳学基因检测】在织梦网站中, 创建或修改目录:/var/www/html/cp 失败! DedeTag Engine Create File False

【佳学基因检测】在织梦网站中, 创建或修改目录&#xff1a;/var/www/html/cp 失败&#xff01; DedeTag Engine Create File False 在使用 DedeCMS&#xff08;一个常用的内容管理系统&#xff09;时&#xff0c;如果遇到“创建或修改目录&#xff1a;/var/www/html/cp 失败&…

工程师 - HUE(Humans in User Experience)介绍

HUE&#xff1a;Humans in User Experience&#xff08;用户体验中的人类&#xff09;是用户体验&#xff08;UX&#xff09;设计领域的一种概念或方法&#xff0c;强调在设计过程中考虑人的因素的重要性。它侧重于了解用户的需求、行为和情感&#xff0c;从而创造出更有效、更…

flask框架

Flask 1 flask简介 我们之所以在浏览器中输入localhost:8080然后就可以把webapps下面的项目文件以浏览器的方式打开&#xff0c;功臣在与tomcat。python语言写的项目&#xff0c;转换为web&#xff0c;Flask框架 轻量级web应用框架。 环境准备&#xff1a; pip install fl…

基于鸿蒙API10的RTSP播放器(七:亮度调节功能测试)

目标&#xff1a; 当我的手指在设备左方进行上下移动的时候&#xff0c;可以进行屏幕亮度的调节&#xff0c;在调节的同时&#xff0c;有实时的调节进度条显示 步骤&#xff1a; 界面逻辑&#xff1a;使用Stack() 组件&#xff0c;完成音量图标和进度条的组合显示&#xff0c…

鹏哥C语言自定义笔记重点(67-)

67. 68. 69. 70. 71.结构体内容 72.理解结构体的字节数 73. #pragma once //头文件中使用&#xff0c;功能是:防止头文件被多次引用 74.结构体传参 结论:结构体传参时&#xff0c;要传结构体地址。 75.位段 76.static是只能在该文件中看到&#xff0c;其他地方看不到 77.…

通俗理解矩阵的秩

通俗理解矩阵的秩 flyfish 一、通俗的理解 想象有一张表格&#xff08;矩阵&#xff09;&#xff0c;表格里有很多数字。矩阵的秩告诉我们这个表格里的数据有多么“特别”或者“复杂”。 1. 行和列的概念&#xff1a; 矩阵是由行&#xff08;横排的数字&#xff09;和列&a…

vue + Lodop 制作可视化设计页面 实现打印设计功能(四)

历史&#xff1a; vue2 Lodop 制作可视化设计页面 实现打印设计功能&#xff08;一&#xff09; vue Lodop 制作可视化设计页面 实现打印设计功能&#xff08;二&#xff09; vue Lodop 制作可视化设计页面 实现打印设计功能&#xff08;三&#xff09; 前言&#xff1a…

uniapp vue3 梯形选项卡组件

实现的效果图&#xff1a; 切换选项卡显示不同的内容&#xff0c;把这个选项卡做成了一个组件&#xff0c;需要的自取。 // 组件名为 trapezoidalTab <template> <view class"pd24"><view class"nav"><!-- 左侧 --><view cla…

web基础之文件上传

1.下载安装 下载地址 链接&#xff1a;百度网盘-链接不存在 提取码&#xff1a;jhks 安装 直接把他放在phpstudy的WWW目录中。&#xff08;phpstudy的下载安装&#xff0c;可以自行百度一下&#xff09; 打开 访问地址&#xff1a;127.0.0.1/upload-labs 问题 这里可能…

MCU与SOC的区别

自动驾驶中 MCU 与 SoC 的区别 在自动驾驶系统中&#xff0c;**MCU&#xff08;微控制单元&#xff0c;Microcontroller Unit&#xff09;和SoC&#xff08;系统级芯片&#xff0c;System on Chip&#xff09;**都是关键的电子元件&#xff0c;但它们在性能、功能和应用领域等…

MATLAB在嵌入式系统设计中的最佳实践

嵌入式系统设计是一个复杂的过程&#xff0c;涉及硬件和软件的紧密集成。MATLAB提供了一套全面的解决方案&#xff0c;从算法开发到代码生成&#xff0c;再到硬件验证&#xff0c;极大地简化了这一过程。本文将探讨使用MATLAB进行嵌入式系统设计的最佳实践&#xff0c;包括模型…

10分钟在钉钉上增加一个AI机器人

您只需 10 分钟&#xff0c;无需任何编码&#xff0c;即可为您的组织在钉钉平台上创建一个有大模型能力加成的 AI 机器人。这个机器人可以全天候&#xff08;7x24&#xff09;响应用户咨询&#xff0c;还能解答私域问题&#xff0c;成为您业务的专属机器人&#xff0c;提升用户…

时序数据库 TDengine 的入门体验和操作记录

时序数据库 TDengine 的学习和使用经验 什么是 TDengine &#xff1f;什么是时序数据 &#xff1f;使用RPM安装包部署默认的网络端口 TDengine 使用TDengine 命令行&#xff08;CLI&#xff09;taosBenchmark服务器内存需求删库跑路测试 使用体验文档纠错 什么是 TDengine &…

k8s service如何实现流量转发

1 基本概念 Service&#xff1a;在Kubernetes&#xff08;K8s&#xff09;中&#xff0c;Service用于将流量转发到后端的Pod中。Service提供了一种稳定的网络入口&#xff0c;尽管后端的Pod可能会动态改变 kube-proxy: kube-proxy是Kubernetes集群中的核心组件之一&#xff0…

C++:opencv多边形逼近二值图轮廓--cv::approxPolyDP

cv::approxPolyDP 是 OpenCV 中一个用于多边形逼近的函数。它通过 Douglas-Peucker 算法将复杂的轮廓简化为更少的点&#xff0c;这在图像处理和计算机视觉中非常有用。例如&#xff0c;简化的轮廓可以帮助提高形状分析和轮廓检测的效率。 函数原型 void cv::approxPolyDP(co…

基于Python的自然语言处理系列(9):使用TorchText与预训练词嵌入进行新闻分类

在前一篇文章中&#xff0c;我们展示了如何使用TorchText和RNN进行新闻分类。在这篇文章中&#xff0c;我们将改进之前的模型&#xff0c;通过使用预训练词嵌入、优化器的更改、正交初始化以及打包填充序列的技巧&#xff0c;提升模型的学习效率和效果。 1. 改进方向 提高模型…

计算机网络八股总结

这里写目录标题 网络模型划分&#xff08;五层和七层&#xff09;及每一层的功能五层网络模型七层网络模型&#xff08;OSI模型&#xff09; 三次握手和四次挥手具体过程及原因三次握手四次挥手 TCP/IP协议组成UDP协议与TCP/IP协议的区别Http协议相关知识网络地址&#xff0c;子…