目录
[1. Tomcat简介](#1. Tomcat简介)
[2. Tomcat安装](#2. Tomcat安装)
[2.1 下载Tomcat并解压缩](#2.1 下载Tomcat并解压缩)
[2.2 启动Tomcat](#2.2 启动Tomcat)
[2.2.1 Tomcat乱码问题](#2.2.1 Tomcat乱码问题)
[2.2.2 Tomcat闪退问题](#2.2.2 Tomcat闪退问题)
[2.3 访问Tomcat欢迎页面](#2.3 访问Tomcat欢迎页面)
[3. 使用Tomcat部署前端代码](#3. 使用Tomcat部署前端代码)
[3.1 路径匹配](#3.1 路径匹配)
[3.2 文件路径访问与网络访问](#3.2 文件路径访问与网络访问)
[4. 静态页面与动态页面](#4. 静态页面与动态页面)
[5. 基于tomcat的网站后端开发](#5. 基于tomcat的网站后端开发)
1. Tomcat简介
- 使用HTTP进行通信,就涉及到HTTP客户端与HTTP服务器,
常见的HTTP客户端有:浏览器、Postman、爬虫程序等等,
对于HTTP服务器,程序员就可以基于TCP socket手动实现,实际开发中我们并不需要从头开始写一个HTTP服务器,而是基于已开发的现成HTTP服务器进行二次开发即可;
这些已开发的现成HTTP服务器已经把如何处理HTTP请求,如何构造HTTP响应封装好了,我们只需要调用这些API来构造业务逻辑即可;
- Tomcat就是Java中最知名、最流行的HTTP服务器;
2. Tomcat安装
2.1 下载Tomcat并解压缩
- 搜索tomcat找到官网:

Apache早期就是一个开源的C语言版HTTP服务器,后来发展为一个开源社区,再后来开发了很多开源产品;

此处以选择tomcat8为例;
注意:
(1)tomcat是与Java8配合使用的,对应 jdk 8;
(2)tomcat版本与servlet版本是强相关的,此处使用tomcat8,对应的servlet版本就是3.1,二者需要对应使用;
(3)一个计算机上可以同时安装多个版本的tomcat;

点击下载安装包即可;
- 下载该zip压缩包后,解压即可,此处不再赘述;
注意:tomcat是基于java实现的,故而tomcat要运行,电脑必须安装有jdk(至少得有jre);
- 解压缩后根据路径打开目录:

注:1. 服务器程序是不适合使用调试器进行调试的,调试器运行到断点停下来就会导致无法响其他客户端的请求。日志是通过System.out.println等方式打印的一些字符串,使用日志就可以更好地理解程序的实际执行过程与查看某些临时结果;
但使用日志调试也会有一些麻烦之处,每次添加或改动日志,都需要重新编译运行;
- webapps目录下还能见到.war压缩包文件,写好一个网站就可以打包为war包,拷贝到tomcat的webapp中。
2.2 启动Tomcat
(1)打开bin目录查找startup:

注意:startup.bat供windows使用,startup.sh供linux和mac使用;
(2)双击打开即可:

2.2.1 Tomcat乱码问题
服务器基本上都是控制台程序,是不带界面的,tomcat亦如是。
此处乱码是由于windows自带的cmd默认字符集为gbk,而Tomcat默认字符集为utf8(主流),
把cmd改为utf8修改非常麻烦,此处可以不作处理,后续会介绍Tomcat的其他使用方法,如将tomcat集成到idea中,或在linux中使用,这两种方式都不会导致乱码。
故而此处可以不作处理;
2.2.2 Tomcat闪退问题
如果出现闪退,可以使用cmd打开控制台后,将startup.bat拖到其中运行,大概率可以显示出错信息。常见的闪退原因有:
(1)端口占用:重复打开tomcat或正在运行其他的HTTP服务器如IIS;
(2)环境变量问题:tomcat找不到jdk,或tomcat找不到自己所在的目录,此时根据提示缺少的环境变量进行配置即可(设置-搜索环境变量-编辑系统环境变量或用户变量均可-环境变量);
如CATALINNA_HOME问题,配置到tomcat的目录即可;
如JAVA_HOME问题,配置到jdk的目录即可;
2.3 访问Tomcat欢迎页面
(该页面为tomcat自带的webapp)
在tomcat运行状态下,在浏览器访问**http://127.0.0.1:8080/(环回IP)**,即可访问到tomcat的欢迎页面:

3. 使用Tomcat部署前端代码
使用tomcat最大的用途就是部署网站,网站=前端+后端,当前部署前端代码作为示例;
部署,即将代码拷贝到webapps目录中,再重新启动tomcat后,就可以通过浏览器访问博客系统页面:
如,基于BLOG目录下的以下文件:

将BLOG目录复制到tomcat的webapps目录下:

重启tomcat后,在浏览器中输入地址:

即可打开之前编写的前端页面:

部署成功。
3.1 context path和servlet path
部署成功的tomcat下的webapps目录文件与浏览器地址是对应匹配的:

如果在浏览器中输入地址时出现对应错误,就会返回404 Not Found:
如输入以下地址:

3.2 文件路径访问和网络访问
- 通过文件路径访问:

- 通过网络方式访问(ip: port):

但当前的服务器所在主机IP为内网IP,在其上实现的webapp无法跨局域网访问,需要部署到云服务器上后就可以通过外网访问了;
4. 静态页面与动态页面
- 静态页面:页面内容固定,如搜狗的搜索主页:

- 动态页面:根据用户输入的内容不同或没有明显的不同,产生不同的结果;
如浏览器的搜索功能,输入不同的数据就要检索出不同的内容,
或bilibili主页(根据用户搜索、浏览历史进行推送):

5. 基于tomcat的网站后端开发
对于网站后端开发,HTTP服务器必然要针对HTTP协议进行一系列操作。
tomcat提供了一组API,封装了与HTTP相关的底层操作,我们只需调用tomcat提供的api即可;
tomcat给java提供的原生的进行web开发的api就是servlet;
(后续接触到的Spring MVC也是进行web开发的api,这些api也是基于servlet的,相当于是对servlet的封装)