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

简介: 【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 项目了,启动成功如下图所示:

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,最终效果如下:

3. Web 服务器

浏览器和服务器两端进行数据交互,使用的就是 HTTP 协议

前面文章已经介绍了 HTTP 协议,知道了 HTTP 协议就是 HTTP 客户端和 HTTP 服务器之间的交互数据的格式

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

  • 常见的 Web 服务器有:ApacheNginxIISTomcatJboss

Spring Boot 内置了 Tomcat 服务器,无需配置就可直接运行

Tomcat 默认端口号是 8080,所以我们程序访问时的端口号也是 8080

4. 请求响应流程分析

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

浏览器,输入网址: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 单词拼错

错误实例 2:注解写错

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

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

通过 Fiddler 观察 http 请求

500

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

错误实例:

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

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

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

无法访问此网站

一般是 Tomcat 启动失败了

打开 Fiddler 的话,界面如下:

这种情况一般是服务器未启动,也就是 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 项目了


相关文章
|
2月前
|
前端开发 安全 Java
Spring Boot 便利店销售系统项目分包设计解析
本文深入解析了基于Spring Boot的便利店销售系统分包设计,通过清晰的分层架构(表现层、业务逻辑层、数据访问层等)和模块化设计,提升了代码的可维护性、复用性和扩展性。具体分包结构包括`controller`、`service`、`repository`、`entity`、`dto`、`config`和`util`等模块,职责分明,便于团队协作与功能迭代。该设计为复杂企业级应用开发提供了实践参考。
111 0
|
14天前
|
网络协议 Java
在SpringBoot项目中使用Netty实现远程调用
本文介绍了使用Netty解决网络连接性能问题的方法,重点讲解了Netty的NIO特性及其在SpringBoot中的应用。Netty作为高效的NIO框架,支持非阻塞IO,能通过单线程管理多个客户端连接,简化TCP/UDP套接字服务器开发。文章详细展示了Netty在SpringBoot中实现远程调用的过程,包括服务端与客户端代码实现、依赖配置及测试验证。通过示例代码,如`NettyServer`、`NettyClientUtil`等,清晰说明了Netty的工作原理和实际应用,解决了半包等问题,并提供了完整的测试结果。
|
2月前
|
SQL 前端开发 Java
深入理解 Spring Boot 项目中的分页与排序功能
本文深入讲解了在Spring Boot项目中实现分页与排序功能的完整流程。通过实际案例,从Service层接口设计到Mapper层SQL动态生成,再到Controller层参数传递及前端页面交互,逐一剖析每个环节的核心逻辑与实现细节。重点包括分页计算、排序参数校验、动态SQL处理以及前后端联动,确保数据展示高效且安全。适合希望掌握分页排序实现原理的开发者参考学习。
123 4
|
2月前
|
SQL 前端开发 Java
深入分析 Spring Boot 项目开发中的常见问题与解决方案
本文深入分析了Spring Boot项目开发中的常见问题与解决方案,涵盖视图路径冲突(Circular View Path)、ECharts图表数据异常及SQL唯一约束冲突等典型场景。通过实际案例剖析问题成因,并提供具体解决方法,如优化视图解析器配置、改进数据查询逻辑以及合理使用外键约束。同时复习了Spring MVC视图解析原理与数据库完整性知识,强调细节处理和数据验证的重要性,为开发者提供实用参考。
113 0
|
2月前
|
安全 前端开发 Java
Spring Boot 项目中触发 Circular View Path 错误的原理与解决方案
在Spring Boot开发中,**Circular View Path**错误常因视图解析与Controller路径重名引发。当视图名称(如`login`)与请求路径相同,Spring MVC无法区分,导致无限循环调用。解决方法包括:1) 明确指定视图路径,避免重名;2) 将视图文件移至子目录;3) 确保Spring Security配置与Controller路径一致。通过合理设定视图和路径,可有效避免该问题,确保系统稳定运行。
136 0
|
3月前
|
前端开发 Java 数据库
微服务——SpringBoot使用归纳——Spring Boot集成Thymeleaf模板引擎——Thymeleaf 介绍
本课介绍Spring Boot集成Thymeleaf模板引擎。Thymeleaf是一款现代服务器端Java模板引擎,支持Web和独立环境,可实现自然模板开发,便于团队协作。与传统JSP不同,Thymeleaf模板可以直接在浏览器中打开,方便前端人员查看静态原型。通过在HTML标签中添加扩展属性(如`th:text`),Thymeleaf能够在服务运行时动态替换内容,展示数据库中的数据,同时兼容静态页面展示,为开发带来灵活性和便利性。
102 0
|
3月前
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于 xml 的整合
本教程介绍了基于XML的MyBatis整合方式。首先在`application.yml`中配置XML路径,如`classpath:mapper/*.xml`,然后创建`UserMapper.xml`文件定义SQL映射,包括`resultMap`和查询语句。通过设置`namespace`关联Mapper接口,实现如`getUserByName`的方法。Controller层调用Service完成测试,访问`/getUserByName/{name}`即可返回用户信息。为简化Mapper扫描,推荐在Spring Boot启动类用`@MapperScan`注解指定包路径避免逐个添加`@Mapper`
111 0
|
3月前
|
Java 测试技术 微服务
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——少量配置信息的情形
本课主要讲解Spring Boot项目中的属性配置方法。在实际开发中,测试与生产环境的配置往往不同,因此不应将配置信息硬编码在代码中,而应使用配置文件管理,如`application.yml`。例如,在微服务架构下,可通过配置文件设置调用其他服务的地址(如订单服务端口8002),并利用`@Value`注解在代码中读取这些配置值。这种方式使项目更灵活,便于后续修改和维护。
51 0
|
3月前
|
SQL Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— application.yml 中对日志的配置
在 Spring Boot 项目中,`application.yml` 文件用于配置日志。通过 `logging.config` 指定日志配置文件(如 `logback.xml`),实现日志详细设置。`logging.level` 可定义包的日志输出级别,例如将 `com.itcodai.course03.dao` 包设为 `trace` 级别,便于开发时查看 SQL 操作。日志级别从高到低为 ERROR、WARN、INFO、DEBUG,生产环境建议调整为较高级别以减少日志量。本课程采用 yml 格式,因其层次清晰,但需注意格式要求。
216 0
|
3月前
|
缓存 NoSQL Java
基于SpringBoot的Redis开发实战教程
Redis在Spring Boot中的应用非常广泛,其高性能和灵活性使其成为构建高效分布式系统的理想选择。通过深入理解本文的内容,您可以更好地利用Redis的特性,为应用程序提供高效的缓存和消息处理能力。
240 79