当前位置: 首页 > news >正文

【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错

1. 运行项目

import org.springframework.boot.SpringApplication;  
import org.springframework.boot.autoconfigure.SpringBootApplication;  @SpringBootApplication  
public class Application {  public static void main(String[] args) {  SpringApplication.run(Application.class, args);  }  
}
  • @SpringBootApplicationSpring Boot 启动类注解
    点击启动类的 main 方法就可以运行 Spring Boot 项目了,启动成功如下图所示:image.png

2. 输出 Hello world

JavaEE 更多是围绕着如何使用 Java 来进行 web 开发。如果要和浏览器进行交互,就需要使用 Spring Boot 来实现

在创建的项目包路径下创建 UserController 文件,实现代码如下:

import org.springframework.web.bind.annotation.RequestMapping;  
import org.springframework.web.bind.annotation.RestController;  @RestController  
public class UserController {  @RequestMapping("/hello")  public String hello() {  return "Hello, Spring";  }  
}
  • 重新启动项目,访问 127.0.0.1:8080/hello,最终效果如下:image.png|498

3. Web 服务器

浏览器和服务器两端进行数据交互,使用的就是 HTTP 协议image.png
前面文章已经介绍了 HTTP 协议,知道了 HTTP 协议就是 HTTP 客户端和 HTTP 服务器之间的交互数据的格式

Web 服务器就是对 HTTP 协议进行封装,程序员不需要直接对协议进行操作(自己写代码去解析 HTTP 协议规则),让 Web 开发更加便捷,所以 Web 服务器也被称为 WWW 服务器,HTTP 服务器,主要功能是提供网上的信息浏览服务

  • 常见的 Web 服务器有:ApacheNginxIISTomcatJboss

Spring Boot 内置了 Tomcat 服务器,无需配置就可直接运行image.png
Tomcat 默认端口号是 8080,所以我们程序访问时的端口号也是 8080

4. 请求响应流程分析

浏览器输入 URL 之后,发起请求,就和服务器之间建立了连接
image.png

浏览器,输入网址:127.0.0.1:8080/user/sayhi

  • 通过 IP 地址 127.0.0.1 定位到网络上的一台计算机(127.0.0.1 就是本机)
  • 通过端口号 8080 找到计算机上对应的进程,也就是在本地计算机中找到正在运行的 8080 端口的程序
  • /user/sayhi 是请求资源位置
    • 资源:对计算机而言资源就是数据
    • web 资源:通过网络可以访问到的资源(通常指放在服务器上的数据)

127.0.0.1:8080/user/sayhi,就是向本地计算机中的 8080 端口程序,获取资源位置是 /user/sayhi 的数据,然后发给服务器


服务器:

  • 接收到浏览器发送的信息(如:/user/sayhi)
  • 在服务器上找到/user/sayhi 的资源
  • 把资源发给浏览器

5. 访问出错怎么办

404

404 表示用户访问的资源不存在,大概率是 URL 路径写的不正确

错误实例 1:URL 单词拼错

image.png|595

错误实例 2:注解写错

注释写错或者没写都会报错

@Controller
public class UserController{@RequestMapping("/sayHi")public String sayHi(){return "hello, spring";}
}
  • 此时访问也会报错image.png

通过 Fiddler 观察 http 请求 image.png

500

服务器出现内部错误,一般是服务器的代码执行过程中遇到了一些特殊情况(服务器异常崩溃),会产生这个状态码

错误实例:

@RestController
public class UserController {@RequestMapping("/sayHi") {int res = 10/0;return "hello, Spring";}
}
  • 重启 Tomcat 服务器,重新访问页面,可以看到:image.png

此时,程序后端控制台已经打印了具体的异常调用栈image.png

  • 异常信息里已经提示了出现异常的代码是 UserController.java 的第 11 行
  • 错误原因是算术异常:除数为 0
  • 按照异常提示,去解决对应的问题即可

无法访问此网站

一般是 Tomcat 启动失败了 image.png|486

打开 Fiddler 的话,界面如下:image.png

这种情况一般是服务器未启动,也就是 Tomcat 未启动,或者 IP/端口号写错了

小结

熟悉 HTTP 协议能让我们调试问题事半功倍

  • 4xx 的状态码标识路径不存在,往往需要向上检查 URL 是否正确,和代码中设定的 Context Path 以及 Servlet Path 是否一致
  • 5xx 的状态码表示服务器出现错误,往往需要观察页面提示的内容和 Tomcat 自身的日志,观察是否存在报错
  • 出现连接失败往往意味着服务没有正确启动,也需要观察服务器的自身日志是否有错误提示

程序猿调试 BUG 如同医生诊病
一个有经验的程序猿和一个新手程序猿相比,最大的优势往往不是代码写的多好,而是调试效率有多高。如同一个问题可能新手花了几天都无法解决,但是有经验的程序猿可能几分钟就搞定了

总结

Spring Boot 是为了快速开发 Spring 而诞生的,Spring Boot 具备:

  • Spring Boot 提供了启动添加依赖的功能,可以快速集成框架
  • 内置 web 服务器,无需配置 Tomcatweb 服务器,直接运行和部署程序
  • 可以完全抛弃繁琐的 XML,使用注解和配置的方式进行开发
  • 支持更多的监控的指标,可以更好的了解项目的运行情况等特点
    Spring Boot 可使用 IDEA 或网页创建,它的设计思想是约定大于配置,类上标注@SpringBootApplication 就可以启动 Spring Boot 项目了

相关文章:

【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错

1. 运行项目 import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Appl…...

②EtherCAT转Modbus485RTU网关多路同步高速采集无需编程串口服务器

EtherCAT转Modbus485RTU网关多路同步高速采集无需编程串口服务器https://item.taobao.com/item.htm?ftt&id798036415719 EtherCAT 串口网关 EtherCAT 转 RS485 (接上一章) 自由协议通信步骤 (以MS-A2-1041为例) 接收与…...

matlab-对比两张图片的HSV分量的差值并形成直方图

%对比两张图片的HSV分量的差值并形成直方图,改个路径就能用,图片分辨率要一致 close all; clear all; clc; I1imread(E:\test\resources\image\1.jpg); I2imread(E:\test\resources\image\2.jpg); HSV1 rgb2ntsc(I1); HSV2 rgb2ntsc(I2); %HSV,HSV 代…...

微服务SpringGateway解析部署使用全流程

官网地址: Spring Cloud Gateway 目录 1、SpringGateway简介 1、什么是网关 2、为什么用网关【为了转发】 2、应用: 1.启动nacos 2.创建网关项目 3.网关配置1 4.网关配置2【了解】 5.过滤器配置【了解】 1、SpringGateway简介 核心功能有三个&…...

Solidity 存储和内存管理:深入理解与高效优化

在 Solidity 中,存储和内存管理是编写高效智能合约的关键组成部分。合约执行的每一步操作都可能涉及到数据的存储和读取,而这些操作对 gas 的消耗有很大影响。因此,理解 Solidity 的存储模型以及如何优化数据的管理对于合约的安全性、性能和成…...

机器学习篇-day02-KNN算法实现鸢尾花模型和手写数字识别模型

一. KNN简介 KNN思想 K-近邻算法(K Nearest Neighbor,简称KNN)。比如:根据你的“邻居”来推断出你的类别 KNN算法思想:如果一个样本在特征空间中的k 个最相似的样本中的大多数属于某一个类别,则该样本也属…...

【C++】STL--vector

1.vector的介绍 我们先来看看vector的文档介绍,实际中我们只要熟悉相关接口就好了。 成员函数 使用STL的三个境界:能用,明理,能扩展 ,那么下面学习vector,我们也是按照这个方法去学习 2 vector的使用 v…...

Java使用Redis的详细教程

Redis是一个基于内存的key-value结构数据库,即非关系型数据库,具有高性能、丰富的数据类型、持久化、高可用性和分布式等特点。在Java项目中,Redis通常用于缓存、分布式锁、计数器、消息队列和排行榜等场景。以下是在Java中使用Redis的详细教…...

严重 Zimbra RCE 漏洞遭大规模利用(CVE-2024-45519)

攻击者正在积极利用 CVE-2024-45519,这是一个严重的 Zimbra 漏洞,该漏洞允许他们在易受攻击的安装上执行任意命令。 Proofpoint 的威胁研究人员表示,攻击始于 9 月 28 日,几周前,Zimbra 开发人员发布了针对 CVE-2024-…...

php函数积累

对称函数 isset 判断数组arr中是否存在键key 返回值true/false isset(name,$arr) unset 删除数组中的键 需存在key不然抛出异常 unset($arr[name]) json_encode 数据转json格式 json_encode($arr) 一般形式 指定字符编码形式 json_decode json格式转原有数据格式 json_d…...

前端项目场景相关的面试题,包含验证码、图片存储、登录鉴权、动态路由、组件划分等项目场景实际的面试题

项目场景面试题 如何防止短信验证码被刷 问题场景 添加倒计时和图片滑动验证,避免不必要的资源浪费 发送短信验证码需要费用发送短信消耗服务器资源 公司的图片、视频、文件资源如何存储的 传统模式 分开存储到数据服务器,托管服务器到云端 缺点&…...

uniapp 上了原生的 echarts 图表插件了 兼容性还行

插件地址:echarts - DCloud 插件市场 兼容性这块儿不知道后期会不会支持其他浏览器 H5 的话建议可以用原生的不用这个插件...

共享单车轨迹数据分析:以厦门市共享单车数据为例(八)

副标题:基于POI数据的站点综合评价——以厦门市为例(三) 什么是优劣解距离法(TOPSIS)? 优劣解距离法(Technique for Order Preference by Similarity to Ideal Solution,简称TOPSI…...

sentinel原理源码分析系列(二)-动态规则和transport

本文是sentinel原理源码分析系列第二篇,分析两个组件,动态配置和transport 动态规则 Sentinel提供动态规则机制,依赖配置中心,如nacos,zookeeper,组件支持动态配置,模板类型为规则,支…...

ubuntu切换源方式记录(清华源、中科大源、阿里源)

文章目录 前言一、中科大源二、清华源三、阿里源 前言 记录ubunut切换各个源的方式。 备注:更换源之后使用sudo apt-get update更新索引。 提示:以下是本篇文章正文内容,下面案例可供参考 一、中科大源 地址:https://mirrors.u…...

【10】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-泛型基础全解(泛型函数、泛型接口、泛型类)及参数、接口补充

序言: 本文详细讲解了关于ArkTs语言中的泛型,其中包含泛型函数、泛型接口、泛型约束、泛型类及其中参数的使用方法,补充了一部分接口相关的知识,包括接口的继承和具体实现,也写到了一些边边角角的小知识,剩…...

2024年09月CCF-GESP编程能力等级认证C++编程一级真题解析

本文收录于专栏《C++等级认证CCF-GESP真题解析》,专栏总目录:点这里。订阅后可阅读专栏内所有文章。 一、单选题(每题 2 分,共 30 分) 第 1 题 据有关资料,山东大学于1972年研制成功DJL-1计算机,并于1973年投入运行,其综合性能居当时全国第三位。DJL-1计算机运算控制…...

基于多维统计分析与GMM聚类的食品营养特征研究

1.项目背景 在当今社会,随着人们对健康和营养的日益关注,深入了解食品的营养成分及其对人体的影响变得越来越重要,本研究采用了多维度的分析方法,包括营养成分比较分析、统计检验、营养密度分析和高斯混合模型(GMM&am…...

SkyWalking 告警功能

SkyWalking 告警功能是在 6.x 版本新增的,其核心由一组规则驱动,这些规则定义在config/alarm-settings.yml文件中。 告警规则 告警规则:它们定义了应该如何触发度量警报,应该考虑什么条件。Webhook(网络钩子):定义当警告触发时,哪些服务终端需要被告知。常用告警规则 …...

国内旅游:现状与未来趋势分析

在当今社会快速发展的背景下,国内旅游更是呈现出蓬勃的发展态势。中国,这片拥有悠久历史、灿烂文化和壮丽山河的广袤土地,为国内旅游的兴起与发展提供了得天独厚的条件。 本报告将借助 DataEase 强大的数据可视化分析能力,深入剖…...

西电25考研 VS 24考研专业课大纲变动汇总

01专业课变动 西安电子科技大学专业课学长看到953网络安全基础综合变为 893网络安全基础综合,这是因为工科要求都必须是8开头的专业课,里面参考课本还是没变的,无非就是变了一个名字 对于其他变动专业课也是同理的 02专业课考纲内容变化 对于…...

【Linux】进程管理:状态与优先级调度的深度分析

✨ 山海自有归期,风雨自有相逢 🌏 📃个人主页:island1314 🔥个人专栏:Linux—登神长阶 ⛺️ 欢迎关注:👍点赞 &#x1…...

同轴电缆笔记

同轴电缆笔记 射频同轴电缆的阻抗标准为什么是50Ω或75Ω呢? 在PCB设计中,在合理的范围内,传输线阻抗的具体数值并不重要。只要控制好整条传输线的阻抗,不要出现阻抗不连续的情况就好了。设计中的其他因素往往决定了我们用什么样…...

【Verilog学习日常】—牛客网刷题—Verilog企业真题—VL74

异步复位同步释放 描述 题目描述: 请使用异步复位同步释放来将输入数据a存储到寄存器中,并画图说明异步复位同步释放的机制原理 信号示意图: clk为时钟 rst_n为低电平复位 d信号输入 dout信号输出 波形示意图: 输入描…...

在Linux系统安装Nginx

注意:Nginx端口号是80(云服务器要放行) 我的是基于yum源安装 安装yum源(下面这4步就好了) YUM源 1、将源文件备份 cd /etc/yum.repos.d/ && mkdir backup && mv *repo backup/ 2、下载阿里源文件 curl -o /etc/yum.repos.d/CentOS-Base.repo ht…...

C初阶(六)--- static 来喽

前言:C语言中有许多关键字(关键字是预先保留的标识符,具有特殊意义,不能用作变量 名、函数名等普通标识符。) 比如:前面在变量与常量那一节提到的extern 就是一个关键字,应该还记得e…...

Git版本控制工具--关于命令

Git版本控制工具 学习前言 在项目开发中,总是需要多个人同时对一个项目进行修改,如何高效快速地进行修改,且控制各自修改的版本不会和他人的进行重叠,这就需要用到Git分布式版本控制器了 作用 解决了一致性,并发性…...

【iOS】计算器的仿写

计算器 文章目录 计算器前言简单的四则运算UI界面事件的逻辑小结 前言 笔者应组内要求,简单实现了一个可以完成简单四则运算的计算器程序。UI界面则是通过最近学习的Masonry库来实现的,而简单的四则运算内容则是通过栈来实现一个简单的四则运算。 简单…...

报错 libgomp.so.1, needed by vendor/llama.cpp/ggml/src/libggml.so, not found

在安装 xinference时报错 安装命令 pip install "xinference[all]" 报错内容 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 3.7 MB/s eta 0:00:00 INFO: pip is looking at multiple versions of multiprocess t…...

wsl(3) -- USB使用

1. 简介 WSL1中可以直接使用Windows的串口,其对应关系就是COMx对应WSL的/dev/ttySx,例如COM2对应WSL的/dev/ttyS2。WSL2是不支持USB设备的,但可以通过usbipd-win程序将windows上的usb设备映射到wsl2中,参考微软官方文档连接 USB …...

织梦做的网站织梦修改网页模板/网络优化公司哪家好

--限制Map,Reduce数 set mapreduce.tasktracker.map.tasks.maximum30; --每个nodemanager节点上可运行的最大map任务数,默认值2,可根据实际值调整为10~100; set mapreduce.tasktracker.reduce.tasks.maximum30; --每个no…...

wordpress值得买/国内手机搜索引擎十大排行

地图旋转的实现主要利用了ScreenDisplay对象,旋转基本分三个步骤如下: 1.开始旋转(RotateStart),确定地图中心点(旋转轴)。MouseDown事件。 IPoint point newPointClass(); //Se…...

国内使用vue做的网站/app拉新怎么对接渠道

梦里藏着她, 舍不得放, 舍不得骂, 默默守候、地久天长。 谁家的黄粱之上, 这一梦、我看不穿。 眼泪划过你的脸庞, 心血透出我的胸膛。 你说那三寸阳光, 是你苦苦祈求、感动了上苍。 你不要我给你三寸天堂&a…...

无锡企业如何建网站/互联网舆情

用最大似然估计或者map导出能量模型 参考 最大似然估计 假设有个服从未知分布的随机变量,类似黑盒子,它产生了很多能看得见的样本。那这时候,我们可以通过最大化看到这些样本的概率来反推出模型最优的参数,这种方法叫做最大似然…...

Apple 手机网站制作/株洲百度seo

PHP7 已经出来1年了,PHP7.1也即将和大家见面,这么多好的特性,好的方法,为什么不使用呢,也希望PHP越来越好。 在这里整理 PHP 5.1 ,PHP5.2,PHP5.3,PHP5.4,PHP5.5,PHP5.6 ,PHP7,PHP7.1 所有新特性&#xff0…...

做网站 异地域名/新浪博客

sort(hash.begin(),hash.end());hash.erase(unique(hash.begin(),hash.end()),hash.end());...