一、tomcat简介
web服务器通常由硬件和软件共同构成。
- 硬件:电脑,提供服务供其它客户电脑访问
- 软件:电脑上安装的服务器软件,安装后能提供服务给网络中的其他计算机,将本地文件映射成一个虚拟的url地址供网络中的其他人访问。

常见的javaweb服务器:
- tomcat(apache):当前应用最广的javaweb服务器
- jetty:更轻量级、更灵活的servlet容器
- jboss(redhat红帽):支持javaee,应用比较广ejb容器 –> ssh轻量级的框架代替
- glassfish(orcale):oracle开发javaweb服务器,应用不是很广
- resin(caucho):支持javaee,应用越来越广
- weblogic(orcale):要钱的!支持javaee,适合大型项目
- websphere(ibm):要钱的!支持javaee,适合大型项目
tomcat是apache 软件基金会(apache software foundation)的jakarta 项目中的一个核心项目,由apache、sun 和其他一些公司及个人共同开发而成。最新的servlet 和jsp 规范总是能在tomcat 中得到体现,因为tomcat 技术先进、性能稳定,而且免费,因而深受java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的web 应用服务器。
tomcat 版本和servlet版本之间的对应关系:
| servlet version | tomcat version | jdk version |
|---|---|---|
| 6.1 | 11.0.x | 17 and later |
| 6.0 | 10.1.x | 11 and later |
| 5.0 | 10.0.x (superseded) | 8 and later |
| 4.0 | 9.0.x | 8 and later |
| 3.1 | 8.5.x | 7 and later |
| 3.1 | 8.0.x (superseded) | 7 and later |
| 3.0 | 7.0.x (archived) | 6 and later (7 and later for websocket) |
二、tomcat安装步骤
注意:安装tomcat之前要安装jdk!
1.选择分支下载
进入该网址:https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.34/bin/
2.点击下载zip安装包

3.解压到没有中文、
空格和特殊字符的目录下
4.双击bin目录下的startup.bat脚本启动tomcat

会弹出一个dos窗口,这个就是tomcat服务器

如果你下载的tomcat是10版本,dos窗口打印的中文可能会有乱码,解决方式如下:
tomcat——config——logging.properties文件:修改编码格式为gbk

5.浏览器访问tomcat
浏览器地址栏输入:http://localhost:8080/
出现下面的页面,就说明tomcat服务器访问成功。

6.关闭tomcat服务器
8080端口只能被占用一次 重复启动时 会报错 端口占用 无法正常启动
关闭tomcat时 建议使用脚本关闭 主动释放端口 直接杀进程 端口释放不及时 有时候会卡主端口 长时间不释放
建议用脚本关闭

三、tomcat目录介绍

bin:该目录下存放的是二进制可执行文件,如果是安装版,那么这个目录下会有两个exe文件:tomcat8.exe、tomcat8w.exe,前者是在控制台下启动tomcat,后者是弹出gui窗口启动tomcat;如果是解压版,那么会有startup.bat和shutdown.bat文件,startup.bat用来启动tomcat,但需要先配置java_home环境变量才能启动,shutdown.bat用来停止tomcat;
conf:这是一个非常非常重要的目录,这个目录下有四个最为重要的文件:
server.xml:配置整个服务器信息。例如修改端口号。默认http请求的端口号是:8080
修改启动端口号:conf/server.xml

tomcat-users.xml:存储tomcat用户的文件,这里保存的是tomcat的用户名及密码,以及用户的角色信息。可以按着该文件中的注释信息添加tomcat用户,然后就可以在tomcat主页中进入tomcat manager页面了;
<tomcat-users xmlns="http://tomcat.apache.org/xml"
xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"
xsi:schemalocation="http://tomcat.apache.org/xml tomcat-users.xsd"
version="1.0">
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="admin"
password="admin"
roles="admin-gui,admin-script,manager-gui,manager-script,manager-jmx,manager-status"
/>
</tomcat-users>- web.xml:部署描述符文件,这个文件中注册了很多mime类型,即文档类型。这些mime类型是客户端与服务器之间说明文档类型的,如用户请求一个html网页,那么服务器还会告诉客户端浏览器响应的文档是text/html类型的,这就是一个mime类型。客户端浏览器通过这个mime类型就知道如何处理它了。当然是在浏览器中显示这个html文件了。但如果服务器响应的是一个exe文件,那么浏览器就不可能显示它,而是应该弹出下载窗口才对。mime就是用来说明文档的内容是什么类型的!
- context.xml:对所有应用的统一配置,通常我们不会去配置它。
- lib:tomcat的类库,里面是一大堆jar文件。如果需要添加tomcat依赖的jar文件,可以把它放到这个目录中,当然也可以把应用依赖的jar文件放到这个目录中,这个目录中的jar所有项目都可以共享之,但这样你的应用放到其他tomcat下时就不能再共享这个目录下的jar包了,所以建议只把tomcat需要的jar包放到这个目录下;
- logs:这个目录中都是日志文件,记录了tomcat启动和关闭的信息,如果启动tomcat时有错误,那么异常也会记录在日志文件中。
- temp:存放tomcat的临时文件,这个目录下的东西可以在停止tomcat后删除!
- webapps:存放web项目的目录,其中每个文件夹都是一个项目;如果这个目录下已经存在了目录,那么都是tomcat自带的项目。其中root是一个特殊的项目,在地址栏中访问:http://127.0.0.1:8080,没有给出项目目录时,对应的就是root项目。http://localhost:8080/examples,进入示例项目。其中examples"就是项目名,即文件夹的名字。
项目的访问路径与项目的部署目录可以不一致,可以在idea中配置:

- work:运行时生成的文件,最终运行的文件都在这里。通过webapps中的项目生成的!可以把这个目录下的内容删除,再次运行时会生再次生成work目录。当客户端用户访问一个jsp文件时,tomcat会通过jsp生成java文件,然后再编译java文件生成class文件,生成的java和class文件都会存放到这个目录下。
- license:许可证。
- notice:说明文件。
四、web项目的标准结构
一个标准的可以用于发布的web项目标准结构如下:

app 本应用根目录
- static 非必要目录,约定俗成的名字,一般在此处放静态资源 (css js img)
web-inf 必要目录,必须叫web-inf,受保护的资源目录,浏览器通过url不可以直接访问的目录
- classes 必要目录,src下源代码,配置文件,编译后会在该目录下,web项目中如果没有源码,则该目录不会出现
- lib 必要目录,项目依赖的jar编译后会出现在该目录下,web项目要是没有依赖任何jar,则该目录不会出现
- web.xml 必要文件,web项目的基本配置文件。较新的版本中可以没有该文件,但是学习过程中还是需要该文件
index.html 非必要文件,index.html/index.htm/index.jsp为默认的欢迎页
在tomcat的webapps目录下新建app文件,具体文件结构如下:

访问login.html:

访问regist.html:

访问static/img/logo.jpg:

如果在web-inf目录下放一张图片,图片无法访问:
五、web项目部署的三种方式
(一)方式一——直接将编译好的项目放在webapps目录下
上面已经演示过。
(二)方式二——war包放在webapps目录下
将编译好的项目打成war包放在webapps目录下,tomcat启动后会自动解压war包(其实和第一种一样)

在tomcat的conf下创建catalina/localhost目录,并在该目录下准备一个app.xml文件
<!--
path: 项目的访问路径,也是项目的上下文路径,就是在浏览器中,输入的项目名称
docbase: 项目在磁盘中的实际路径
-->
<context path="/app" docbase="d:\mywebapps\app" />启动tomcat访问测试即可

url的组成部分和项目中资源的对应关系:

tomcat的webapps目录默认给我们提供了如下项目:

浏览器访问项目名,有没有输入index.html都是默认展示这一页


root项目比较特殊,它的部署目录和访问路径不一致,访问方式如下:
浏览器地址不需要写root:http://localhost:8080/index.jsp

(三)idea中开发并部署运行web项目





idea可以配置多个tomcat,点击+号还可以继续新增
六、idea中开发并部署运行web项目
1.创建一个空项目或空模块


2.配置web application


如果你的tomcat版本是10以上,需要先做这一步:

再重新勾选web application,选择5.0版本

3.搭建内部框架
删除index.jsp

java代码写在src中,网页代码写在web目录下:
新增日程管理一期的login.html和regist.html到web下,新增static目录,下面放多个目录和文件

当前项目的jar包必须放在web-inf下的lib目录中

4.构建项目

选择要build的项目进行build


- resources和src文件编译后的文件,放在classes中;
- web对应demo01_web01_war_exploded,demo01_web01_war_exploded就是可以在tomcat中发布的app;
- static和web-inf对应demo01_web01_war_exploded下的static和web-inf;

build部分的步骤也可以跳过,在这里配置完成后直接启动项目即可:






5.运行tomcat项目


6.浏览器访问


停止服务,删除out文件,再重新启动,浏览器输入url,也可以成功访问,idea会自动进行build

catalina log乱码问题解决:
tomcat10以上版本可能会出现乱码问题,修改config目录下的logging.properties文件的编码即可。

七、idea部署并运行javaweb项目的原理
构建好的项目并不会放在tomcat安装目录的webapps中,防止污染本地安装的tomcat,而是放在tomcat生成的副本中



tomcat磁盘上的软件按照tomcat副本中的配置文件进行运行,这样既不会污染本地安装的tomcat软件,创建的副本也很小。
idea部署并运行项目的原理
idea并没有直接进将编译好的项目放入tomcat的webapps中
idea根据关联的tomcat,创建了一个tomcat副本,将项目部署到了这个副本中
idea的tomcat副本在c:\users\administrator\appdata\local\jetbrains\intellijidea2022.2\tomcat\中
idea的tomcat副本并不是一个完整的tomcat,副本里只是准备了和当前项目相关的配置文件而已
idea启动tomcat时,是让本地tomcat程序按照tomcat副本里的配置文件运行
idea的tomcat副本部署项目的模式是通过conf/catalina/localhost/*.xml配置文件的形式实现项目部署的
c:\users\administrator\appdata\local\jetbrains\intellijidea2022.2\tomcat\35d71a34-4fc7-4686-917a-b4aca77b806a\conf\catalina\localhost目录下的*.xml文件:

<context path="/web01" docbase="g:\develop\workspace\atguigujavaweb\one\basecode\out\artifacts\demo01_web01_war_exploded" />
八、tomcat支持热部署
当想要修改代码时,不需要重启tomcat服务,点击热部署按钮即可。

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论