通常,为了让 Java 开发的应用程序(app)能够在服务器上正常运行,必须安装 Java 运行时环境(JRE)。JRE 主要支持 Java SE,而如果要运行 Java EE 应用,则需要更多的支持,比如依赖于服务器软件,Tomcat 就是其中一种常用的服务器。
有了 Tomcat 之后,由于它本身也是用 Java 实现的,因此同样需要 JRE 来运行。之前看 Java Web 教程,觉得有一个比喻可以帮助理解应用程序、Tomcat 以及 JRE 三者的关系:将 Java 开发的应用程序比作子弹,而 Tomcat 则是枪。子弹需要符合枪的规范,并装入枪中才能发射。然而,仅有枪并不意味着可以随时使用,还需要在靶场上才能操作,而 JRE 就可以理解为这个靶场。
Tomcat 是 Apache 软件基金会的 Jakarta 项目中的一个核心项目,由 Apache、sun 和其他一些公司及个人共同开发而成。最新的 Serviet 和 JSP 规范总是能在 Tomcat 中得到体现。Tomcat 是目前比较流行的 web 应用服务器。
Tomcat 安装
在 Tomcat 官网左侧 Download 模块选择对应版本的 Tomcat 进行下载。这里选择 64-bit Windows 版本的压缩包进行下载,下载完成后,选择一个合适的文件夹进行解压,即可使用:
需要注意的是,在 Tomcat 的 10
以及之后的版本中,由于包名由原先的 javax.*
改成 jakarta.*
,因此,原先可以运行在之前版本的应用程序,需要修改包名才能运行在 10
版本以及之后的 Tomcat 上。另外,下载 Tomcat 时需要确认支持的 Java 版本:
Tomcat 服务启动 :进入 apache-tomcat 目录下的 bin 文件夹,找到 startup 命令。如果是在 Windows 操作系统,则选择运行 startup.bat
,如果是在 Linux 系统,则选择运行 startup.sh
。这里以 Windows 系统为例,双击startup.bat
,出现一个控制台窗口,里面打印着启动的日志,这时可以打开浏览器输入:http://localhost:8080/
,当出现以下页面时,说明启动成功:
Tomcat 服务关闭 :可以直接关闭启动时出现的控制台窗口,也可以运行 shutdown 命令,比如在 Windows 系统中,双击 bin 目录中的 shutdown.bat
即可关闭 Tomcat 服务。
解决Tomcat 打印日志中文乱码 :在 conf 目录下找到 logging.properties 文件,打开后找到控制台的字符集设置,将 UTF-8
改成 GBK
,之后,重新启动 Tomcat 服务即可:
java.util.logging.ConsoleHandler.level = ALL
java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
java.util.logging.ConsoleHandler.encoding = GBK
# java.util.logging.ConsoleHandler.encoding = UTF-8
Tomcat 常见目录
(1)bin 目录
该目录用于存放 Tomcat 相关命令,比如 startup、shutdown 等命令。
(2)conf 目录
该目录用于存放配置文件,比如:1)配置 Tomcat 服务占用的端口号,可以修改 conf 下的 server.xml 配置文件内容;2)设置 Tomcat 启动控制台字符集,防止日志乱码,可以修改 logging.properities 中控制台处的字符集设置。
(3)lib 目录
该目录用于存放 Tomcat 程序的相关 jar 包。可以将部署在 Tomcat 上项目所需的 jar 包存放在 lib 文件夹中,但不建议这样做,会污染环境。
(4)logs 目录
该目录用于存放 Tomcat 启动后记录的日志。Tomcat 使用久会产生较多日志,建议定期清理不必要的日志信息,避免堆积。
(5)temp 目录
该目录用于存放临时文件,不是很重要,无需多关注
(6)webapps 目录
该目录用于存放需要部署的项目,webapps 文件夹中本身自带了一些项目,这些项目可以删除。
(7)work 目录
该目录用于存放与 jsp 技术相关的文件。由于目前 jsp 技术过时了,因此,这个 work 目录可以不关注。
WEB 项目标准结构
在使用 Tomcat 的过程中,一个标准的可以用于发布的 WEB 项目标准结构如下:
-
static:非必要目录,约定俗成的名字,一般在此处放静态资源(css js img)
-
WEB-INF:必要目录,必须叫 WEB-INF,受保护的资源目录,浏览器通过 url 不可以直接访问的目,存放项目相关的重要文件:
- classes:项目字节码根路径
- lib:存放项目所需的第三方 jar 包
- web.xml:当前项目的配置文件
url 的组成部分和项目中资源的对应关系如下:
Tomcat 部署项目
使用 Tomcat 部署项目,有三种方式:
-
直接将编译好的项目放在 webapps 目录下
-
将编译好的项目打成 war 包放在 webapps 目录下,Tomcat 启动后会自动解压 war 包
-
可以将项目放在非 webapps 的其他目录下,在 Tomcat 中通过配置文件指向 app 的实际磁盘路径
对于第三种部署方式,首先在磁盘的自定义目录准备一个部署项目,这里以名称为 app 的项目为例。之后,在 Tomcat 的 conf 文件夹下创建 Catalina/localhost
目录,并在该目录下创建一个 app.xml 文件(该文件与项目名同名),文件内容为:
<!--
path:项目的访问路径,也是项目的上下文路径,即浏览器中输入的项目名称
docBase:项目在磁盘中的实际路径
-->
<Context path="/app" docBase="D:webappsapp">
其中,path 参数表示是项目的访问路径,也是项目的上下文路径,即浏览器中输入的项目名称;docBase 参数表示项目在磁盘中的实际路径。注意: path 、xml 文件名称以及项目名称尽量保持一致,否则需要额外的配置。之后,即可启动 Tomcat 访问项目。
IDEA 关联 Tomcat
在部署 JavaWeb 工程时,首先需要将该工程构建成可以用于 Tomcat 服务器部署的应用程序,之后才能将这个应用程序真正部署到 Tomcat 服务器上。这个过程可以使用 IDEA 进行。
(1)建立 Tomcat 和 IDEA 关联
打开 IDEA 应用,在 Settings 中找到 Build, Execution, Deployment
模块,找到 Application Servers
选项,添加一个 Tomcat Server:
注意:Tomcat Home 地址选到 Tomcat bin 目录的上一层,之后点击 OK 即可。
(2)使用 IDEA 创建和开发 JavaWeb 工程
在自定义路径下创建一个项目文件夹,这里以 web-all 命名项目文件夹,并用 IDEA 打开这个空项目。在创建 JavaWeb 工程之前,首先点击导航栏处的 File 的 Project Structure 选项,设置 JDK 和Java 的版本,同时设置构建好的应用程序的输出路径:
注意,这里是为了便于将多个开发项目放在同一个文件夹中管理,才先创建一个 web-all 项目。所以,接着是通过new Module 创建具体需要开发的项目。右键项目,选择 new 新的 Module(这里演示的项目 Build systems 选择 IntelliJ):
之后需要将这个普通项目转成一个 Java Web 项目。不过,在此之前,需要为项目添加 Tomcat 运行依赖和 Web 组件。点击导航栏处的 File 的 Project Structure 选项,选择当前 Modules 的 Dependencies,添加 Tomcat 依赖。点击 +
选择 Library...
中对应版本的 Tomcat 依赖:
接着,添加 Web 资源组件。右键项目,选择 Add Framework Support...
,勾选 Web Application
,选择 5.0
版本(4.0
版本无法在 Tomcat 10 中运行):
此时,可以看到项目目录下多了一个 web 文件夹,说明目前这个项目已经不再是普通项目,而是一个 Java Web 项目。根据常见的开发项目目录结构,为这个项目创建一些测试代码:
(3)将工程构建成可部署的应用程序
在开发好当前工程后,需要将当前工程转成一个应用程序。点击 IDEA 导航栏中的 Build 下面的 Build Artifacts
,选择当前工程点击 Build
。完成后会生成一个 out
文件夹,该文件夹的 artifacts
中有一个 工程名称_war_exploded
的应用程序,这个应用程序即为转化后的输出。当然这一步其实可以省略,直接进行下面的 Tomcat 配置,最终在运行项目时,会自动转换和生成。接着进行 Tomcat 项目部署配置。点击编辑 Run/Debug Configurations:
添加一个 Tomcat Server Local:
选择当前版本的 Tomcat 作为 Application Server,点击 Deployment
,将当前转换好的应用程序添加进去,这里可以将 Application context 设置成一个较短的名称,这样使用浏览器访问项目的路径会简洁一些:
(4)将应用程序部署到 Tomcat 并启动运行
配置完成后,点击 IDEA 中的运行项目按钮即可启动 Tomcat 并在 Tomcat 上运行项目。