快速入门Web开发(中)后端开发(有重点)(1)

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 快速入门Web开发(中)后端开发(有重点)(1)

你好,我是Qiuner. 为记录自己编程学习过程和帮助别人少走弯路而写博客

如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 😄 (^ ~ ^)

想看更多 那就点个关注吧 我会尽力带来有趣的内容

CSDN 图片导入做的不是很好,因此如果有没有出现的图片请去这里

掘金的文档写作体验比CSDN好多了。。。。里面好像也有不少大佬

快速入门Web开发(中)后端开发(有重点)

为什么你能通过一小段代码来访问网页?(重点)

要明白这件事,首先要知道我们是如何访问网站的

访问网页的本质涉及多个技术层面,从用户输入网址到最终在浏览器上看到页面的过程包含了多个步骤:

  1. 域名解析:当你在浏览器中输入一个网址(URL),比如 http://www.example.com,浏览器首先需要将这个域名解析成对应的 IP 地址。这个过程通过域名系统(DNS)完成,将易于记忆的域名映射到实际的服务器 IP 地址。(本地)
  2. 发起连接:一旦浏览器获得了服务器的 IP 地址,它就会通过网络协议(通常是 HTTP 或 HTTPS)与服务器建立连接。这个过程涉及多个网络层的交互,包括 TCP/IP 协议等。(网络通信)
  3. 发送请求:浏览器发送一个 HTTP 请求给服务器,这个请求包含了请求的类型(GET、POST 等)、路径、头部信息(例如浏览器类型)、可能的请求体(对于 POST 请求)等。(网络通信)
  4. 服务器处理:服务器接收到请求后,根据请求的路径以及其他信息,决定要执行哪些操作。这通常涉及到服务器端的应用程序,比如一个 Web 应用程序。在以上的图片中,就是 Spring Boot 中的控制器方法。(服务器本地)
  5. 生成响应:服务器处理请求后,会生成一个 HTTP 响应。这个响应包括了响应的状态码(例如 200 OK、404 Not Found)、响应头部(例如内容类型),以及响应体(实际的数据内容)。(服务器本地)
  6. 传输响应:服务器将生成的 HTTP 响应通过网络传输回浏览器。(网络通信)
  7. 浏览器处理:浏览器接收到响应后,会根据响应的内容类型(例如 HTML、CSS、JavaScript 等)进行处理。浏览器会解析 HTML,构建 DOM(文档对象模型),加载和解析 CSS 样式,执行 JavaScript 等操作。(本地)
  8. 渲染页面:浏览器根据 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服务器

image.png

  • 默认端口号为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对象提供了以下方法来获取请求的各种信息:

  1. 请求行信息:如请求的URL、请求的方法(GET、POST等)、HTTP协议版本等。
  2. 请求头信息:如User-Agent、Referer、Accept-Language等。
  3. 请求参数:可以通过getParameter()方法来获取请求的参数,如表单提交的参数、URL中的查询参数等。
  4. 请求体信息:对于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

目录
相关文章
|
6天前
|
存储 SQL API
探索后端开发:构建高效API与数据库交互
【10月更文挑战第36天】在数字化时代,后端开发是连接用户界面和数据存储的桥梁。本文深入探讨如何设计高效的API以及如何实现API与数据库之间的无缝交互,确保数据的一致性和高性能。我们将从基础概念出发,逐步深入到实战技巧,为读者提供一个清晰的后端开发路线图。
|
5天前
|
JSON 前端开发 API
后端开发中的API设计与文档编写指南####
本文探讨了后端开发中API设计的重要性,并详细阐述了如何编写高效、可维护的API接口。通过实际案例分析,文章强调了清晰的API设计对于前后端分离项目的关键作用,以及良好的文档习惯如何促进团队协作和提升开发效率。 ####
|
7天前
|
存储 SQL 数据库
深入浅出后端开发之数据库优化实战
【10月更文挑战第35天】在软件开发的世界里,数据库性能直接关系到应用的响应速度和用户体验。本文将带你了解如何通过合理的索引设计、查询优化以及恰当的数据存储策略来提升数据库性能。我们将一起探索这些技巧背后的原理,并通过实际案例感受优化带来的显著效果。
25 4
|
6天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
【10月更文挑战第36天】本文将引导您探索Node.js的世界,通过实际案例揭示其背后的原理和实践方法。从基础的安装到高级的异步处理,我们将一起构建一个简单的后端服务,并讨论如何优化性能。无论您是新手还是有经验的开发者,这篇文章都将为您提供新的视角和深入的理解。
|
7天前
|
监控 API 持续交付
后端开发中的微服务架构实践与挑战####
本文深入探讨了微服务架构在后端开发中的应用,分析了其优势、面临的挑战以及最佳实践策略。不同于传统的单体应用,微服务通过细粒度的服务划分促进了系统的可维护性、可扩展性和敏捷性。文章首先概述了微服务的核心概念及其与传统架构的区别,随后详细阐述了构建微服务时需考虑的关键技术要素,如服务发现、API网关、容器化部署及持续集成/持续部署(CI/CD)流程。此外,还讨论了微服务实施过程中常见的问题,如服务间通信复杂度增加、数据一致性保障等,并提供了相应的解决方案和优化建议。总之,本文旨在为开发者提供一份关于如何在现代后端系统中有效采用和优化微服务架构的实用指南。 ####
|
9天前
|
消息中间件 设计模式 运维
后端开发中的微服务架构实践与挑战####
本文深入探讨了微服务架构在现代后端开发中的应用,通过实际案例分析,揭示了其在提升系统灵活性、可扩展性及促进技术创新方面的显著优势。同时,文章也未回避微服务实施过程中面临的挑战,如服务间通信复杂性、数据一致性保障及部署运维难度增加等问题,并基于实践经验提出了一系列应对策略,为开发者在构建高效、稳定的微服务平台时提供有价值的参考。 ####
|
9天前
|
存储 关系型数据库 Java
探索后端开发:从基础到进阶
【10月更文挑战第33天】在这篇文章中,我们将深入探讨后端开发的各个方面,包括基本概念、关键技术和最佳实践。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供有价值的信息和启示。我们将通过代码示例来展示一些常见任务的实现方法,并分享一些实用的技巧和策略,帮助你提高后端开发的效率和质量。无论你是想学习新的编程语言还是想了解最新的后端技术趋势,这篇文章都会为你提供有益的指导和灵感。让我们一起开启后端开发的探索之旅吧!
|
5天前
|
缓存 前端开发 API
探索后端开发中的API设计原则
【10月更文挑战第37天】本文旨在引导读者理解API设计的核心理念,通过简明的语言和直观的示例,揭示如何构建高效、稳定且易于维护的后端接口。我们将深入浅出地探讨RESTful API的设计规范,并通过一个简易的代码样例,展示如何在实战中应用这些原则。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的参考和启示。
|
9天前
|
Web App开发 JavaScript 前端开发
探索后端开发:Node.js与Express的完美结合
【10月更文挑战第33天】本文将带领读者深入了解Node.js和Express的强强联手,通过实际案例揭示它们如何简化后端开发流程,提升应用性能。我们将一起探索这两个技术的核心概念、优势以及它们如何共同作用于现代Web开发中。准备好,让我们一起开启这场技术之旅!
25 0
|
9天前
|
存储 Java 关系型数据库
探索后端开发:从基础到进阶的旅程
【10月更文挑战第33天】在这篇文章中,我们将一起踏上一段激动人心的旅程,深入探索后端开发的奥秘。我们将从最基本的概念开始,逐步深入,直到能够理解并应用高级后端技术。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的见解和知识。让我们一起开始这段旅程吧!

热门文章

最新文章