【JavaWeb】基本概念、web服务器、Tomcat、HTTP协议

目录

  • [1. 基本概念](#1. 基本概念)
    • [1.1 基本概念](#1.1 基本概念)
    • [1.2 web应用程序](#1.2 web应用程序)
    • [1.3 静态web](#1.3 静态web)
    • [1.4 动态web](#1.4 动态web)
  • [2. web服务器](#2. web服务器)
  • [3. tomcat详解](#3. tomcat详解)
    • [3.1 安装](#3.1 安装)
    • [3.2 启动](#3.2 启动)
    • [3.3 配置](#3.3 配置)
      • [3.3.1 配置启动的端口号](#3.3.1 配置启动的端口号)
      • [3.3.2 配置主机的名称](#3.3.2 配置主机的名称)
      • [3.3.3 其他常用配置项](#3.3.3 其他常用配置项)
    • [3.4 发布一个网站](#3.4 发布一个网站)
  • [4. Http协议](#4. Http协议)
    • [4.1 什么是http](#4.1 什么是http)
    • [4.2 http的两个时代](#4.2 http的两个时代)
    • [4.3 http请求](#4.3 http请求)
    • [4.4 http响应](#4.4 http响应)

1. 基本概念

1.1 基本概念

  1. 静态web:html,css(提供给所有人看的数据,始终不会发生变化)
  2. 动态web:Servlet/JSP,ASP,PHP,淘宝等几乎所有的网站
    (提供给所有人看的数据,始终会发生变化,每个人在不同时间,不同地方看到的都不同)

1.2 web应用程序

web应用程序:可以提供浏览器访问的程序

  • a.html、b.html等多个web资源,这些web资源可以被外界访问,对外界提供服务。
  • 你们能访问到的任何一个页面或者资源,都存在于这个世界的某一个角落的计算机上。
  • URL:统一资源定位符。
  • 这个统一的web资源会被放在同一个文件夹下,web应用程序--->Tomcat:服务器。
  • web应用程序编写完毕后,若想提供给外界访问:需要一个服务器来统一管理。

1.3 静态web

_ .htm, _ .html,这些都是网页的后缀,如果服务器上一直存在这些东西,我们就可以直接进行读取。

1.4 动态web

页面会动态展示:Web的页面展示的效果因人而异。

2. web服务器

服务器是一种被动的操作,用来处理用户的一些请求和给用户一些响应信息。

** IIS ** :

** IIS(Internet Information Services) ** 是微软开发的一款Web服务器软件,专为Windows操作系统设计。它主要用于托管网站、提供Web服务以及支持多种协议如HTTP、HTTPS等。IIS不仅易于安装和配置,还提供了强大的功能集,包括安全性控制、性能优化以及对多种Web技术的支持。

** Tomcat ** :

** Tomcat ** 则是Apache软件基金会下的一个项目,旨在提供一个运行Java Servlets和JavaServer Pages (JSP) 的环境。由于有Sun Microsystems(现Oracle Corporation)以及其他各方的支持,最新的Servlet和JSP规范通常能够在Tomcat中得到体现。例如,Tomcat 5支持了当时的最新标准Servlet 2.4和JSP 2.0规范。作为一个免费且开源的Web应用服务器,Tomcat因其轻量级特性而在中小型系统中被广泛采用,特别是在并发访问用户数量有限的情况下,它是开发和调试JSP程序的理想选择。

当在一台机器上配置好Apache服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat时,它实际上作为一个与Apache 独立的进程单独运行的。

虽然Tomcat起源于Apache项目,并且能够与Apache HTTP服务器协同工作以处理静态和动态内容,但它本身是一个独立的Servlet容器,专注于Java Web应用程序的执行。因此,在使用Tomcat进行Web开发时,开发者可以根据需要选择是否将其与Apache结合使用,或者单独利用Tomcat来满足项目需求。这种灵活性使得Tomcat成为Java Web应用开发中的重要工具。

3. tomcat详解

3.1 安装

3.2 启动

3.3 配置

Tomcat的配置主要通过编辑其配置文件来完成,这些文件通常位于conf目录下。

3.3.1 配置启动的端口号

Tomcat默认使用8080端口 作为HTTP服务端口。如果需要更改这个端口号,可以在conf/server.xml文件中找到相应的<Connector>元素并修改port属性。

例如,将Tomcat的HTTP端口更改为8081:

xml 复制代码
<Connector port="8081" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />
  • port: 指定Tomcat监听的端口号,mysql:3306;http:80;https:443。
  • protocol: 指定使用的协议类型,这里为HTTP/1.1。
  • connectionTimeout: 设置连接超时时间(毫秒),超过该时间未处理完请求则断开连接。
  • redirectPort: 当客户端请求的是HTTPS服务时,会重定向到此端口。

3.3.2 配置主机的名称

server.xml文件中,可以通过<Host>元素配置虚拟主机。默认情况下,Tomcat使用localhost作为主机名,并将其映射到127.0.0.1

例如,配置一个名为www.none.com的虚拟主机:

xml 复制代码
<Host name="www.none.com" appBase="webapps"
      unpackWARs="true" autoDeploy="true">
</Host>
  • name: 虚拟主机的域名。
  • appBase: 应用程序的基本目录,默认为webapps
  • unpackWARs: 是否自动解压WAR包,默认为true
  • autoDeploy: 是否自动部署新的应用程序,默认为true

3.3.3 其他常用配置项

日志配置

日志文件通常位于logs目录下,可以通过编辑conf/logging.properties文件来调整日志级别和输出格式。

数据源配置

如果应用需要连接数据库,可以在conf/context.xml或应用的META-INF/context.xml中配置数据源。

例如,配置MySQL数据源:

xml 复制代码
<Resource name="jdbc/myDB" auth="Container" type="javax.sql.DataSource"
          maxTotal="100" maxIdle="30" maxWaitMillis="10000"
          username="dbuser" password="dbpass" driverClassName="com.mysql.none.jdbc.Driver"
          url="jdbc:mysql://localhost:3306/mydatabase"/>
安全配置

为了提高安全性,可以配置SSL/TLS以启用HTTPS服务。这通常涉及到生成证书并在server.xml中配置<Connector>元素。

例如,配置HTTPS连接器:

xml 复制代码
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
           clientAuth="false" sslProtocol="TLS"
           keystoreFile="/path/to/keystore.jks" keystorePass="changeit"/>

** 请你谈谈网站是如何访问的? **

三次握手,交互。

  1. 输入URL :用户在浏览器地址栏中输入一个URL(统一资源定位符),比如http://www.example.com。这个URL包含了协议(如HTTP或HTTPS)、域名(如www.example.com)和可能的路径(如/path/page.html)。
  2. DNS解析:浏览器需要知道对应域名的IP地址才能建立连接。它首先会在本地缓存或者操作系统缓存中查找该域名对应的IP地址。如果找不到,就会向配置的DNS服务器发送请求查询该域名的IP地址。DNS服务器通过递归查询的方式找到正确的IP地址并返回给浏览器。
  3. 建立TCP连接:获取到目标服务器的IP地址后,浏览器会尝试与服务器建立TCP连接。这通常涉及到**三次握手 **的过程,以确保客户端和服务器双方都准备好进行数据传输。
  4. TLS握手(如果是HTTPS):如果使用的是HTTPS协议,还需要额外进行一次TLS(Transport Layer Security)握手来加密通信。这一步骤包括客户端和服务器之间的密钥交换、证书验证等操作,确保通信的安全性。
  5. 发送HTTP请求 :一旦TCP连接建立完成(对于HTTPS还需完成TLS握手),浏览器会构造并发送一个HTTP请求报文到服务器。这个请求报文中包含诸如请求方法(GETPOST等)、请求的URL、头部信息(Headers)以及可能的主体内容(Body)。
  6. 服务器处理请求 :Web服务器接收到请求后,会根据请求的内容进行处理。如果是静态文件,服务器直接返回文件;如果是动态内容,则服务器可能会调用相应的脚本或应用程序来生成响应内容。
  7. 发送HTTP响应:服务器处理完请求后,会构建一个HTTP响应报文发回给浏览器。响应报文中包含状态行(表明请求的结果)、头部信息和响应体(通常是HTML文档或其他类型的数据)。
  8. 浏览器接收响应:浏览器接收到响应后,开始解析HTML文档,并根据文档中的指令加载CSS样式表、JavaScript脚本以及其他资源(如图片、视频等)。在这个过程中,浏览器可能会发起更多的HTTP请求来获取这些资源。
  9. 渲染页面:随着资源逐步加载完毕,浏览器开始构建DOM树、应用CSS样式,并执行JavaScript代码,最后将内容渲染到屏幕上供用户查看。

整个流程涉及了多种网络协议(如HTTP、HTTPS、TCP/IP)、技术栈(如HTML、CSS、JavaScript)以及中间件(如DNS服务器、Web服务器)。此外,现代浏览器还提供了许多优化措施,比如预取、预加载、压缩传输等,来提升网页加载速度和用户体验。

3.4 发布一个网站

tomcat的目录结构如下:

json 复制代码
apache-tomcat-<version>/
├── bin/              # 存放启动、停止等脚本
│   ├── startup.sh    # Linux下启动Tomcat的脚本
│   ├── shutdown.sh   # Linux下停止Tomcat的脚本
│   ├── catalina.sh   # Tomcat核心控制脚本
│   └── ...           # 其他脚本文件
├── conf/             # 配置文件目录
│   ├── server.xml    # 主配置文件,定义端口、连接器等
│   ├── web.xml       # 默认Web应用部署描述符
│   ├── context.xml   # 上下文配置文件
│   ├── tomcat-users.xml # 用户认证配置
│   └── ...           # 其他配置文件如logging.properties等
├── lib/              # 共享库(JAR)目录
│   ├── servlet-api.jar # Servlet API实现
│   ├── jsp-api.jar     # JSP API实现
│   └── ...           # 其他必要的依赖库
├── logs/             # 日志文件目录
│   ├── catalina.out  # 主要日志文件
│   ├── localhost_access_log.*.txt # HTTP请求访问日志
│   └── ...           # 其他日志文件
├── webapps/          # Web应用程序部署目录
│   ├── ROOT/         # 默认根应用
│   ├── manager/      # 内置管理控制台
│   ├── examples/     # 官方示例应用
|   		├──WEB-INF
|   		   ├── classes  # java程序
|   		   ├── lib      # 所依赖的jar包
|   		   └── web.xml  # 网页配置
|   		├──static       # 静态资源
|   		├──index.html
|   		└──...
│   └── ...           # 自定义的应用程序或WAR包
├── work/             # 运行时工作目录
│   └── Catalina/     # 存储编译后的JSP类文件
├── temp/             # 临时文件目录
├── LICENSE           # 许可证文件
└── NOTICE            # 版权声明

这部分是我们配置网站时所使用的:

json 复制代码
├── webapps/          # Web应用程序部署目录
│   ├── ROOT/         # 默认根应用
│   ├── manager/      # 内置管理控制台
│   ├── examples/     # 官方示例应用
|   		├──WEB-INF
|   		   ├── classes  # java程序
|   		   ├── lib      # 所依赖的jar包
|   		   └── web.xml  # 网页配置
|   		├──static       # 静态资源
|   		├──index.html
|   		└──...
│   └── ...           # 自定义的应用程序或WAR包

4. Http协议

4.1 什么是http

HTTP(超文本传输协议)是一个简单的请求-响应协议,它通常运行在TCP之上。

  • 文本:html,字符串...
  • 超文本:图片,音乐,视频,定位,地图...
  • 默认端口:80
  • HTTPS:安全的协议
    • 默认端口:443

4.2 http的两个时代

  • http1.0:客户端可以与web服务器连接后,只能获得一个web资源,断开连接。
  • http2.0:客户端可以与web服务器连接后,可以获得多个web资源。

4.3 http请求

客户端---->发请求(request)---->服务器(比如:访问百度)
General

text 复制代码
// 请求地址
Request URL: https://www.baidu.com/
// 请求方法
Request Method: GET
// 状态代码
Status Code: 200 OK
// 远程地址
Remote Address: 14.215.177.38:443
// 引用站点策略
Referrer Policy: strict-origin-when-cross-origin

Request Headers

plain 复制代码
Accept: text/html
Accept-Encoding: gzip, deflate, br
// 语言
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: max-age=0
Connection: keep-alive
  1. 请求行
  • 请求行中的请求方式: GET
  • 请求方式:GETPOSTHEADDELETEPUT...
    GET: 请求能够携带的参数比较少,大小有限制,会在浏览器的URL地址栏显示数据内容,不安全,但高效。
    POST:请求能够携带的参数没有限制,大小没有限制,不会在浏览器的URL地址栏显示数据内容,安全,但不高效。
  1. 请求头(消息头)
plain 复制代码
Accept: 告诉浏览器,它所支持的数据类型
Accept-Encoding: 告诉浏览器,它支持哪种编码格式:GBK,UTF-8,GB2312,ISO8859-1
Accept-Language: 告诉浏览器,它的语言环境
Cache-Control: 缓存控制
Connection: 告诉浏览器,请求完成是断开还是保持
HOST:主机

4.4 http响应

Response Headers

plain 复制代码
// 缓存控制
Cache-Control: no-cache
// 保持连接(http1.1)
Connection: keep-alive
// 文本编码类型
Content-Encoding: gzip
// 响应类型
Content-Type: text/html;charset=utf-8
  1. 响应体
plain 复制代码
Accept: 告诉浏览器,它所支持的数据类型
Accept-Encoding: 告诉浏览器,它支持哪种编码格式:GBK,UTF-8,GB2312,ISO8859-1
Accept-Language: 告诉浏览器,它的语言环境
Cache-Control: 缓存控制
Connection: 告诉浏览器,请求完成是断开还是保持
HOST:主机
Refrush:告诉客户端,多久刷新一次
Location:让网页重新定位
  1. 响应状态码
  • 200:响应成功
  • 3xx:请求重定向(304等等)
  • 4xx:找不到资源(404等等)
  • 5xx:服务器代码错误(500代码错误,502网关错误)

当你的浏览器中地址栏输入地址并回车的一瞬间到页面能够展示回来,经历了什么?

  1. URL 解析

浏览器解析输入的 URL,提取协议(HTTP/HTTPS)、域名、路径等信息。

  1. DNS 解析

检查本地缓存(浏览器、系统、hosts 文件),若无则通过 DNS 服务器递归查询,将域名转换为 IP 地址

  1. 建立 TCP 连接

通过 三次握手 与服务器建立可靠的 TCP 连接(SYN → SYN-ACK → ACK)。

  1. TLS 握手(**HTTPS **)

若为 HTTPS,进行 TLS 握手:证书验证、密钥交换,建立加密通道。

  1. 发送 HTTP 请求

浏览器发送 HTTP 请求(如 GET/index.html ),包含请求头(host、User-Agent 等)和请求体(如 GET 数据)。

  1. 服务器处理请求

服务器解析请求,执行逻辑(如查询数据库),生成响应内容(HTML、图片等)。

  1. 返回 HTTP 响应

服务器返回 HTTP 响应,包含状态码(如 200 OK)、响应头(Content-Type)和响应体(页面内容)。

  1. 浏览器渲染页面

解析 HTML :构建 DOM 树。

加载 CSS/JS :构建 CSSOM 树,执行 JavaScript。

渲染树合成 :合并 DOM 和 CSSOM,布局(Layout)并绘制(Paint)页面。

相关推荐
腻害兔3 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
码智社4 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
克里斯蒂亚诺更新4 小时前
ruoyi角色权限的对应关系
笔记
萧瑟余晖5 小时前
JDK 26 新特性详解
java·开发语言
马优晨6 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
a1117767 小时前
2FA 验证码生成器(github登录验证 app)
笔记·学习
我的xiaodoujiao7 小时前
API 接口自动化测试详细图文教程学习系列32--Allure测试报告2
python·学习·测试工具·pytest
维天说8 小时前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json
破碎的南瓜8 小时前
sqli--sql注入过关笔记(1,2,3,4,5,9)
数据库·笔记·sql
Zane19949 小时前
并发 vs 并行:别再傻傻分不清了,一文讲透 Java 并发编程的第一课
java·后端