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

目录

  • 1. 基本概念
    • 1.1 基本概念
    • 1.2 web应用程序
    • 1.3 静态web
    • 1.4 动态web
  • 2. web服务器
  • 3. tomcat详解
    • 3.1 安装
    • 3.2 启动
    • 3.3 配置
      • 3.3.1 配置启动的端口号
      • 3.3.2 配置主机的名称
      • 3.3.3 其他常用配置项
        • 日志配置
        • 数据源配置
        • 安全配置
    • 3.4 发布一个网站
  • 4. Http协议
    • 4.1 什么是http
    • 4.2 http的两个时代
    • 4.3 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:

<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的虚拟主机:

<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数据源:

<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连接器:

<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的目录结构如下:

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            # 版权声明

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

├── 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

// 请求地址
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

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. 请求头(消息头)
Accept: 告诉浏览器,它所支持的数据类型
Accept-Encoding: 告诉浏览器,它支持哪种编码格式:GBK,UTF-8,GB2312,ISO8859-1
Accept-Language: 告诉浏览器,它的语言环境
Cache-Control: 缓存控制
Connection: 告诉浏览器,请求完成是断开还是保持
HOST:主机

4.4 http响应

Response Headers

// 缓存控制
Cache-Control: no-cache
// 保持连接(http1.1)
Connection: keep-alive
// 文本编码类型
Content-Encoding: gzip
// 响应类型
Content-Type: text/html;charset=utf-8
  1. 响应体
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)页面。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI in Game,大模型能力与实时音视频技术融合,交出AI应用新答卷

随着AI的技术进步和工具普及&#xff0c;尤其是在这两年的跃进之后&#xff0c;AI在游戏行业内的应用已经逐步由理念设想推向落地实践。从蔡浩宇披露的AI新游《Whispers From The Star》到GDC上各大厂家呈现的游戏AI新亮点&#xff0c;我们看到了更多AI与游戏的结合方式&#x…

Android Studio 2022.2.1.20 汉化教程

查看Android Studio 版本 Android Studio Flamingo | 2022.2.1 Patch 2 下载&#xff1a;https://plugins.jetbrains.com/plugin/13710-chinese-simplified-language-pack----/versions/stable

常见的分词算法

常见的分词方法分类如下&#xff1a; 类型名称说明优缺点1️⃣ 基于空格/标点Word-level以空格或标点划分&#xff0c;如 "Hello, world!" → ["Hello", ",", "world", "!"]✅简单&#xff0c;❌无法处理新词&#xff0c;词…

湖北理元理律师事务所观察:债务优化如何成为民生安全网

据央行2023年报告&#xff0c;中国家庭债务收入比达137.8%。面对债务高压&#xff0c;湖北理元理律师事务所的实践揭示&#xff1a;专业债务规划的价值不仅是减负数字&#xff0c;更是构建社会稳定的微观防线。 一、从“催收恐惧”到“主动管理”的转变 该所服务数据显示&…

服务器密码安全运维解决新思路:凭据管理SMS+双因素SLA认证结合的方案

引言&#xff1a;云服务器安全成本困局 在云计算渗透率突破60%的今天&#xff0c;中小企业正面临严峻的安全悖论&#xff1a;某权威机构数据显示&#xff0c;72%的云上数据泄露事件源于凭据管理不当&#xff0c;而传统安全解决方案的采购成本往往超过中小企业年利润的8%。这种…

Vision Transformer网络结构

0.前言 参考CSDN大佬(太阳花的小绿豆)的代码&#xff0c;梳理了一下vit的网络结构&#xff0c;代码地址如下&#xff1a; deep-learning-for-image-processing/pytorch_classification/vision_transformer at master WZMIAOMIAO/deep-learning-for-image-processing GitHub …

C++ 图像处理库 CxImage 简介 (迁移至OpenCV)

文章目录 核心功能特点局限性与替代方案常用方法构造函数从数组创建图像访问属性访问像素点Windows平台支持 常用方法迁移至OpenCV CxImage 是一款功能强大的图像处理类库&#xff0c;主要用于 Windows 平台的图像处理任务。它支持多种图像格式的加载、保存、编辑及特效处理&am…

【博客系统】博客系统第十一弹:从零开始在 Linux 系统上搭建 Java 部署环境并部署 Web 项目

搭建 Java 部署环境 JDK 1. 更新软件包 apt 命令详细介绍 sudo apt-get update2. 安装 OpenJDK 查找 JDK 包 apt list | grep "jdk"安装 JDK sudo apt install openjdk-17-jdk注意&#xff1a; 此处安装的是 OpenJDK&#xff0c;OpenJDK 是一个开源版本的 JDK&am…

智能外呼系统中 NLP 意图理解的工作原理与技术实现

智能外呼系统通过整合语音识别&#xff08;ASR&#xff09;、自然语言处理&#xff08;NLP&#xff09;和语音合成&#xff08;TTS&#xff09;等技术&#xff0c;实现了自动化的电话交互。其中&#xff0c;NLP 意图理解是核心模块&#xff0c;负责解析用户话语中的语义和意图&…

Sigma-Aldrich胰蛋白酶细胞解离方案速览

Sigma-Aldrich_胰蛋白酶用于细胞培养 细胞解离是细胞传代过程中的一个步骤&#xff0c;即细胞从预处理表面分离&#xff0c;形成悬浮液。这些悬浮液对于传代培养重新接种、细胞计数分析和细胞增殖非常重要。有多种蛋白水解酶可用来从粘附基质上脱离细胞&#xff0c;胰蛋白酶就…

宝塔安装WordPress程序

宝塔安装WordPress程序 一、提前准备1&#xff0c;下载WordPress2&#xff0c;在宝塔创建站点 二、部署项目1&#xff0c;上传下载的wordpress压缩包至创建的项目根目录下并解压 三、wordpress安装1&#xff0c;在浏览器打开创建的网站2&#xff0c;开始按照流程安装配置数据库…

【LangChain】框架解析

目录 &#x1f31f; 前言&#x1f3d7;️ 技术背景与价值&#x1fa79; 当前技术痛点&#x1f6e0;️ 解决方案概述&#x1f465; 目标读者说明 &#x1f9e0; 一、技术原理剖析&#x1f4ca; 核心架构图解&#x1f4a1; 核心作用讲解&#x1f527; 关键技术模块说明⚖️ 技术选…

百度之星2024 初赛第一场 补给

百度之星2024 初赛第一场 补给 题干描述问题分析&#xff1a;C代码Java代码&#xff1a;Python代码补充说明&#xff1a; 题干描述 参考自马蹄集OJ&#xff0c;原文链接1 可怕的战争发生了&#xff0c;小度作为后勤保障工作人员&#xff0c;也要为了保卫国家而努力。 现在有 …

JavaScripts console.log和console.dir区别

console.log 和 console.dir 都是 JavaScript 中用于在浏览器控制台打印信息的方法 &#xff0c;二者主要有以下区别&#xff1a; 输出内容和格式 console.log&#xff1a;主要用于输出简单的日志信息&#xff0c;直接打印数据的字符串表示 。对于对象、数组等引用类型&#…

uniapp 开发企业微信小程序时,如何在当前页面真正销毁前或者关闭小程序前调用一个api接口

在 UniApp 开发企业微信小程序时&#xff0c;若需在页面销毁或小程序关闭前调用 API 接口&#xff0c;需结合页面生命周期和应用生命周期实现。以下是具体实现方案及注意事项&#xff1a; 一、在页面销毁前调用 API&#xff08;页面级&#xff09; 通过页面生命周期钩子 onUnl…

聊聊 Metasploit 免杀

各位小伙伴们&#xff0c;晚上好&#xff01; 咱们今天打开宵夜“安全食材箱”&#xff0c;聊聊渗透测试绕过杀毒&#xff08;免杀&#xff09;的那些门道。你可以把免杀理解为——深夜做宵夜时&#xff0c;家里有人睡觉&#xff0c;但你非得去厨房整点美食&#xff0c;还不能…

Android高级开发第二篇 - JNI 参数传递与 Java → C → Java 双向调用

文章目录 Android高级开发第二篇 - JNI 参数传递与 Java → C → Java 双向调用引言JNI基础回顾JNI中的参数传递基本数据类型传递字符串传递数组传递对象传递 Java → C → Java 双向调用从C/C调用Java方法实现一个完整的回调机制 内存管理与注意事项性能优化提示结论参考资源 …

2025-05-28 Python深度学习8——优化器

文章目录 1 工作原理2 常见优化器2.1 SGD2.2 Adam 3 优化器参数4 学习率5 使用最佳实践 本文环境&#xff1a; Pycharm 2025.1Python 3.12.9Pytorch 2.6.0cu124 ​ 优化器 (Optimizer) 是深度学习中的核心组件&#xff0c;负责根据损失函数的梯度来更新模型的参数&#xff0c;使…

Web攻防-SQL注入增删改查HTTP头UAXFFRefererCookie无回显报错

知识点&#xff1a; 1、Web攻防-SQL注入-操作方法&增删改查 2、Web攻防-SQL注入-HTTP头&UA&Cookie 3、Web攻防-SQL注入-HTTP头&XFF&Referer 案例说明&#xff1a; 在应用中&#xff0c;存在增删改查数据的操作&#xff0c;其中SQL语句结构不一导致注入语句…