运行 Java Web 应用程序并不复杂。Apache Tomcat 为您提供了一个可靠的开源平台来部署您的应用程序,并且正确设置它会对您的 Web 应用程序的性能产生重大影响。
无论您是在VPS上运行 Tomcat进行开发,还是扩展到专用服务器进行生产,本文都会引导您了解所有需要了解的内容。您将学习如何安装、配置和优化 Tomcat 以满足您的特定需求。
Apache Tomcat 是 Web 服务器和 Java 应用程序之间的桥梁。它是一个开源 servlet 容器,可让您高效运行 Java Web 应用程序。
Tomcat 是 Java 应用程序的专用引擎。常规 Web 服务器处理静态内容(如图像或 HTML 文件),而 Tomcat 处理 Java servlet 和 JavaServer Pages (JSP) 以创建动态 Web 内容。它提供 Java 应用程序处理 Web 请求和生成响应所需的运行时环境。
Tomcat 的架构包括:
作为一个开源应用服务器,Tomcat 为您提供:
让我们看看 Tomcat 的具体功能,这些功能使其在 Web 应用程序托管方面广受欢迎。
Apache Tomcat 具有丰富的功能,使其成为在 Apache HTTP 服务器上托管 Java 应用程序的热门选择。让我们探索对您的 Web 应用程序最重要的功能。
Servlet 处理
作为 Java servlet 容器,Tomcat 可高效处理 Web 请求和响应。它可同时处理多个请求,非常适合繁忙的 Web 应用程序。
JSP 支持
内置 JavaServer Pages (JSP) 处理功能让您轻松创建动态 Web 内容。Tomcat 会自动将您的 JSP 文件编译为 servlet,以获得更好的性能。
HTTP 连接器
Coyote 连接器管理所有传入的 HTTP 连接,提供:
热部署
无需重新启动服务器即可部署您的 WAR 文件,从而使您的应用程序在更新期间保持可用。
资源管理
Tomcat 可高效处理您的 JVM(Java 虚拟机)资源,具有以下功能:
Tomcat 包含使其适合于商业应用程序的功能:
让我们看看开始安装 Tomcat 需要什么。
在安装之前,请确保您已准备好顺利完成 Tomcat 服务器设置过程所需的一切。
硬件需求
您的服务器应该具有:
操作系统
Tomcat 可在任何支持 Java 的系统上运行,包括:
Java 环境
Tomcat 需要 Java 开发工具包 (JDK) 或 Java 运行时环境 (JRE):
网络要求
确保这些端口可用:
考虑安装的其他工具
:
现在您已经准备好一切,让我们继续安装过程。
让我们来看看如何在不同平台上安装 Tomcat。我们将介绍最常见的安装方法,以帮助您选择最适合您需求的方法。
wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.x/bin/apache-tomcat-9.0.x.tar.gz
tar xzvf apache-tomcat-9.0.x.tar.gz
sudo mv apache-tomcat-9.0.x /opt/tomcat
sudo useradd -r -m -U -d /opt/tomcat -s /bin/false tomcat
sudo chown -R tomcat: /opt/tomcat
sudo chmod +x /opt/tomcat/bin/*.sh
对于 Ubuntu/Debian:
sudo apt update
sudo apt install tomcat9
sudo apt install tomcat9-admin
对于 CentOS/RHEL:
sudo yum install tomcat
sudo systemctl start tomcat
sudo apt update
sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker
# Pull official Tomcat image
docker pull tomcat:9.0
# Run container with port mapping
docker run -d \
--name tomcat \
-p 8080:8080 \
-v tomcat-data:/usr/local/tomcat/webapps \
tomcat:9.0
# Check if container is running
docker ps
# View container logs
docker logs tomcat
# Access container shell
docker exec -it tomcat bash
sudo nano /etc/systemd/system/tomcat.service
[Unit]
Description=Apache Tomcat
After=network.target
[Service]
Type=forking
User=tomcat
Environment="JAVA_HOME=/usr/lib/jvm/java-11-openjdk"
Environment="CATALINA_HOME=/opt/tomcat"
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
[Install]
WantedBy=multi-user.target
# Linux
sudo systemctl start tomcat
# Windows
net start tomcat9
sudo systemctl status tomcat
http://your-server-ip:8080
http://your-server-ip:8080/manager
下面我们继续讨论 Tomcat 性能优化。
让我们优化您的 Tomcat 安装,以便高效处理 Web 应用程序。这就像调整汽车一样 – 微小的调整可以对性能产生很大的影响。
正如您的计算机需要足够的 RAM 才能顺利运行一样,Tomcat 也需要适当的内存分配。您可以在 catalina.sh 或 setenv.sh 中配置此项:
export CATALINA_OPTS="$CATALINA_OPTS -Xms512m -Xmx1024m -XX:MaxPermSize=256m"
这些设置的含义:
对于大多数中小型应用程序来说,从 512MB 开始并增加到 1GB 效果很好。
将线程视为服务工作者 – 您需要足够的线程来处理客户请求,但不要太多以免互相干扰。修改 server.xml:
<Connector port="8080" protocol="HTTP/1.1"
maxThreads="400"
minSpareThreads="25"
maxSpareThreads="75"
acceptCount="100"
connectionTimeout="20000"
enableLookups="false" />
这些设置控制:
就像通过电子邮件发送文件之前对其进行压缩一样,Tomcat 可以压缩数据以节省带宽:
<Connector port="8080" protocol="HTTP/1.1"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript" />
这有助于您的服务器更快地发送信息,对于互联网连接速度较慢的用户尤其有用。
缓存就像将经常使用的物品放在伸手可及的地方,而不是每次都去储藏室:
<Context>
<Resources cachingAllowed="true" cacheMaxSize="100000" />
</Context>
这会告诉 Tomcat 让经常访问的文件随时可用,从而加快用户的响应时间。
让我们继续在新优化的服务器上部署应用程序。
在 Tomcat 上部署应用程序就像搬进新家一样 – 您需要知道所有东西都放在哪里以及如何正确设置。让我们探索启动和运行应用程序的不同方法。
Tomcat 提供了几种部署应用程序的方法:
最常见的方法是使用 WAR 文件:
# Copy WAR file to webapps directory
cp your-application.war /opt/tomcat/webapps/
# Watch deployment in logs
tail -f /opt/tomcat/logs/catalina.out
Tomcat 自动解压并部署位于 webapps 目录中的 WAR 文件。
<tomcat-users>
<role rolename="manager-gui"/>
<user username="admin" password="secure_password" roles="manager-gui"/>
</tomcat-users>
http://your-server:8080/manager/html
您部署的应用程序遵循以下结构:
/webapps/
└── your-application/
├── WEB-INF/
│ ├── web.xml
│ ├── classes/
│ └── lib/
└── resources/
热部署就像拥有一家在装修期间仍营业的商店一样 – 您无需关闭服务器即可更新应用程序。以下是在 server.xml 中设置的方法:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
将这些设置视为开关:
对于生产环境:
对于业务关键型应用程序,您可能需要关闭自动部署(autoDeploy=”false”)以更好地控制更新。
即使精心规划的部署也可能遇到问题。以下是最常见的问题及其解决方法:
文件权限问题
检查 Tomcat 是否有权限访问您的文件:
# View current permissions
ls -l /opt/tomcat/webapps/your-application
# Fix permissions if needed
chown -R tomcat:tomcat /opt/tomcat/webapps/your-application
缺少库
确保所有必需的组件都位于您的 WEB-INF/lib 文件夹中。
内存问题
观察服务器的内存使用情况:
# Check Tomcat’s memory usage ps aux | grep tomca
将 context.xml 视为应用程序的个人设置文件。它用于存储重要信息,例如数据库连接和特定于环境的设置:
<Context>
<!-- Database connection settings -->
<Environment name="dbUrl"
value="jdbc:mysql://localhost:3306/mydb"
type="java.lang.String" override="false"/>
</Context>
这使您的配置保持井然有序,并使您更容易更新设置而无需更改您的应用程序代码。
运行 Web 应用程序时,安全性不是可选的。让我们了解增强 Apache Tomcat 安全性的基本步骤。
删除默认应用程序
首先,通过删除不必要的默认应用程序来清理:
cd $CATALINA_HOME/webapps
rm -rf docs examples manager host-manager ROOT
想象一下,这就像取出藏在门垫下的备用钥匙——入口点越少,安全性越好。
保护管理器界面
在 tomcat-users.xml 中为管理界面创建强凭证:
<tomcat-users>
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="admin"
password="your_strong_password_here"
roles="manager-gui,admin-gui"/>
</tomcat-users>
在 context.xml 中配置远程访问
限制管理器对特定 IP 地址的访问:
<Context antiResourceLocking="false">
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.0\.0\.1|192\.168\.1\.*"/>
</Context>
启用HTTPS加密数据传输:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
type="RSA" />
</SSLHostConfig>
</Connector>
可以将 SSL 想象成用密封的信封而不是明信片发送信件 – 它在传输过程中保持数据的私密性。
在 web.xml 中添加安全标头,以防范常见的 Web 漏洞:
<filter>
<filter-name>httpHeaderSecurity</filter-name>
<filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
</filter>
让我们继续解决您可能遇到的常见问题。
当出现问题时,采用系统的方法对 Tomcat 进行故障排除可以节省时间和精力。让我们看看常见问题及其解决方案。
服务器无法启动
首先,检查这些常见的原因:
# Check if ports are already in use
sudo netstat -tulpn | grep LISTEN
# Verify Java installation
java -version
# Check Tomcat logs
tail -f /opt/tomcat/logs/catalina.out
内存问题
如果 Tomcat 意外停止,则可能是内存不足:
# Check memory usage
ps aux | grep tomcat
# Review garbage collection logs
tail -f /opt/tomcat/logs/gc.log
响应时间缓慢
性能缓慢通常有简单的原因:
监控以下指标:
# Check system resources
top -u tomcat
# View active connections
netstat -an | grep 8080 | wc -l
常见应用程序问题及其解决方法:
让我们将 Tomcat 与其他应用服务器进行比较,以了解它的优势和局限性。
了解 Tomcat 与其他替代方案的比较有助于您确认所使用的工具是否适合您的需求。让我们看看 Tomcat 与其他流行选项的比较结果如何。
特征 | Tomcat | JBoss/WildFly | GlassFish | Jetty |
---|---|---|---|---|
启动时间 | 快速 | 慢 | 中等 | 非常快 |
内存使用情况 | 光 | 重 | 中等 | 光 |
配置 | 简单 | 复杂 | 中等 | 简单 |
全面支持 JEE | 否 | 是 | 是 | 否 |
学习曲线 | 低 | 高 | 中等 | 低 |
当您需要以下条件时,Tomcat 效果最佳:
当您需要时请查看其他选项:
让我们总结一下管理 Tomcat 服务器的一些最佳实践。
为了使您的服务器平稳运行,请遵循以下经过验证的 Tomcat 管理最佳实践:
通过遵循这些实践,您将为您的应用程序维护一个强大、安全和高效的 Tomcat 环境。