我们有一个在 Tomcat 7 上运行的 Web 应用程序,我们正在迁移到 Tomcat 8,现在也依赖于该应用程序的内部微服务。我们使用 Netbeans。
我已经对配置进行了必要的更改,这样我就可以从命令行启动微服务应用程序,然后在我的机器上启动 Web 应用程序。但是,当我尝试从 Netbeans 中运行 Web 应用程序时,它告诉我“Tomcat 启动失败,服务器端口 8443 已被使用”。
我不知道为什么当从 Netbeans 中运行时该端口被报告为正在使用,但如果从命令行运行具有相同 Web 应用程序的同一服务器则不会。有没有人知道要检查什么?
最佳答案
取得进展的快速方法是使用 8443 以外的端口。这不一定能解决您遇到的问题,但可以避免它。为此:
- 停止 Tomcat。
- 选择 8443 以外的端口。我选择了8447。
- 从控制台运行以下命令以验证端口 8447 尚未被使用:
网络统计-aon |查找字符串 8447
- 这是 Windows 的语法 - 我认为它在 Linux 上有所不同。如果没有显示,则 8447 是一个可用端口。否则继续选择不同的端口号,直到找到一个可用的端口号。
- 对位于目录 {Tomcat dir}/conf 中的 server.xml 进行备份(以便您可以在必要时回归)。
- 编辑 server.xml 将 8443 的所有实例替换为 8447 或您选择的任何替代端口,然后保存文件。<
- 启动 Tomcat。它将使用端口 8447 而不是 8443 出现。您可以在 NetBeans 中显示的 Tomcat 日志中验证这一点;查找字符串 https-openssl-apr-8447 以验证:
09-Jan-2018 02:07:26.279 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"] 09-Jan-2018 02:07:26.285 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["https-openssl-apr-8447"] 09-Jan-2018 02:07:26.290 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"] 09-Jan-2018 02:07:26.293 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 2585 ms
- 您现在应该可以测试您的网络应用程序了。我刚刚验证了此方法适用于 Tomcat 9,但我确信它也适用于 Tomcat 8。
作为一个单独的问题,一旦端口8447 一切正常,运行netstat -aon | findstr 8443 查看 Tomcat 运行时端口 8443 是否仍在使用。如果是这样,那么(在 Windows 上)获取仍在使用该端口的进程的 PID,然后在任务管理器的详细信息选项卡上查找该 PID。这是一个屏幕截图,显示在我的例子中端口 8447 被 PID 2340 使用,它是 Tomcat 的 java.exe 实例:
如果这些都不能解决任何问题:
- 请告知正在使用哪个操作系统和哪个版本的 NetBeans。
- 将 NetBeans 中 Tomcat 日志的相关部分添加到您的帖子中。
关于java - 当 Netbeans 用完时,Tomcat 8 的端口使用是否会干扰自身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48078898/