tomcat 本地测试war包启动总结

本文总结了在本地使用Tomcat测试WAR包启动时遇到的APR错误,探讨了Tomcat的SSL实现,包括JSSE和APR的区别。通过分析,发现Tomcat 6默认使用JSSE,而Tomcat 7使用APR。解决方法是修改server.xml中的protocol属性。此外,文章还提及SpringBoot打包成WAR包在Tomcat上的启动问题,建议使用Maven的package命令进行打包。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

严重: Failed to initialize end point associated with ProtocolHandler ["http-apr-8443"]
java.lang.Exception: Connector attribute SSLCertificateFile must be defined when using SSL with APR

 

仔细看上面的异常信息发现这是APR报的错误。Tomcat 6也有APR包但我从来都没用过。为此查看了Tomcat的ssl-how,在“Edit the Tomcat Configuration File”一节中说到:

  • Tomcat提供了两个SSL实现,一个是JSSE实现,另一个是APR实现。
  • Tomcat将自动选择使用哪个实现,即如果安装了APR则自动选择APR,否则选择JSSE。
  • 如果不希望让Tomcat自动选择,而是我们自己指定一个实现则可通过protocol定义。

 

我又查看了6.0的相同说明,里面与7.0的说明一模一样。因此问题只可能是:是否安装了APR包。

以前只听说过APR但没弄过。APR是什么文件?后来才发现APR文件名为tcnative-1.dll。进一步检查6.0和7.0的安装目录,结果发现6.0里没这个dll文件,而7.0里有。换句话说,6.0默认使用JSSE实现,而7.0默认使用APR实现。

弄明白缘由就好办了。由于习惯使用6.0的配置方式(即JSEE实现),因此只要把上面conf\server.xml里的protocol修改一下就行了:

Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS"
               keystoreFile="${user.home}/.keystore"
               keystorePass="changeit" />

参考:https://blog.youkuaiyun.com/xwq911/article/details/49471383

**************************分割线********************************

后续更新:

springboot 打包 war包,本地tomcat 测试启动访问错误。

1、tomcat7启动升级tomcat8,tomcat7启动有些奇奇怪怪的错误,网上说什么jar包的问题,试了很多也没啥反应,一开始网上看资料说这个版本问题,头铁没升级,折腾半天。

2、spring boot 打包问题:用maven打包,idea右侧点开,点开  lifescycle,双击package;网上好多idea打包用 Artifacts打包的很麻烦,用maven很简单。

3、service.xml配置:

             <Context docBase="D:\tomcat8\webapps\api-system-1.0.0.RELEASE.war" path="/api" reloadable="true"/>

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值