2012-09-18 33 views
22

我做以下設置運行Java Web項目,但不知何故我的Tomcat沒有從Eclipse的開始:的Tomcat沒有啓動(投擲java.net.BindException:)

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 

我已經提到多次論壇,但我嚴重套牢的情況。請指導我。

回答

22

這些行:

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中更改連接器配置類似如下:地址已在使用:JVM_Bind:8009

<Connector port="8089" protocol="AJP/1.3" redirectPort="8443" /> 
+0

thanx .. it worked – user1649415

5

java.net.BindException

這意味着其他一些進程已經在使用此端口。它可能是另一個Tomcat實例嗎?

0

嘗試:HTTP://本地主機:8089 如果沒有工作(或) 試試這個:設置:JRE_HOME:C:\ Program Files文件\的Java \ jre1.5.0_11(取決於您的JRE版本)並將C:\ Program Files \ Java \ jre1.5.0_11(取決於您的JRE版本)\ bin添加到路徑 Eclipse->轉到Windows首選項:server-> RuntimeEnvironment刪除添加的服務器並重新添加並添加新的TomcatServer

0

TIL:服務器上的其他人可以在端口80上啓動IIS,但不告訴任何人。
如果你的tomcat配置了相同的端口,它也會報告這個錯誤。
IIS或tomcat上的端口將需要更改。

修改IIS中的端口:
管理工具| Internet信息服務(IIS)管理器
右鍵單擊默認網站|編輯綁定... 更改端口

- 或 -

要修改Tomcat中的端口:
開放的conf \服務器。xml和更新標籤的端口值:

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

重新啓動Tomcat

享受2個Web服務。

6

殺死該端口即8009 使用

netstat -a -o -n

查找進程的PID在相應的(收聽)過程。它可能看起來像這樣 TCP [::]:8009 [::]:0 LISTENING 892

使用taskkill命令殺死進程。 例如:

taskkill /F /PID 892

+0

要殺死進程,您可能需要管理員權限。爲此,請在Windows開始搜索框中查找「cmd」,右鍵單擊「cmd.exe」並選擇「以管理員身份打開」 –

0

別的東西正在使用8009端口

要麼關閉正在使用8009或更改server.xml中使用其他端口超過8009

的東西
0

如果tomcat的Connector/shutdown端口已被使用,通常會發生這種情況。 首先,運行shutdown.bat(有時我們錯過了tomcat的一個實例已在運行) 接下來,在命令提示符下運行

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

爲了獲得當前正在使用的應用程序的PID你港口。終止所有應用程序或使用未列出的其他一些端口,當你運行

netstat -a -o -n 
2

你不應該改變server.port來解決這個問題...

的Mac/Unix的/ Linux用戶:如果在重新啓動Tomcat後,此問題仍然存在,則可能是因爲Tomcat被不正確關閉,並且仍有與其關聯的資源現在被鎖定。 可以通過運行這個命令來查看這些資源的PID:

lsof | grep tomcat 

使用終止這些進程:

kill -15 <PID> 

這應該可以解決您的問題。

使用殺-15命令TERM(-15)的過程,而不是SIGKILL(-9)是優選的。 -15開關向進程發送信號以開始關閉階段並清理有界資源。