Web入门

Spring

        官网:Spring | Home
        Spring是一个开源的Java企业级应用开发框架。Spring的主要目的是使Java EE(Java Platform, Enterprise Edition)开发更容易,并且通过提供一系列丰富的库和接口来促进良好编程实践,是当下最流行的java框架。
        时至今日,Spring已经形成了一种开发生态圈,Spring提供了若干个子项目,每个项目用于完成特定的功能。

        Spring提供了一系列与Spring框架相关的、用于构建企业级应用程序的开源项目集合。如Spring Framework、Spring Boot、Spring Data、Spring Cloud、Spring Security等......这些项目提供了从基础设施到业务逻辑处理、再到前端展示的全栈解决方案,被称为Spring全家桶。
        这些子项目都是基于Spring Framework,这是一个基础框架。但如果我们在项目中直接基于Spring框架进行项目的开发,又会存在配置繁琐、入门难度大等问题。因为推出了Spring Boot,基于Spring Boot我们可以快速开发Spring应用程序。因此Web需要从Spring Boot开始并贯穿始终。

SpringBootWeb

        Spring Boot Web 是 Spring Boot 框架中的一个重要模块,它提供了用于构建 Web 应用程序的核心功能和依赖项。

        我们从一个例子来引入:使用SpringBootWeb开发一个web应用,浏览器·发起请求/hello后,浏览器输出字符串“Hello World~”

一、创建springboot工程,并勾选web开发相关依赖

二、创建HelloController类,添加方法hello,并添加注解 

        在src-main-java-包名-java类名中,系统自动创建了一个类,我们称之为启动类,而在src-main-java-resources-application.properties目录下的文件为默认配置文件,我们目前还用不到,但可以先了解。

        在src-main-java-包名目录下直接创建java类文件或者包+类(命名时包名.类名即可,例:controller.HelloControl),并在该文件下编写对应程序

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController//从java类变为请求处理类
public class HelloControl {@RequestMapping("/hello")//指定当前方法处理/hello请求public String hello(){System.out.println("hello world!");return "hello world!";//返回给浏览器的值}
}

        回到系统自动创建的启动类并运行,我们可以看到

  .   ____          _            __ _ _/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/  ___)| |_)| | | | | || (_| |  ) ) ) )'  |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot ::                (v3.3.5)2024-11-10T00:01:03.520+08:00  INFO 9560 ......略
2024-11-10T00:01:04.247+08:00  INFO 9560 --- [myweb] [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port 8080 (http) with context path '/'
2024-11-10T00:01:04.003+08:00  INFO 9560 ......略......

        上方为spring的logo,下方未省略一行表示系统会自动占用8080端口,此时我们使用浏览器访问网址http://localhost:8080/hello即可看到浏览器输出的语句和idea控制台接收到的语句

HTTP协议

        我们不难发现,上文中的地址在地址框中为localhost:8080/hello,但复制下来后为http://localhost:8080/hello,前面自动补充了http://,补充的这部分正是是URL的协议部分。我们知道浏览器发送请求,服务器返回数据,而发送的请求和返回的数据需要以某种特定格式编写,而规定了这种格式的正是http协议。

概述

        HTTP(HyperText Transfer Protocol,超文本传输协议)是一种应用层协议。主要用于在Web浏览器和服务器之间传输数据。

特点:

  • 基于TCP协议:面向连接,确保了数据传输的可靠性和顺序。
  • 基于请求-响应模型:一次请求对应一次响应,简化了交互逻辑。
  • 是无状态的协议:即不保存用户会话信息,传输效率高,但多次请求之间无法共享数据。

请求协议

         我们以之前的网址为例,F12打开开发者工具,点击网络并刷新网页,即可看到数据请求与返回的数据,点击原始/View source即可查看原始数据:

GET /hello HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cache-Control: max-age=0
Connection: keep-alive
Host: localhost:8080
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0
sec-ch-ua: "Chromium";v="130", "Microsoft Edge";v="130", "Not?A_Brand";v="99"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"

        这个数据分为三个部分:请求行、请求头、请求体三部分。我们依次介绍:

        请求行:第一行为请求行 分别表示请求方式、请求路径、请求协议。这里get表示请求方式,/hello表示请求路径,HTTP/1.1表请求协议的版本,中间以空格分隔:

GET /hello HTTP/1.1

        请求头: 请求头包含了客户端(如浏览器)发送给服务器的各种信息,用于描述请求的细节。它是K-V的键值对,":"前为请求头的名字,后为对应的值,中间以":"分隔。

GET /index.html HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 27

以下为常见的请求头:(了解即可)

  • Host:请求的主机名,例如localhost:8080即本机的8080端口
  • User-Agent:标识发送请求的客户端类型,包括浏览器、操作系统等信息。服务器可以根据该信息为不同的客户端提供对应的响应。
  • Accept:表示浏览器能够接收的资源类型,如text/*表文本,image/*表图片,*/*表所有
  • Accept-Language:表浏览器偏好的语言,如中文、英文等。服务器据此返回不同语言的网页。
  • Accept-Encoding:指定客户端支持的压缩类型,如gzip、deflate等。服务器可以根据该信息对响应进行压缩,以减少传输数据量。
  • Content-Type:指示请求体的媒体类型,即发送的数据类型。常见的类型包括application/json(JSON数据格式)、application/x-www-form-urlencoded(表单数据格式)、multipart/form-data(文件上传格式)等。这有助于服务器正确解析和处理请求体中的数据。
  • Content-Length:表示请求体的长度(以字节为单位)。

        请求体:post请求特有的一个部分,存放请求参数,与请求体以空行分隔

GET:请求参数在请求行中,没有请求体。GET请求有大小限制。

POST:请求参数在请求体中,POST没有大小限制。

GET方法的数据直接在请求行中,在开发者工具-网络-右键单击数据-标头即可查看

 

POST方法的数据直接请求体中,在开发者工具-网络-右键单击数据-负载即可查看

响应协议

        其和请求协议的数据类似,也是由三个部分组成,分为响应行、响应头、响应体

        响应行:第一行为响应行 分别表示HTTP版本、状态码以及状态描述。

HTTP/1.1 200 OK
状态码含义
1XX响应中:临时状态码,表明请求已经接受,需要继续处理(较少使用)
2XX响应成功:请求已成功接收,处理已完成
3XX重定向:重新定向到其他地方,让客户端重新发起请求
4XX客户端错误:客户端的问题导致服务器无法处理请求
5XX服务端错误:服务端的问题导致服务器无法处理请求

 其中有三个状态码我们最常遇见,需掌握:

状态码英文描述含义
200OK请求成功
404Not Found资源不存在
500Internal Servel Error服务器错误

        响应头:包含关于响应的元数据,如内容类型、服务器信息、日期等。也是K-V的键值对。

以下为常见的响应头:

  • Content-Type:响应内容的资源类型,如text/*表文本,image/*表图片,*/*表所有
  • Content-Length:表示响应内容的长度(以字节为单位)。
  • Content-Encoding:响应数据的压缩类型,如gzip。
  • Cache-Control:指定浏览器缓存方式,如max-age=300表浏览器数据最多在本地缓存300s。
  • Set-Cookie:告诉浏览器为当前页面所在的域设置Cookie

        响应体:最后一部分,存放响应数据,与响应头以空行分隔。

协议解析

        解析HTTP协议分为两部分:客户端和服务端,客户端解析由浏览器内置的程序完成,我们只需要在服务器端通过java程序来接收客户端浏览器发起的请求。
        但想要手动编写代码来实现的话,非常费时费力,但因为http协议是固定的,所以解析代码也是大抵相同的有很多公司专门实现该功能:
        对HTTP协议进行封装,简化web程序开发。
        部署web项目,对外提供网上信息浏览服务。
Tomcat就是其中之一。

Tomcat

        Tomcat是一个开源免费的轻量级Web服务器,官网Apache Tomcat® - Welcome!

基本使用

一、前往官方网站下载安装包并解压安装,安装后的文件目录:

  • bin:可执行文件
  • conf:配置文件
  • lib:依赖jar包
  • logs:日志文件
  • temp:临时文件
  • webapps:应用发布目录
  • work:工作目录

二、启动:双击bin\startup.bat,此时会出现乱码,为避免这一情况,我们需要将conf/logging.properties中的代码进行修改

java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
java.util.logging.ConsoleHandler.encoding = UTF-8
————————————————————————修改后————————————————————————
java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
java.util.logging.ConsoleHandler.encoding = GBK

三、部署项目

        将项目复制到webapps目录下,即部署完成 

四、关闭程序,有三种方法

  1. 直接点击窗口右上角的×:强制关闭
  2. 点击bin\shutdown.bat:正常关闭
  3. Ctrl+C:正常关闭

常见问题

启动窗口闪退:JAVA_HOME环境变量配置存在问题

端口号冲突:找到占用端口的程序并关闭

配置端口号

        打开conf/server.xml文件,并修改“port=“8080””

    <Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443"maxParameterCount="1000"/>

若端口号为80,则访问时会省略“:80”

总结 

        创建完项目后,我们可以看到系统已将tomcat放入依赖项之中

        其中spring-boot-starter-web包含了web应用开发所需要的常见依赖, spring-boot-starter-test包含了单元测试所需要的常见依赖。
        这一系列依赖都称为起步依赖,引入起步依赖后,通过maven的依赖传递,会自动下载包含tomcat依赖在内的其他依赖,并将tomcat启动起来,免去我们手动去启动安装的tomcat,我们也称之为内嵌的tomcat服务器。

官方提供的起步依赖官网:Spring Boot

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

人工智能下半场,全球期待AI超级应用

人工智能&#xff08;AI&#xff09;这个概念&#xff0c;从1955年的达特茅斯会议开始&#xff0c;已经走过了很长的路。从最初的统计语言模型&#xff0c;到专家系统、神经网络&#xff0c;再到深度学习&#xff0c;AI技术不断进步。2019年到2022年&#xff0c;预训练模型大量…

西圣、猛玛、科唛领夹麦克风哪个牌子好?领夹麦精品实测大PK

无线领夹麦克风&#xff0c;这个在音频领域逐渐崭露头角的设备&#xff0c;已经深入到我们生活中的许多场景。从线上会议的清晰收音&#xff0c;到自媒体创作者户外拍摄时的便捷声音采集&#xff0c;它的重要性不言而喻。可是&#xff0c;市场上无线领夹麦克风的乱象令人担忧。…

哈工大华为出品|大模型「幻觉」,看这一篇就够了

大模型“幻觉”&#xff0c;终于有系统综述了&#xff01; 一口气49页&#xff0c;详细阐述了幻觉定义、分类、导致幻觉的原因&#xff0c;还有检测幻觉、减轻幻觉的方法。 这篇最新综述来自哈工大和华为&#xff0c;一po出就在网上火得不行&#xff1a; 具体来说&#xff0c…

STM32 BootLoader 刷新项目 (十) Flash擦除-命令0x56

STM32 BootLoader 刷新项目 (十) Flash擦除-命令0x56 1. STM32F407 BootLoader 中的 Flash 擦除功能详解 在嵌入式系统中&#xff0c;BootLoader 的设计是非常关键的部分&#xff0c;它负责引导主程序的启动、升级以及安全管理。而在 STM32F407 等 MCU 上实现 BootLoader&…

J.U.C - 深入解读重入锁和读写锁

文章目录 概述synchronized的缺陷1&#xff09;synchronized不能控制阻塞&#xff0c;不能灵活控制锁的释放。2&#xff09;在读多写少的场景中&#xff0c;效率低下。 独占锁ReentrantLock原理ReentrantLock概述AQS同步队列1. AQS实现原理2. 线程被唤醒时&#xff0c;AQS队列的…

异地双活容灾技术研究

摘要 随着技术快速发展&#xff0c;尤其是人工智能、大数据等新兴技术的应用&#xff0c;对数据安全提出了新的挑战&#xff0c;平台部署在机房云资源池&#xff0c;当云平台因人为错误原因出现基础设施故障&#xff0c;或自然灾害使得云平台的机房出现停电、断网等故障&#x…

从Facebook到Meta:公司转型背后的战略与意义

2021年&#xff0c;Facebook宣布更名为Meta&#xff0c;转型聚焦于“元宇宙”——这一虚拟世界的构建标志着公司从传统社交平台向更前沿的科技领域迈进。本文将探讨这一转型的背景、战略布局及其深远意义。 一、转型背景&#xff1a;应对市场和技术的挑战 自2004年成立以来&am…

前端在PC端实现支付思路流程

一.去支付 1.前端点击“去支付”按钮&#xff0c;请求订单详情接口&#xff0c;传递订单的id、订单号给后端和请求支付方式接口 2.后端返回支付信息和支付方式数据 二.弹出支付窗口 接收支付信息和支付方式数据后&#xff0c;前端弹出支付弹窗 三.确认支付 前端无论选择任何…

STM32 51单片机设计半导体制冷片温控设计

目录 前言 一、本设计主要实现哪些很“开门”功能&#xff1f; 二、电路设计原理图 1.电路图采用Altium Designer进行设计&#xff1a; 三、实物设计图 四、程序源代码设计 五、获取资料内容 前言 基于STM32与51单片机的半导体制冷片温控设计 前言 随着现代工业、医疗…

开源大模型技术路线及趋势

1. 三个维度 大模型研发力量 学术机构 大模型创业公司 科技大厂 旗舰开源模型的形态/模态 基础大模型 -> instruct大模型 -> 多模态&#xff08;VL大模型 -> 类gpt-4o大模型&#xff09; 时间线 23年上半年 23年下半年 24年 25年 2. 核心观察 学术机构及…

Vue学习笔记

Vue学习笔记 以下内容为黑马SpringbootVue3中的Vue3教程部分 Vue概述 什么是Vue&#xff1f; Vue 是一款用于构建用户界面的渐进式的JavaScript框架。&#xff08;官方:https://cn.vuejs.org/&#xff09; 快速入门 准备 准备html页面&#xff0c;并引入Vue模块&#xff08;官…

Java 使用MyBatis-Plus数据操作关键字冲突报错You have an error in your SQL syntax问题

问题 这个报错是出现在Java Spring boot项目中&#xff0c;使用MyBatis-Plus通过创建的实体类对数据库的操作过程中&#xff0c;通过实体创建数据库表是没有问题的&#xff0c;而在接口调用服务类操作数据库的时候&#xff0c;会出现报错。报错详情如下&#xff1a; 服务请求异…

Chrome DevTools Protocol 进阶: Page域

前言 本章开始我们将进一步学习 Chrome DevTools Protocol&#xff08;CDP&#xff09;&#xff0c;首先切入的内容是 CDP 中的域。 在 Chrome DevTools Protocol&#xff08;CDP&#xff09; 中&#xff0c;Page 域 是一个至关重要的部分&#xff0c;它负责控制浏览器页面的…

电动采光排烟大窗施工常见问题

电动采光排烟天窗施工常见问题可能涉及多个方面&#xff0c;包括施工前的准备、施工过程中的操作以及施工后的维护等。以下是对这些常见问题的归纳和分析。 一、施工前的准备问题 1、现场勘查不足&#xff0c;可能导致天窗尺寸、形状和材质不符合建筑设计要求&#xff1b; 2…

关于VUE NPM安装失败的问题

最近使用 npm install --registryhttps://registry.npmmirror.com 安装一个新项目的依赖&#xff0c;各种失败。 最后发现是package-lock里面有老的淘宝的域名&#xff0c;整体替换掉就行了

51单片机应用开发---LCD1602显示应用

实现目标 1、了解LCD1602液晶屏&#xff1b; 2、掌握驱动程序的编写&#xff1b; 3. 具体目标&#xff1a;在屏幕上显示字符。 一、LCD1206概述 1.1 定义 LCD1602(Liquid Crystal Display)液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置…

解决Clion相对路径失效的问题

Clion相对路径失效的可能原因 工作目录不对相对路径错误 解决方法 设置工作目录 点击 工作文件 将工作路径置空 (或设置正确的工作路径) 之后便可完美解决 设置全局路径 这样即可解决 希望能帮助到你

香港电讯连续蝉联香港01「大湾区企业同创大奖」

香港电讯非常荣幸地连续第四年荣获「香港01大湾区企业同创大奖」殊荣&#xff0c;以表扬我们在大湾区业务所取得的卓越成绩&#xff0c;以及我们积极促进区内跨境业务方面的贡献。 面对企业拓展业务的迫切需求&#xff0c;香港电讯提供全面的跨境数码方案&#xff0c;包括SD-WA…

Vue3.js - 一文看懂Vuex

1. 前言 Vuex 是 Vue.js 的官方状态管理库&#xff0c;用于在 Vue 应用中管理组件之间共享的状态。Vuex 适用于中大型应用&#xff0c;它将组件的共享状态集中管理&#xff0c;可以避免组件间传递 props 或事件的复杂性。 2. 核心概念 我们可以将Vuex想象为一个大型的Vue&…

PdServer:调用MidjourneyAPI完成静夜思图文生成

欢迎沟通讨论&#xff0c;WX: cdszsz。公号&#xff1a;AIGC中文站。 今天我们将使用PdServer&#xff0c;通过Qwen大模型完成古诗的解析与prompt的生成&#xff0c;然后调用MidjourneyAPI完成图片的生成。有了文案和图片&#xff0c;我们就可以将其生成为一个古诗讲读视频。从…