一、Tomcat 目录结构为什么要先搞清楚

原笔记在完成快速部署后,马上进入目录结构部分,这一点非常重要。
因为 Tomcat 后续的大多数运维操作都依赖你知道:

  • 命令在哪
  • 配置在哪
  • 日志在哪
  • 应用部署目录在哪

如果这些目录关系没搞清楚,后续排错和部署都会很低效。

二、Tomcat 常见目录各自放什么

原笔记把常见目录整理如下:

目录 说明
bin Tomcat 管理命令
conf Tomcat 配置文件
lib 依赖和库文件
logs 日志目录
webapps 站点目录
work Java 代码运行后的工作目录

这里面最常用的几类目录是:

  • bin
  • conf
  • logs
  • webapps

三、binconflogs 最需要关注什么

原笔记对几个目录里的典型内容也做了说明。

3.1 bin

常见脚本包括:

  • startup.sh
  • shutdown.sh
  • catalina.sh

其中 catalina.sh 是核心脚本,后续很多 JVM 参数、JMX 监控、优化项都会在这里延伸。

3.2 conf

重点配置文件包括:

  • server.xml
  • web.xml

后面端口、虚拟主机、访问日志、HTTPS 等配置都离不开 server.xml

3.3 logs

原笔记强调了几个重要日志:

  • catalina.out
  • 按天切割的 catalina.*.log
  • localhost_access_log.*.txt

其中最关键的排查点通常是:

  • startup
  • error
  • failed
  • exception

四、为什么建议给 Tomcat 写 systemd 配置

原笔记提到:

  • 二进制安装的软件不像 RPM 包那样自带服务管理
  • 因此更适合自己写 systemd 配置来统一管理

这样做的好处是:

  • 可以用 systemctl 统一启停
  • 能纳入系统服务管理
  • 后续重启、开机自启、状态查看都更方便

五、Tomcat 的 systemd 配置该怎么写

原笔记先用 systemctl cat nginx 看了一个模板,再仿照写出了 Tomcat 服务文件。

示例:

[Unit]
Description=tomcat
After=network.target

[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/tomcat
ExecStart=/app/tools/tomcat/bin/startup.sh
ExecReload=/app/tools/tomcat/bin/shutdown.sh && /app/tools/tomcat/bin/startup.sh
ExecStop=/app/tools/tomcat/bin/shutdown.sh

[Install]
WantedBy=multi-user.target

配套环境文件:

JAVA_HOME=/app/tools/jdk
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin/
CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar

写完之后执行:

systemctl daemon-reload
systemctl enable tomcat

这就把手工运行的 Tomcat 纳入了标准系统服务管理。

六、Java 应用为什么会分成 warjar

原笔记把两种运行方式总结得很清楚:

形式 说明 场景
war 放进 Java 容器中运行,比如 Tomcat 更常见于传统 Web 应用
jar 直接用 java -jar 启动,往往内置容器 更适合独立应用

也就是说:

  • war 更依赖外部容器
  • jar 更像自带运行时环境的应用包

七、案例一:把 war 包放进 webapps

原笔记中的例子是 memtest.war
只要 Tomcat 正在运行,把 war 包放到:

/app/tools/tomcat/webapps/

Tomcat 就会:

  • 自动解压
  • 自动部署

原笔记中可以看到:

  • memtest.war
  • 自动生成的 memtest/
  • work/ 目录里生成的编译结果

访问:

http://192.168.1.20:8080/memtest/meminfo.jsp

即可验证应用已经运行。

八、案例二:直接运行 jar

原笔记第二个案例使用的是 nginxWebUI.jar
启动方式如下:

nohup java -jar -Dfile.encoding=UTF-8 /home/nginxWebUI/nginxWebUI.jar --server.port=8848 --project.home=/home/nginxWebUI/ > /dev/null &

这类方式的特点是:

  • 不需要额外 Tomcat
  • 只要有 JDK 就能运行
  • 常见于 Spring Boot 这类内置容器应用

原笔记还补充了几个参数说明,例如:

  • --server.port
  • --project.home
  • 数据库相关参数

本质上就是让应用通过命令行参数完成端口、配置和存储目录的定制。

九、小结

Tomcat 运维最常见的几个基础动作,原笔记基本都覆盖到了:

  • 先认识目录结构
  • 把 Tomcat 纳入 systemd 管理
  • 理解 warjar 的区别
  • 能分别跑通容器部署和 java -jar 部署

对 Java 运维入门来说,这几部分掌握之后,后面再学配置、排障和集群就更有抓手了。