当我试图在Eclipse中的Tomcat上运行一个简单的JSP程序时,我得到了以下错误。

Tomcat v6.0服务器在本地主机上所需的几个端口(8005、8080、8009)已经被使用。服务器可能已经在另一个进程中运行,或者某个系统进程正在使用该端口。要启动此服务器,您需要停止其他进程或更改端口号。

这是如何引起的,我该如何解决它?


当前回答

在windows中打开任务管理器(Ctrl+Alt+Delete),进入服务选项卡,然后右键单击tomcat,选择停止,然后在eclipse中启动

其他回答

如果你在mac环境下,这是我所做的。

从终端找到运行在该端口上的进程id,例如8080:

lsof -i :8080

杀死它:

kill -9 <PID>  

例子:

结果如下:

MacSys:bin krunal.$ lsof -i :8080

COMMAND   PID     USER   FD   TYPE     DEVICE  SIZE/OFF   NODE  NAME
java     21347   krunal  52u  IPv6      XXX      0t0      TCP  *:http-xxx (LISTEN)

杀死它:(kill -9 21347)

如果使用Eclipse,则双击服务器,双击tomcat服务器,然后将打开一个文件。在该文件中,将HTTP端口更改为其他端口号并保存(Ctrl+S),然后再次启动服务器。

当Apache Tomcat不能正确终止时,即使发送了关闭指令,也会出现这个问题。在我使用Tomcat 8的情况下,这种情况经常发生,令人讨厌。幸运的是,您可以使用Windows PowerShell和netstat命令创建一个简单的脚本来终止进程。

下面的PowerShell脚本将解析netstat的输出,以找到监听127.0.0.1:8005的任何进程,提取其PID,然后杀死该进程:

netstat -a -o -n `
 | select -skip 4 `
 | % {$a = $_ -split ' {3,}'; New-Object 'PSObject' -Property @{Original=$_;Fields=$a}} `
 | ? {$_.Fields[1] -match '127\.0\.0\.1\:8005$'} `
 | % {Write-Host "Killing PID" $_.Fields[4] "..."; taskkill /F /PID $_.Fields[4] }

如果server.xml将Tomcat配置为使用不同的端口或IP,则相应地编辑脚本第四行上的正则表达式。

最后,我应该指出,Linux上的情况要好一些,因为您可以指示Tomcat在启动时将其PID保存到一个文件中,然后使用开关强制关闭—用于nix系统的关闭脚本已经具有杀死进程的能力,并且不需要使用netstat进行探测工作。

kill $(ps -aef | grep java | grep apache | awk '{print $2}')

无需重新启动Eclipse 如果您得到上述错误,只需在终端中输入这一行 再次在Eclipse中启动tomcat。 仅适用于Linux系统(Ubuntu ..等)

如果您在Eclipse中的Java EE前景中,并试图以调试模式在Eclipse中启动Tomcat服务器,那么您将得到这样的错误。您必须在Eclipse中切换到预调试。我就这样解决了我的问题。