23

我已经完成了以下设置来运行 Java Web 项目,但不知何故我的 Tomcat 不是从 Eclipse 开始的:

JAVA_HOME : C:\Program Files\Java\jdk1.6.0_03  
PATH : C:\Program Files\Java\jdk1.6.0_03\bin  
CATALINA_HOME : D:\javaworkspaces\apache-tomcat-7.0.27  

然后根据需要,我从 Eclipse 中设置了一个新服务器,并给出了 Tomcat 的安装路径。

正如一些论坛所建议的那样,我已经添加tomcat-juli.jar到类路径中。
尽管如此,当我尝试启动 Tomcat 服务器时,我仍然收到错误消息,因为 tomcat 没有在 45 秒内盯着看。

我收到以下日志消息:

Jul 26, 2012 5:49:34 PM org.apache.catalina.core.AprLifecycleListener init  
INFO: The APR based Apache Tomcat Native library which allows optimal performance in     production environments was not found on the java.library.path: C:\Program Files\Java\jre6\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:/Program Files/Java/jre7/bin/client;C:/Program Files/Java/jre7/bin;C:/Program Files/Java/jre7/lib/i386;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\TortoiseSVN\bin;C:\Program Files\Java\jdk1.6.0_03\bin;D:\eclipse-jee-indigo-SR2-win32\eclipse;;.  
Jul 26, 2012 5:49:34 PM org.apache.tomcat.util.digester.SetPropertiesRule   
 begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property         'source' to 'org.eclipse.jst.j2ee.server:JEE_Day01' did not find a matching property.  
Jul 26, 2012 5:49:34 PM org.apache.coyote.AbstractProtocol init  
INFO: Initializing ProtocolHandler ["http-bio-80"]  
Jul 26, 2012 5:49:35 PM org.apache.coyote.AbstractProtocol init  
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]  
Jul 26, 2012 5:49:35 PM org.apache.coyote.AbstractProtocol init  
SEVERE: Failed to initialize end point associated with ProtocolHandler ["ajp-bio-8009"]  
java.net.BindException: Address already in use: JVM_Bind <null>:8009  
at org.apache.tomcat.util.net.JIoEndpoint.bind(JIoEndpoint.java:393)
at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:566)
at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:417)
at org.apache.catalina.connector.Connector.initInternal(Connector.java:956)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
at org.apache.catalina.core.StandardService.initInternal(StandardService.java:559)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:814)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
at org.apache.catalina.startup.Catalina.load(Catalina.java:624)
at org.apache.catalina.startup.Catalina.load(Catalina.java:649)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:281)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:449)  
Caused by: java.net.BindException: Address already in use: JVM_Bind
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.PlainSocketImpl.bind(Unknown Source)
at java.net.ServerSocket.bind(Unknown Source)
at java.net.ServerSocket.<init>(Unknown Source)
at java.net.ServerSocket.<init>(Unknown Source)
at org.apache.tomcat.util.net.DefaultServerSocketFactory.createSocket(DefaultServerSocketFactory.java:49)
at org.apache.tomcat.util.net.JIoEndpoint.bind(JIoEndpoint.java:380)
... 16 more  
Jul 26, 2012 5:49:35 PM org.apache.catalina.core.StandardService initInternal    
    SEVERE: Failed to initialize connector [Connector[AJP/1.3-8009]]
org.apache.catalina.LifecycleException: Failed to initialize component [Connector[AJP/1.3-8009]]  
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:106)  
    at org.apache.catalina.core.StandardService.initInternal(StandardService.java:559)  
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:814)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
at org.apache.catalina.startup.Catalina.load(Catalina.java:624)
at org.apache.catalina.startup.Catalina.load(Catalina.java:649)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:281)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:449)  
Caused by: org.apache.catalina.LifecycleException: Protocol handler initialization failed
at org.apache.catalina.connector.Connector.initInternal(Connector.java:958)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
... 12 more

我已经提到了多个论坛,但我对这种情况非常不满。请指导我。

4

11 回答 11

24

这些行:

SEVERE: Failed to initialize end point associated with ProtocolHandler ["ajp-bio-8009"]
java.net.BindException: Address already in use: JVM_Bind <null>:8009  

暗示已经有一个服务在端口 8009 上运行。是否有一个 tomcat(带有 ajp)已经在运行?

如果需要在 8009 上运行的服务,您可以将 server.xml 中的连接器配置更改为如下所示:

<Connector port="8089" protocol="AJP/1.3" redirectPort="8443" />
于 2012-09-18T16:24:23.223 回答
10

它说端口号8009 已经被操作系统上运行的其他进程占用尝试搜索该进程并停止它或让你的tomcat在不同的(免费)端口上运行

于 2012-09-18T16:24:21.027 回答
7

杀死该端口(即 8009)上的相应(侦听)进程。使用

netstat -a -o -n

寻找进程的PID。它可能看起来像这样 TCP [::]:8009 [::]:0 LISTENING 892

使用 taskkill 命令杀死进程。例子:

taskkill /F /PID 892

于 2014-05-13T07:28:32.673 回答
5

java.net.BindException:地址已在使用中:JVM_Bind:8009

这意味着其他一些进程已经在使用这个端口。会不会是另一个 Tomcat 实例?

于 2012-09-18T16:24:28.013 回答
2

您不必更改 server.port 即可解决此问题...

Mac/Unix/Linux 用户:如果重启 Tomcat 后,这个问题依然存在,可能是因为 Tomcat 关闭不正确,还有与之关联的资源现在被锁定了。您可以通过运行以下命令查看这些资源的 PID:

lsof | grep tomcat

使用以下方法终止这些进程:

kill -15 <PID>

这应该可以解决您的问题。

最好使用kill -15命令来 TERM (-15) 进程而不是 SIGKILL (-9)。-15 开关向进程发送信号以开始其关闭阶段并清理有限资源。

于 2016-01-20T07:30:43.413 回答
0

尝试 :http://localhost:8089 如果它不起作用(或)试试这个: Set:JRE_HOME : C:\Program Files\Java\jre1.5.0_11 (取决于您的 JRE 版本)并添加 C:\ Program Files\Java\jre1.5.0_11(取决于您的 JRE 版本)\bin 到路径 Eclipse-> 转到 windows 首选项:服务器->RuntimeEnvironment 删除添加的服务器和引用并添加新的 TomcatServer

于 2012-09-18T17:33:05.857 回答
0

TIL:服务器上的其他人可以在端口 80 上启动 IIS 而不会告诉任何人。
如果你的tomcat配置了同一个端口,它也会报这个错误。
需要更改 IIS 或 tomcat 上的端口。

在 IIS 中修改端口:
管理工具 | Internet 信息服务 (IIS) 管理器
右键单击​​默认网站 | 编辑绑定...更改端口

-或者-

在 Tomcat 中修改端口:
打开 conf\server.xml 并更新标签中的端口值:

<Connector port="80" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443"
    URIEncoding="UTF-8"/>

重启Tomcat

享受 2 个网络服务。

于 2013-06-10T18:51:36.493 回答
0

其他东西正在使用端口 8009。

关闭使用 8009 的东西或更改 server.xml 以使用 8009 以外的其他端口

于 2014-08-08T06:22:20.613 回答
0

如果 tomcat 的连接器/关闭端口已被使用,通常会发生这种情况。首先,运行shutdown.bat(有时我们会错过一个tomcat实例已经在运行)接下来,在命令提示符下运行

netstat -aon | findstr 0.0:<your port number which is giving bind exception>

获取当前正在使用您的端口的应用程序的 PID。杀死该应用程序或使用运行时未列出的其他端口

netstat -a -o -n
于 2015-10-15T08:26:24.503 回答
0

使用免费端口一一更新所有可用端口。这必须解决问题

2019 年 7 月 31 日 16:28:30.641 严重 [main] org.apache.catalina.core.StandardServer.await StandardServer.await: create[localhost: 8005 ]: java.net.BindException: 地址已在使用中:JVM_Bind

于 2019-07-31T11:04:29.163 回答
0

其他 Tomcat 在同一端口上运行,因此最好使用 9 而不是 15 杀死

杀死 -9 PID

这对我很有帮助。

于 2020-01-24T11:15:10.660 回答