02-Tomcat&Http
tomcat 安装、配置#
- 版本:tomcat7 要求 JDK6 以上
- JAVA_HOME 环境变量
- 指定 tomcat 启动时使用的 JDK 所在的位置
- tomcat 服务器程序本质上也是由 Java 编写的程序,所以想要运行 tomcat 得要 JDK
- Catalina_HOME 环境变量
- 指定 tomcat 在启动时启动哪个 tomcat,一般不推荐配置
- 如果有多个 tomcat,无论双击哪个 tomcat 目录下的
startup.bat
,都会默认启动 Catalina_HOME 环境变量配置的那个 tomcat
- 启动/关闭 tomcat
- 端口问题
tomcat 目录结构#
- bin:存放启动和关闭 bat 文件(批处理文件) 所在的目录
- lib:tomcat 运行时所需要的 jar 包所在目录
- conf:配置文件所在目录
- logs:日志文件所在的目录
- temp:tomcat 运行时产生的临时文件所存放的目录- webapps:开发中最常用的目录,web 应用放置在此目录下
- work:tomcat 运行时产生的工作文件存放在这个目录下
虚拟主机、web 应用#
虚拟主机#
一个 tomcat 可以认为是一台真实主机。在一台真实主机中可以配置多个站点,这些站点在访问者看来访问他们就像在访问各自独立的主机一样,所以我们可以认为这些站点都运行在 tomcat 这台真实主机当中的各自的虚拟主机当中。一个网站就可以认为是一个虚拟主机。
tomcat 装好之后,他默认自带一个虚拟主机,查看 tomcat/config/server.xml:
配置虚拟主机
- 在 conf/server.xml 中
<Engine>
下嵌入<Host>
就可以为 tomcat 增加一台虚拟主机
- name:虚拟主机的名称,browser通过这个名称访问该虚拟主机
- appBase:虚拟主机管理的目录,放置在这个目录下的 web应用 会被当前虚拟主机自动加载
- 由于浏览器访问地址时,需要将地址翻译为对应的 IP 才能找到服务器,这其中翻译的过程是由 DNS 服务器实现的。我们在做实验的时候无法修改 DNS 服务器,但此时可以通过修改 "C:\Windows\System32\drivers\etc\hosts" 文件来模拟 DNS 的功能,从而完成实验
- 效果演示
缺省虚拟主机
如果你有多个虚拟主机都运行在 tomcat 里,那当浏览器敲任一虚拟主机名时,tomcat 都能找到对应的虚拟主机为其服务。
那么如果没通过域名,而是通过 IP 进行访问,这时服务器无法辨别当前要访问的是哪台虚拟主机的资源,会去访问默认虚拟主机。
缺省虚拟主机在 server.xml 中 <Engine>
中配置:
web 应用#
一个虚拟主机中会有大量的 web 资源,但是 web 资源不能直接交给 web 资源来管理,而是要按照一定方式组织成 web 应用。一般来说会按照功能进行组织:将某一个功能相关的所有 web 资源组织成一个 web 应用后再交给虚拟主机。
配置 web 应用给 Host
同时用这 3 种方式各配置一个 web 应用,且均设置为缺省 web 应用,那么优先级顺序为:[1] > [2] > [3]
Context 元素常用属性
web 应用组织结构
B/S 交互图#
Tips#
- 地址栏敲:"http://localhost:8080/" 直接就可以访问到那只猫,但当查看 "webapp/ROOT/WEB-INF/web.xml" 时,却发现并没有配置主页,那么,我们是怎么看见那只猫的?→ 查看 conf/web.xml
- 为什么 web 应用会去查看 web.xml 文件中的配置
- tomcat服务器的管理平台
- 在"webapp/ROOT/index.html"中,有一个超链接叫 [Tomcat Manager]
- 登陆时使用的用户名密码是需要配置的,在"conf/tomcat-users.xml"中进行配置
- tomcat 体系架构(对应server.xml)
- 压缩web应用
- 如何压缩
- CMD 处于要压缩的web应用的目录下,使用
jar -cvf 目标压缩文件名.waz *
- 直接右键压缩成zip之后,修改 ".zip" 为 ".war"
- CMD 处于要压缩的web应用的目录下,使用
- 上传到虚拟主机的管理目录后,虚拟主机默认情况下,自动就会解压这个 war 包
- 作用:减少 web 应用的体积,方便传输。并且,在虚拟主机管理的目录下,war 默认可以自动解压
- 如何压缩
HTTP 协议#
概述#
- HTTP 全称 HyperText Transfer Protocol(超文本传输协议),是 TCP/IP 协议的一个应用层协议
- HTTP 协议基于请求-响应模型
- 定义 WEB-Browser 与 WEB-Server 之间交换数据的格式,过程
- 请求只能由 Client 发出,Server 只能被动的等待请求,返回响应
- 版本
HTTP 请求#
请求行
如:GET /books/java.html HTTP/1.1
- 请求方式:HEAD/OPTIONS/DELETE/TRACE/PUT 没用过,主要用 POST/GET(区别在于:请求参数在传递过程中方式不同)
- POST
- 请求参数将会在 HTTP 请求的实体内容中进行传输
- 数据大小没有限制
- 只有在利用 FORM 表单提交数据时,FORM 表单明确表明使用 "POST" 方式提交
- GET
- 请求参数将会附加在请求的URL后面作为请求地址的一部分带到服务器端
- 可以传输的数据大小有限制,一般不允许超过 1KB
- 除此以外的所有方式的请求参数都是 GET 提交
- POST
- 请求的资源部份的名称
- 所遵循的协议版本
请求头
HTTP 响应#
状态行
HTTP版本号 状态码 原因叙述
如:HTTP/1.1 200 OK
响应头
之所以 3 个头是相同功能,是因为不同的 browser 对这 3 个头支持的不同,一般来说这个 3 个头要同时使用以确保不同 browser 都能实现控制缓存的功能。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?