day04-SpringBootWeb入门

一、SpringBootWeb快速入门

1 需求

需求:基于 SpringBoot 的方式开发一个 web 应用,浏览器发起请求 /hello后,给浏览器返回字符串“Hello World ~”。
在这里插入图片描述

2 开发步骤

第1步:创建 SpringBoot 工程项目
第2步:定义 HelloController 类,添加方法 hello,并添加注解
第3步:测试运行
在这里插入图片描述

二、HTTP协议

1 HTTP-概述

概念:Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。
在这里插入图片描述

特点:

  1. 基于TCP协议:面向连接,安全
  2. 基于请求-响应模型的:一次请求对应一次响应
  3. HTTP协议是无状态的协议:对于事务处理没有记忆能力。每次请求-响应都是独立的。
    1️⃣缺点:多次请求间不能共享数据。
    2️⃣优点:速度快

2 HTTP-请求协议

在这里插入图片描述

在这里插入图片描述

GET请求和POST请求的区别:
在这里插入图片描述

3 HTTP-响应协议

在这里插入图片描述
在这里插入图片描述

3.1 响应状态码

在这里插入图片描述

3.2 常见的响应状态码

状态码英文描述解释
200OK客户端请求成功,即处理成功,这是我们最想看到的状态码
302Found指示所请求的资源已移动到由Location响应头给定的 URL,浏览器会自动重新访问到这个页面
304Not Modified告诉客户端,你请求的资源至上次取得后,服务端并未更改,你直接用你本地缓存吧。隐式重定向
400Bad Request客户端请求有语法错误,不能被服务器所理解
403Forbidden服务器收到请求,但是拒绝提供服务,比如:没有权限访问相关资源
404Not Found请求资源不存在,一般是URL输入有误,或者网站资源被删除了
405Method Not Allowed请求方式有误,比如应该用GET请求方式的资源,用了POST
428Precondition Required服务器要求有条件的请求,告诉客户端要想访问该资源,必须携带特定的请求头
429Too Many Requests指示用户在给定时间内发送了太多请求(“限速”),配合 Retry-After(多长时间后可以请求)响应头一起使用
431 Request Header Fields Too Large请求头太大,服务器不愿意处理请求,因为它的头部字段太大。请求可以在减少请求头域的大小后重新提交。
500Internal Server Error服务器发生不可预期的错误。服务器出异常了,赶紧看日志去吧
503Service Unavailable服务器尚未准备好处理请求,服务器刚刚启动,还未初始化好

状态码大全:https://cloud.tencent.com/developer/chapter/13553

三、WEB服务器-Tomcat

1 简介

1.1 Web服务器

Web 服务器是一个软件程序,对 HTTP 协议的操作进行封装,使得程序员不必直接对协议进行操作,让 Web 开发更加便捷。主要功能是 “提供网上信息浏览服务” 。

Web服务器软件使用步骤

  1. 准备静态资源
  2. 下载安装 Web 服务器软件
  3. 将静态资源部署到 Web 服务器上
  4. 启动Web服务器使用浏览器访问对应的资源

1.2 Tomcat

概念: Tomcat 是 Apache 软件基金会一个核心项目,是一个开源免费的轻量级Web 服务器,支持 Servlet/JSP 少量 JavaEE 规范。

JavaEE:Java Enterprise Edition,Java 企业版。指 Java 企业级开发的技术规范总和。包含13项技术规范:JDBC、JNDI、EJB、RMI、JSP、Servlet、XML、JMS、Java IDL、JTS、JTA、JavaMail、JAF

Tomcat 也被称为 Web容器、Servlet 容器。Servlet 程序需要依赖于 Tomcat 才能运行

官网:https://tomcat.apache.org/

2 基本使用

2.1 下载

直接从官方网站下载:https://tomcat.apache.org/download-90.cgi

Tomcat软件类型说明:

  1. tar.gz 文件,是 linux 和 mac 操作系统下的压缩版本
  2. zip文件,是 window 操作系统下压缩版本(我们选择zip文件)

2.2 安装与卸载

安装: Tomcat是绿色版,直接解压即安装

在这里插入图片描述

bin:目录下有两类文件,一种是以 .bat 结尾的,是 Windows 系统的可执行文件,一种是以 .sh 结尾的,是 Linux 系统的可执行文件。

卸载:卸载比较简单,可以直接删除目录即可

2.3 启动与关闭

启动 Tomcat
双击 tomcat 解压目录 /bin/startup.bat 文件即可启动 tomcat

注意: tomcat 服务器启动后,黑窗口不会关闭,只要黑窗口不关闭,就证明 tomcat 服务器正在运行。

注意事项 :Tomcat 启动的过程中,遇到控制台有 中文乱码 时,可以通常修改 conf/logging.prooperties 文件解决
在这里插入图片描述

关闭:关闭有三种方式

  1. 强制关闭:直接x掉Tomcat窗口(不建议)
  2. 正常关闭:bin\shutdown.bat
  3. 正常关闭:在Tomcat启动窗口中按下 Ctrl+C

2.4 常见问题

问题1:Tomcat 启动时,窗口一闪而过
检查 JAVA_HOME 环境变量是否正确配置

问题2:端口号冲突
发生问题的原因:Tomcat 使用的端口被占用了。
解决方案:换 Tomcat 端口号
要想修改 Tomcat 启动的端口号,需要修改 conf/server.xml 文件
在这里插入图片描述
在这里插入图片描述

2.5 Tomcat 部署项目

将项目放置到 webapps 目录下, 即部署完成

3 入门程序解析

3.1 Spring官方骨架

之前我们创建的 SpringBoot 入门案例,是基于 Spring 官方提供的骨架实现的。

Spring 官方骨架,可以理解为 Spring 官方为程序员提供一个搭建项目的模板。

官方骨架页面 : https://start.spring.io/

3.2 起步依赖

spring-boot-starter-xxx 这类的依赖,都为起步依赖。

在这里插入图片描述
起步依赖:

  1. spring-boot-starter-web:包含了web应用开发所需要的常见依赖。
  2. spring-boot-starter-test:包含了单元测试所需要的常见依赖。
  3. 官方提供的starter:https://docs.spring.io/spring-boot/docs/2.7.4/reference/htmlsingle/#using.build-systems.starters

3.3 SpringBoot 父工程

在我们之前开发的 SpringBoot 入门案例中,我们通过 maven 引入的依赖,是没有指定具体的依赖版本号的。

为什么没有指定版本号,可以正常使用呢?
因为每一个 SpringBoot 工程,都有一个父工程。依赖的版本号,在父工程中统一管理。在这里插入图片描述

3.4 内嵌 Tomcat

在这里插入图片描述

当我们运行 SpringBoot 的引导类时(运行main方法),就会看到命令行输出的日志,其中占用 8080 端口的就是 Tomcat。在这里插入图片描述

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

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

相关文章

【Python】3. 基础语法(2)

顺序语句 默认情况下, Python 的代码执行顺序是按照从上到下的顺序, 依次执行的. print("1") print("2") print("3")执行结果一定为 “123”, 而不会出现 “321” 或者 “132” 等. 这种按照顺序执行的代码, 我们称为 顺序语句. 这个顺序是很关…

redis主从架构

Redis主从架构 单节点Redis的并发能力是有上限的,要进一步提高redis的并发能力,就需要搭建主从集群,实现读写分离。 修改每个文件夹内的配置文件,将端口分别修改为7001、7002、7003,将rdb文件保存位置都修改为自己所在…

嵌入式学习记录——线程

线程基本概念: 线程:线程是一个轻量级的进程,位于进程空间内部,一个进程中可以创建多个线程 1.线程创建: 线程独占栈空间,文本段、数据段和堆区与进程共享 2.线程调度: 与进程调度是一样的 宏观并行,微观串行 3.线程消亡: 与进程消亡是一样的 4.进程和线程…

StreamTask数据流:StreamTask能力概述、Flink处理网络数据逻辑

文章目录 一. StreamTask核心组件与能力二. OneInputStreamTask接入网络数据并处理三. 处理数据1. StreamElement类别2. 业务数据处理逻辑 四. 小结 先来看数据是如何经过网络写入下游Task节点并通过算子进行处理的,这里以OneInputStreamTask为例进行说明。 一. St…

go 程序被意外kill后出现僵尸进程解决方案

go 管理自身子进程(防止僵尸进程出现) 写这篇文章是因为最近有同事竟然会知道异步启动子进程,不会关闭,最后导致导致僵尸进程出现,而且由于子进程会随着业务的使用越开越多,主进程一旦被kill掉就会不得不手动一个一个kill。 大概…

AWS虚拟机迁移到Azure上的实战操作

将一台虚拟机从AWS迁移到Azure涉及几个关键步骤,包括准备工作、虚拟机的备份与导出、格式转换、上传到Azure以及在Azure上创建新的虚拟机实例。以下是详细的步骤和示例: 一、 准备阶段 Azure和AWS的免费账户请参考下面的链接: 想学习云计算么?教你如何免费白嫖微软和AWS…

004-CSS-左右经典布局

左右经典布局 方案一:弹性盒子布局方案二:绝对定位 padding方案三:绝对定位 margin方案四:行内块布局 calc方案五:浮动 BFC 方案一:弹性盒子布局 💡 Tips:左侧子盒子宽度固定&a…

Python并发编程:协程-greenlet模块

一 greenlet模块 如果我们在单个线程内有20个任务,要想实现在多个任务之间切换,使用yield生成器的方式过于麻烦(需要先得到初始化一次的生成器,然后再调用send。。。非常麻烦),而使用greenlet模块可以非常简…

鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:多态样式)

设置组件不同状态下的样式。 说明: 从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 从API Version 11开始支持另一种写法attributeModifier,可根据开发者需要动态设置属性。 stateStyles stateStyl…

16:00面试,16:06就出来了,问的问题过于变态了。。。

从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到2月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%…

微信报修小程序源码

源码获取方式: 1、搜一搜 万能工具箱合集 然后点击资料库,即可获取资源 一、先看Demo(已更新至4.0.0) 想看界面图片的,辛苦你爬一下楼,点击下方查看资源,进入官方demo 二、功能介绍 1、当前版…

什么是AJAX?它的运用场景有哪些?

文章目录 前言一、什么是AJAX二、AJAX原理是什么三、为什么需要AJAX四、AJAX的使用五、AJAX的应用场景 前言 AJAX 即 Asynchronous Javascript And XML(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。 AJAX 是一种用于创…

LLM(十一)| Claude 3:Anthropic发布最新超越GPT-4大模型

2024年3月4日,Anthropic发布最新多模态大模型:Claude 3系列,共有Haiku、Sonnet和Opus三个版本。 Opus在研究生水平专家推理、基础数学、本科水平专家知识、代码等10个维度,超过OpenAI的GPT-4。 Haiku模型更注重效率,能…

正则表达式判断IP地址(python)

正则表达式判断IP地址(python) 分情况: 1位数:0 | 1-9 2位数:[1-9][0-9] 3位数: 1开头:1[0-9]{2} 2开头:2[0-4][0-9] | 25[0-5] 1、2位数:0 | [1-9][0-9]? 3位数&#x…

稀碎从零算法笔记Day7-LeetCode:罗马数字转整数

题型:字符串转化、找规律 链接:13. 罗马数字转整数 - 力扣(LeetCode) 来源:LeetCode 题目描述 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 …

SpringCloud远程调用Feign

一,什么是Feign Feign是一个声明式的http客户端底层还是基于HTTP实现,是SpringCloud的核心组件之一,实现了微服务之间的远程调用。 二,Feign的使用步骤 1,引入依赖 引入Spring Cloud start Feign的依赖 &#xff0c…

关于我使用numpy.random.choice()遇到坑这件事

做仿真时经常使用到随机数,下面是一个场景:使用np.random.choice([0,1],p[0.5,0.5],size1)去进行随机的二选一,假设需要随机选择1000次,为了保证结果的稳健性,对前述过程重复50次,为了保证可复现性&#xf…

collection及迭代遍历

Collection是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的。 package myCollection;import java.util.ArrayList; import java.util.Collection;public class A01CollectionDemo1 {public static void main(String[] args) {//collection是一个接口…

《PyTorch深度学习实践》第十一讲卷积神经网络进阶

一、 1、卷积核超参数选择困难,自动找到卷积的最佳组合。 2、1x1卷积核,不同通道的信息融合。使用1x1卷积核虽然参数量增加了,但是能够显著的降低计算量(operations) 3、Inception Moudel由4个分支组成,要分清哪些是在Init里定义…

基于springboot+vue的精简博客系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…