Tomcat
Tomcat 是一个 Java Servlet 容器(应用服务器),用于运行 Java web 应用(Servlet / JSP / WAR)。 Nginx 不是 Servlet 容器——它不能直接运行 Java servlet,但常用于静态文件、反向代理、负载均衡和 TLS 终端,通常会把请求转发到 Tomcat 或其他应用服务器。
下载与安装
官方下载地址:https://tomcat.apache.org/
解压(或安装)后进入 Tomcat 根目录。Windows 下启动脚本位于 bin\startup.bat(或 catalina.bat),Linux/macOS 下为 bin/startup.sh(或 catalina.sh)。生产环境通常使用 systemd 服务或进程管理器来启动和守护 Tomcat(不要直接在生产机上双击脚本)。
环境变量 :确保系统已安装合适版本的 Java 并设置 JAVA_HOME(以及可选的 CATALINA_HOME / CATALINA_BASE)。在选择 Tomcat 版本前,请先确认该 Tomcat 对应的 JDK/Java 要求(参见 Tomcat 官方的“Which version” 页面)。
本地截图
关于 Java EE / Jakarta EE(简明)
背景 :Oracle 在 2017 年把 Java EE 移交给 Eclipse Foundation,随后更名为 Jakarta EE。:contentReference[oaicite:4]{index=4}
包名变化 :从 Jakarta EE 9 开始,标准 API 的包名由 javax.* 迁移为 jakarta.*。这会导致依赖旧 javax.* 的应用在 Tomcat 10(及更高、基于 Jakarta API 的容器)上无法直接运行,除非进行迁移或使用兼容工具。:contentReference[oaicite:5]{index=5}
实务建议 :
如果你的项目还使用 javax.*(很多老项目/第三方库如此),可以继续使用 Tomcat 9.x(兼容 javax)直到完成迁移;
或者使用 Apache Tomcat 的迁移工具 (migration tool for Jakarta EE)将已有的 WAR/binaries 从 javax 转为 jakarta;也可以在源码层面升级依赖并重新编译。:contentReference[oaicite:6]{index=6}
部署(常用方法)
直接部署 WAR :把 yourapp.war 拷贝到 Tomcat 的 webapps/ 目录,Tomcat 会自动展开并部署(默认)。这是最简单的本地部署方式。:contentReference[oaicite:7]{index=7}
使用 Manager :通过 Tomcat Manager 可以网页方式或 HTTP 接口部署、卸载应用;需要在 conf/tomcat-users.xml 为管理用户配置 manager-gui / manager-script 等角色。开发/测试环境常用此方式。:contentReference[oaicite:8]{index=8}
其它方式 :还可以使用 CI/CD 工具、远程部署脚本或 Tomcat Deployer 客户端等流程化部署方式(适合生产)。:contentReference[oaicite:9]{index=9}
常见配置与注意事项
默认端口 :8080(在 conf/server.xml 中可修改)。
安全建议 :不要直接把 Tomcat 端口暴露在公网;在生产环境常见做法是把 Nginx 放在前面做反向代理、TLS 终端和静态资源处理,Tomcat 只监听内网访问。
JDK 版本 :务必根据你选的 Tomcat 版本检查所需的 Java 版本(64-bit),并使用受支持的 JDK。官方“Which version”页面有对应表格。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 <?xml version="1.0" encoding="UTF-8" ?> <Server port ="-1" shutdown ="SHUTDOWN" > <Listener className ="org.apache.catalina.startup.VersionLoggerListener" /> <Listener className ="org.apache.catalina.core.AprLifecycleListener" /> <Listener className ="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className ="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className ="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <GlobalNamingResources > <Resource name ="UserDatabase" auth ="Container" type ="org.apache.catalina.UserDatabase" description ="User database that can be updated and saved" factory ="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname ="conf/tomcat-users.xml" /> </GlobalNamingResources > <Service name ="Catalina" > <Connector port ="8080" protocol ="HTTP/1.1" connectionTimeout ="20000" redirectPort ="8443" /> <UpgradeProtocol className ="org.apache.coyote.http2.Http2Protocol" /> <SSLHostConfig > <Certificate certificateKeystoreFile ="conf/localhost-rsa.jks" certificateKeystorePassword ="changeit" type ="RSA" /> </SSLHostConfig > </Connector > --> <Engine name ="Catalina" defaultHost ="localhost" > <Realm className ="org.apache.catalina.realm.LockOutRealm" > <Realm className ="org.apache.catalina.realm.UserDatabaseRealm" resourceName ="UserDatabase" /> </Realm > <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 > </Engine > </Service > </Server >
快速参考(链接)