Server Tomcat v9.0 Server at localhost failed to start和修改web.xml文件

Server Tomcat v9.0 Server at localhost failed to start

     出現這個問題主要原因是由於某個項目web.xml文件裏面的配置信息出了問題

可以把最後改動的項目Remove,重新啓動tomcat如果能啓動就是該項目的web.xml的問題。

<servlet>
		<servlet-name>dengluServlet</servlet-name>
		<servlet-class>dengluServlet</servlet-class>
  </servlet>

<servlet-mapping>
  	<servlet-name>dengluServlet</servlet-name>
  	<url-pattern>/dengluServlet</url-pattern>
</servlet-mapping>

在修改這個web.xml文件是,不小心把<servlet>註釋掉了,然後就造成下面的<servlet-mapping>執行出錯,tomcat啓動失敗

 

 

 

修改Web.xml就會造成Eclipse長時間未響應

  主要原因是由於web.xml的web-app裏面的version版本不對,網上有的說在Eclipse創建Dynamic Web Project時自動生成web.xml文件不會導致這個錯誤,但是我的仍然會未響應。最後自己改成了3.0就好了

這是我自己修改的:

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
id="WebApp_ID" version="3.0">

這是Eclipse自動生成的:

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" 
id="WebApp_ID" version="4.0">

 

 

Several ports (8005, 8080, 8009) required by Tomcat v9.0 Server at localhost are already in use. 

這個錯誤是指這幾個端口沒有被釋放掉,導致tomcat服務器無法啓動。主要是由於之前啓動的的tomcat異常關閉導致的

解決方法

1.在cmd裏面輸入netstat -ano

2找到TCP連接端口號爲8080那條記錄的PID(即該行的最後一列

3.在任務管理器的進程選項中中找到相應的PID後關閉即可(如果PID爲0,代表系統進程,千萬別關。一般要關閉的名字是java之類的)

 

PID爲0的意思:(設計TCP連接的原理)

通過仔細觀察,我們可以發現,命令結果列出的所有PID爲0的通信的狀態均爲Time_Wait,而決不會是Established建立狀態或者是Listening監聽狀態,這個就要涉及到一個TCP Socket的問題了,有興趣深入研究的朋友們可以查閱一下更多的有關文章,因爲概念性的東西太多了,因此我們在此僅進行一個簡要的解釋。
    原因是這樣的:
    一、關於Time_Wait狀態:
          TCP TIME-WAIT 延遲斷開TCP 連接時,套接字對被置於一種稱爲TIME-WAIT 的狀態。這樣,新的連接不會使用相同的協議、源 IP 地址、目標 IP 地址、源端口和目標端口,直到經過足夠長的時間後,確保任何可能被錯誤路由或延遲的段沒有被異常傳送。因此,Time_Wait不是多餘的狀態,而是爲了保證通信的正確性、準確性而存在的。而且,這樣的狀態往往都交給系統空閒進程處理了,因爲具體的應用程序已經完成了通信過程,發出了數據。因此,這裏PID爲0的通信均是已“斷開”的曾經被進程使用過的連接,而且還沒有釋放端口。
    二、關於端口的釋放:
          什麼時候釋放,怎樣釋放呢?我們將這種套接字對不被其它連接重新使用的時間長度指定爲兩個MSL(最大段生存時間),即4 分鐘。對於Windows NT 系統來說,這是默認設置。然而,在此默認設置下,某些網絡應用程序在很短時間內執行多個出站連接,也就可能會在端口收回前用完所有的可用端口。
    三、我們所看到的空閒進程端口占用的特點:
          因爲總是有程序要交替或者分段連續地訪問網絡,而且同一個程序在端口被完全釋放之前,可能還會再次使用,就算不再使用,爲了保證正確通信,也要等待兩個MSL,故處於Time_Wait。因此我們看到的情況是,系統空閒進程佔用了一些端口,而且這些端口、端口的數量隨着每次執行netstat -a -n -o命令時也會有變化。因爲可能在某個處於Time_Wait的端口被完全釋放之前,又有一個連接不再需要某個端口了,故新的一個端口又被置於Time_Wait狀態,過了不久,前一個終於被釋放了,於是您還是看到有這樣的狀態,但是端口是不一樣的。對於一個接入網絡並且安裝了需要網絡的應用軟件的操作系統,這個過程是無限循環的,因此您總是能夠看到處於Time_Wait狀態的被PID=0的系統空閒進程“使用”的連接。

 

發佈了14 篇原創文章 · 獲贊 7 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章