如何脱离Eclipse在Tomcat上运行Maven Web应用?
解决Tomcat部署WAR包无法访问的问题
这种情况我碰到过好多次,先别着急改XML,咱们一步步排查和配置:
先排查基础问题,大概率能解决
- 确认WAR包是否正确生成:别用Eclipse自带的导出功能,最好打开命令行到项目根目录,执行
mvn clean package生成WAR包——Maven构建的包会自动把compile范围的依赖打包进去,避免Eclipse导出时遗漏配置文件或依赖。 - 查看Tomcat启动日志:启动Tomcat后,去
Tomcat目录/logs下翻catalina.out或者localhost.log,有没有报错?比如数据库驱动找不到、项目初始化抛出异常,这些都会直接导致项目无法访问。 - 核对访问路径:默认情况下,Tomcat会把webapps下的WAR包解压成同名文件夹,访问路径就是
http://localhost:8080/你的WAR包文件名(如果WAR包叫ROOT.war,直接访问http://localhost:8080就行)。如果你在Eclipse里给项目设了自定义上下文路径,这里要对应上。
如果基础排查没问题,再来看需要调整XML的场景:
1. 自定义上下文路径/数据源:配置Context文件
如果需要自定义访问路径、或者想把数据库连接池交给Tomcat管理,就需要配置Context文件:
在Tomcat的conf/Catalina/localhost目录下,创建一个XML文件,文件名就是你想要的上下文路径(比如想通过http://localhost:8080/mywebapp访问,就命名为mywebapp.xml),内容示例:
<Context docBase="D:/tomcat/webapps/你的项目WAR包名.war" reloadable="true"> <!-- 配置MySQL连接池(如果需要的话) --> <Resource name="jdbc/MyDB" auth="Container" type="javax.sql.DataSource" driverClassName="com.mysql.cj.jdbc.Driver" url="jdbc:mysql://localhost:3306/你的数据库名?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC" username="你的数据库账号" password="你的数据库密码" maxTotal="20" maxIdle="10" maxWaitMillis="-1"/> </Context>
这样配置后,Tomcat启动时会自动加载这个配置,甚至WAR包不用放在webapps目录里,只要docBase指向正确的WAR路径就行。
2. 确保MySQL驱动能被Tomcat找到
因为你的项目关联了MySQL,这里容易踩坑:
- 如果Maven里MySQL驱动的依赖范围是
provided(意思是由容器提供),那必须把mysql-connector-java-x.x.x.jar放到Tomcat的lib目录下,否则Tomcat启动时会找不到驱动,数据库连不上,项目自然启动失败。 - 检查项目里的数据库配置文件(比如
db.properties、Spring配置文件),确保数据库地址、账号密码和本地MySQL的配置一致——别在Eclipse里用了测试环境的配置,到Tomcat里忘了改。
3. 全局web.xml(一般不用改)
除非你的项目有特殊的全局配置需求(比如自定义错误页面、强制编码的Filter),否则不用修改Tomcat全局的conf/web.xml。如果在Eclipse里运行正常,这一步可以跳过。
最后提醒:修改任何配置后,一定要重启Tomcat,并且清空Tomcat/work/Catalina/localhost下对应项目的缓存目录,避免旧缓存导致的奇怪问题。
内容的提问来源于stack exchange,提问作者Arnaud Spaeth
相关产品推荐
相关产品推荐

