你好,我是Qiuner. 为记录自己编程学习过程和帮助别人少走弯路而写博客
如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 😄 (^ ~ ^)
想看更多 那就点个关注吧 我会尽力带来有趣的内容
CSDN 图片导入做的不是很好,因此如果有没有出现的图片请去这里
掘金的文档写作体验比CSDN好多了。。。。里面好像也有不少大佬
快速入门Web开发(中)后端开发(有重点)
为什么你能通过一小段代码来访问网页?(重点)
要明白这件事,首先要知道我们是如何访问网站的
访问网页的本质涉及多个技术层面,从用户输入网址到最终在浏览器上看到页面的过程包含了多个步骤:
- 域名解析:当你在浏览器中输入一个网址(URL),比如
http://www.example.com
,浏览器首先需要将这个域名解析成对应的 IP 地址。这个过程通过域名系统(DNS)完成,将易于记忆的域名映射到实际的服务器 IP 地址。(本地) - 发起连接:一旦浏览器获得了服务器的 IP 地址,它就会通过网络协议(通常是 HTTP 或 HTTPS)与服务器建立连接。这个过程涉及多个网络层的交互,包括 TCP/IP 协议等。(网络通信)
- 发送请求:浏览器发送一个 HTTP 请求给服务器,这个请求包含了请求的类型(GET、POST 等)、路径、头部信息(例如浏览器类型)、可能的请求体(对于 POST 请求)等。(网络通信)
- 服务器处理:服务器接收到请求后,根据请求的路径以及其他信息,决定要执行哪些操作。这通常涉及到服务器端的应用程序,比如一个 Web 应用程序。在以上的图片中,就是 Spring Boot 中的控制器方法。(服务器本地)
- 生成响应:服务器处理请求后,会生成一个 HTTP 响应。这个响应包括了响应的状态码(例如 200 OK、404 Not Found)、响应头部(例如内容类型),以及响应体(实际的数据内容)。(服务器本地)
- 传输响应:服务器将生成的 HTTP 响应通过网络传输回浏览器。(网络通信)
- 浏览器处理:浏览器接收到响应后,会根据响应的内容类型(例如 HTML、CSS、JavaScript 等)进行处理。浏览器会解析 HTML,构建 DOM(文档对象模型),加载和解析 CSS 样式,执行 JavaScript 等操作。(本地)
- 渲染页面:浏览器根据 DOM 结构和 CSS 样式对页面进行渲染,最终在浏览器窗口中呈现出用户可见的页面。(本地)
当你启动 Spring Boot 项目并且访问 http://localhost:8080
或其他定义的路径时,Spring Boot 内置的 Web 服务器( Tomcat 或其他容器)会拦截这些请求,并将请求映射到相应的控制器方法。控制器方法执行完成后,返回的内容会被直接写入 HTTP 响应,然后返回给浏览器进行显示。
后端工具
Maven
- 依赖管理:因为要导入的jar包很多,所以使用Maven来快捷、方便的进行导包
- 统一的结构:idea和eclipse等开发软件生成的项目结构不一样,使用maven可以直接导入
- 快速的完成以上功能
https://maven.apache.org/
maven的架构
- 本地没有jar包的情况下,看有无链接私服,有则去私服找,没有就去中央找。私服本身没有,则私服去中央找
- 其中bing目录存放可执行文件
- conf存放maven配置文件
- lib存放maven依赖的jar包资源
步骤二
- conf中settings的第五十三行代码复制下,并填上maven仓库的地址(自定义)
步骤三
<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>
- 通过mvn -v校验是否成功。成功标志为出现版本号
配置maven
- 将maven使用jdk和编译器使用的设置成相同
- 在idea2022中直接创建普通的项目,选择java中的maven即可
Maven项目导入
- 调出maven
- 点击加号即可
添加Maven依赖
<!--添加依赖--> <dependencies> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> </dependencies>
- :这个标签是pom.xml文件的根标签,用于包含所有的依赖项。
- :这个标签用于描述一个具体的依赖项。
- :这个标签指定了依赖项的组织或公司的唯一标识符。在这个例子中,依赖项的groupId是ch.qos.logback,表示这个依赖项是由logback项目组提供的。
- :这个标签指定了依赖项的名称或标识符。在这个例子中,依赖项的artifactId是logback-classic,表示这个依赖项是logback日志框架的经典版本。
- :这个标签指定了依赖项的版本号。在这个例子中,依赖项的版本号是1.2.3,表示使用logback-classic的1.2.3版本。
什么是依赖
依赖就好比是一个软件模块需要借助其他模块或组件才能正常工作。类比一下,你可以把依赖想象成一个人需要使用其他人的工具才能完成任务。比如,你要修理自行车,但是你需要用到一个扳手,而你自己没有。这时,你就需要依赖别人借给你一个扳手才能完成修理任务。
在软件开发中,也是类似的情况。一个软件模块可能需要使用其他模块提供的功能,比如某个库或框架。这样,它就需要在项目中引入这个库或框架的代码,以便能够调用它提供的功能。为了方便管理这些依赖关系,开发人员通常会使用依赖管理工具。这个工具会帮助自动下载和引入所需的库、框架或其他依赖项,确保项目能够正常构建和运行。
- 点击重写加载后
在maven页面可以看到依赖是否生效
依赖与jar包
依赖与jar包作用是一样的,但是依赖更容易维护与直接修改
依赖特性
- 运行后面的依赖,前面的依赖也会执行
- 在同一套生命周期中,运行后面阶段,前面阶段都会运行
- maven所有操作由插件执行
Tomcat
- 一个web服务器
- 默认端口号为8080
postman
想要发出post请求得自己编写程序,可以用postman来代替
SpringBoot初体验
package com.example.springboot_one.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; // 请求处理类 @RestController public class HelloController { @RequestMapping("/hello") public String hello(){ System.out.printf("hello"); return "hello"; } }
- 运行SpringbootOneApplication这个文件
- Tomcat又称servlet容器
- BS架构体验一般指对宽带需求大,现在已经不是问题
- CS架构虽然可以在本地处理一些数据,但不同平台要开发不同的版本
http协议
- 请求头和请求体之间的空行是必须的
请求
路径由
变成
- get请求的参数就在这里面了(通过?来实现),而post请求的参数不在
响应
- 重定向指的是原来要访问的资源被转移到了另一台服务器或者本服务器的另一个位置了。这时候服务器会放回一个3开头的状态码和被转移后资源的位置,受到返回的浏览器会自动找这个资源
状态码大类
状态码分类 | 说明 |
1xx | 响应中——临时状态码,表示请求已经接受,告诉客户端应该继续请求或者如果它已经完成则忽略它 |
2xx | 成功——表示请求已经被成功接收,处理已完成 |
3xx | 重定向——重定向到其它地方:它让客户端再发起一个请求以完成整个处理。 |
4xx | 客户端错误——处理发生错误,责任在客户端,如:客户端的请求一个不存在的资源,客户端未被授权,禁止访问等 |
5xx | 服务器端错误——处理发生错误,责任在服务端,如:服务端抛出异常,路由出错,HTTP版本不支持等 |
常见的响应状态码
状态码 | 英文描述 | 解释 |
200 | OK |
客户端请求成功,即处理成功,这是我们最想看到的状态码 |
302 | Found |
指示所请求的资源已移动到由Location 响应头给定的 URL,浏览器会自动重新访问到这个页面 |
304 | Not Modified |
告诉客户端,你请求的资源至上次取得后,服务端并未更改,你直接用你本地缓存吧。隐式重定向 |
400 | Bad Request |
客户端请求有语法错误,不能被服务器所理解 |
403 | Forbidden |
服务器收到请求,但是拒绝提供服务,比如:没有权限访问相关资源 |
404 | Not Found |
请求资源不存在,一般是URL输入有误,或者网站资源被删除了 |
405 | Method Not Allowed |
请求方式有误,比如应该用GET请求方式的资源,用了POST |
428 | Precondition Required |
服务器要求有条件的请求,告诉客户端要想访问该资源,必须携带特定的请求头 |
429 | Too Many Requests |
指示用户在给定时间内发送了太多请求(“限速”),配合 Retry-After(多长时间后可以请求)响应头一起使用 |
431 | Request Header Fields Too Large |
请求头太大,服务器不愿意处理请求,因为它的头部字段太大。请求可以在减少请求头域的大小后重新提交。 |
500 | Internal Server Error |
服务器发生不可预期的错误。服务器出异常了,赶紧看日志去吧 |
503 | Service Unavailable |
服务器尚未准备好处理请求,服务器刚刚启动,还未初始化好 |
状态码大全:https://cloud.tencent.com/developer/chapter/13553
SpringBoot
HttpServletRequest对象
HttpServletRequest
是Java Servlet API中的一个接口,用于表示客户端的HTTP请求。它提供了许多方法来获取关于请求的信息,如请求的URL、参数、头部信息等。通过HttpServletRequest
,可以从客户端接收数据并对请求进行处理。
HttpServletRequest
对象提供了以下方法来获取请求的各种信息:
- 请求行信息:如请求的URL、请求的方法(GET、POST等)、HTTP协议版本等。
- 请求头信息:如User-Agent、Referer、Accept-Language等。
- 请求参数:可以通过
getParameter()
方法来获取请求的参数,如表单提交的参数、URL中的查询参数等。 - 请求体信息:对于POST请求,请求体中可能包含请求的实体内容,可以通过
getInputStream()
或getReader()
方法来获取请求体的内容。
通过HttpServletRequest
对象,开发者可以获取到客户端发送过来的各种信息,并根据这些信息进行相应的处理和响应。
接收参数
简单参数
原始方法
@RequestMapping("/simpleParam") public String simpleParam(HttpServletRequest request) { String name = request.getParameter("name"); String ageStr = request.getParameter("age"); /* getParameter()是HttpServletRequest接口中的一个方法,用于获取HTTP请求中的参数值。 它接收一个String类型的参数名称,并返回对应参数名称的值。 getParameter()方法会根据参数名称在请求中查找对应的值,并将其作为String类型返回。 如果请求中不存在该参数或参数值为空,则getParameter()方法返回null。 需要注意的是,getParameter()方法只能获取到请求中的查询参数或表单提交的参数。 对于其他类型的请求体,如JSON或XML数据,需要使用其他方法来获取请求体中的数据。*/ int age= Integer.parseInt(ageStr); System.out.printf(name+":"+age); return "OK"; }
运行结果
SptingBoot版本
@RequestMapping("/simpleParam") public String simpleParam(String name,int age) {//此处也可以改为Integer System.out.printf(name+":"+age); return "OK"; }
- 结果一样
以上都是get请求,如何使用post请求呢?
- 参数名不一致时候会放回null
参数名映射
实体参数映射(设置网站内容页)
复杂实体
- 通过创建两个类来满足需要。一个类包含另一个
数组集合参数
- 只要数组名相同
-
- 默认封装成数组,需要加一下符号
日期参数
json参数
- json格式数据使用不了get
- 需要做到key与实体对象的属性名相同
路径参数
- @PathVariable是Spring框架中的一个注解,用于将URL中的参数绑定到方法的参数上。
可以使用@PathVariable注解来获取URL中的动态参数。这些参数可以是在URL路径中的一部分,用花括号{}括起来,并通过@PathVariable注解来绑定到方法的参数上。 - 使用这个注解后,可以使得访问路径是变化的。如 localhost:8080/path/2和localhost:8080/10
快速入门Web开发(中)后端开发(有重点)(2):https://developer.aliyun.com/article/1548585