快速入门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

目录
相关文章
|
17天前
|
存储 缓存 负载均衡
后端开发中的性能优化策略
本文将探讨几种常见的后端性能优化策略,包括代码层面的优化、数据库查询优化、缓存机制的应用以及负载均衡的实现。通过这些方法,开发者可以显著提升系统的响应速度和处理能力,从而提供更好的用户体验。
44 4
|
8天前
|
机器学习/深度学习 前端开发 算法
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
36 3
|
22天前
|
运维 监控 Java
后端开发中的微服务架构实践与挑战####
在数字化转型加速的今天,微服务架构凭借其高度的灵活性、可扩展性和可维护性,成为众多企业后端系统构建的首选方案。本文深入探讨了微服务架构的核心概念、实施步骤、关键技术考量以及面临的主要挑战,旨在为开发者提供一份实用的实践指南。通过案例分析,揭示微服务在实际项目中的应用效果,并针对常见问题提出解决策略,帮助读者更好地理解和应对微服务架构带来的复杂性与机遇。 ####
|
20天前
|
消息中间件 运维 安全
后端开发中的微服务架构实践与挑战####
在数字化转型的浪潮中,微服务架构凭借其高度的灵活性和可扩展性,成为众多企业重构后端系统的首选方案。本文将深入探讨微服务的核心概念、设计原则、关键技术选型及在实际项目实施过程中面临的挑战与解决方案,旨在为开发者提供一套实用的微服务架构落地指南。我们将从理论框架出发,逐步深入至技术细节,最终通过案例分析,揭示如何在复杂业务场景下有效应用微服务,提升系统的整体性能与稳定性。 ####
33 1
|
20天前
|
前端开发 安全 JavaScript
2025年,Web3开发学习路线全指南
本文提供了一条针对Dapp应用开发的学习路线,涵盖了Web3领域的重要技术栈,如区块链基础、以太坊技术、Solidity编程、智能合约开发及安全、web3.js和ethers.js库的使用、Truffle框架等。文章首先分析了国内区块链企业的技术需求,随后详细介绍了每个技术点的学习资源和方法,旨在帮助初学者系统地掌握Dapp开发所需的知识和技能。
2025年,Web3开发学习路线全指南
|
22天前
|
消息中间件 运维 API
后端开发中的微服务架构实践####
本文深入探讨了微服务架构在后端开发中的应用,从其定义、优势到实际案例分析,全面解析了如何有效实施微服务以提升系统的可维护性、扩展性和灵活性。不同于传统摘要的概述性质,本摘要旨在激发读者对微服务架构深度探索的兴趣,通过提出问题而非直接给出答案的方式,引导读者深入
40 1
|
23天前
|
负载均衡 监控 API
后端开发中的微服务架构实践与挑战
本文深入探讨了微服务架构在后端开发中的应用,分析了其优势和面临的挑战,并通过案例分析提出了相应的解决策略。微服务架构以其高度的可扩展性和灵活性,成为现代软件开发的重要趋势。然而,它同时也带来了服务间通信、数据一致性等问题。通过实际案例的剖析,本文旨在为开发者提供有效的微服务实施指导,以优化系统性能和用户体验。
|
23天前
|
存储 前端开发 Java
深入理解后端开发:从基础到高级
本文将带你走进后端开发的神秘世界,从基础概念到高级应用,一步步揭示后端开发的全貌。我们将通过代码示例,让你更好地理解和掌握后端开发的核心技能。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供有价值的信息和启示。
|
26天前
|
存储 缓存 监控
后端开发中的缓存机制:深度解析与最佳实践####
本文深入探讨了后端开发中不可或缺的一环——缓存机制,旨在为读者提供一份详尽的指南,涵盖缓存的基本原理、常见类型(如内存缓存、磁盘缓存、分布式缓存等)、主流技术选型(Redis、Memcached、Ehcache等),以及在实际项目中如何根据业务需求设计并实施高效的缓存策略。不同于常规摘要的概述性质,本摘要直接点明文章将围绕“深度解析”与“最佳实践”两大核心展开,既适合初学者构建基础认知框架,也为有经验的开发者提供优化建议与实战技巧。 ####
|
29天前
|
存储 JavaScript 前端开发
深入浅出Node.js后端开发
在数字化时代的浪潮中,后端开发作为连接用户与数据的桥梁,扮演着至关重要的角色。本文将以Node.js为例,深入探讨其背后的哲学思想、核心特性以及在实际项目中的应用,旨在为读者揭示Node.js如何优雅地处理高并发请求,并通过实践案例加深理解。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的视角和思考。

热门文章

最新文章