第一種:查看Servlet3.0中出現了新增注釋@WebServlet。
ervlet3.0中出現了新增注釋@WebServlet ,在Eclipse生成一個新的Servlet類時會自動增加@WebServlet注釋,改注釋會自動為我們配置web.xml,所以這時候我們再去配置web.xml就會產生沖突,tomcat就不能啟動。這個時候我們只需要刪除@WebServlet或者刪除web.xml配置就能正常啟動tomcat了。
第二種:.端口被占用(這個網上記載的很清楚,至於你想關閉別的進程的端口,還是修改tomcat的配置端口,自己百度,或者Google)
如果是這種小白可以直接重啟電腦試試
第一步,在開始菜單->運行->cmd->輸入netstat -ano,在本地地址那欄可以查看哪個進程占用了8080和8009端口(具體看你的Tomcat服務器是用什么端口的);
第二步,使用taskkill /pid 6856 /f 將端口關閉,其中6856代表占用窗口的PID,每台機子都不一樣,根據實際情況來
------------------------------------------------------------
一般有以上兩種情況導致的無法運行,報錯。由於我卸載了tomcat9,重新安裝了tomcat9,后來又卸載,重新安裝了tomcat8.5,還是會出現Server Tomcat Server at localhost failed to start。我也卸載了我的oxygen版本的eclipse(此版本是2017版本的),然后下載了最新的eclipse,又卸載掉最新的eclipse版本,重新下載oxygen版本,這個問題還是存在。再后來我有下載回來了最新版本的eclipse。
我說的那么啰嗦的原因是,如果出現Server Tomcat v9.0 Server at localhost failed to start,而且輸出錯誤信息:
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java...........
情況1:(先找到你的tomcat安裝路徑,在bin下找到shutdown.bat,雙擊關閉服務器,然后回到eclipse,右擊下面的服務器,remove項目,然后clean一下,再重新運行項目)

如果還是不行,那么重裝tomcat,因為tomcat才十幾M,下載直接解壓就可以用了。(前提是你配置好了環境,環境很好配,網上一大把資料)
這種情況我覺得一般可以通過重裝tomcat服務器解決。
情況2:可以打開正常的靜態網頁,但是一旦轉發servlet,就報錯!(如下圖)


這種情況的話,說明你tomcat服務器沒毛病,只是你程序本身的問題,404,表示你的問題,因為服務器找不到資源,這是你自己的鍋。
一般出現這種問題,絕對是你的servlet配置出現了問題,首先你要知道servlet這玩意已經出來這么久了,tomcat服務器對它的穩定性絕逼非常穩定,因為sun公司的程序員可不是吃素的,玩了這么久的servlet,對servlet的支持性如果不穩定的話,那還要他們干嘛!
所以問題出現在你身上后就容易解決了。
解決思路1:如果你是用web.xml配置的,那么你絕對某個配置寫錯了,才會引起錯誤,這個需要你自己看看web.xml下面的servlet配置的名稱和地址是否正確,然后進行修改!
解決思路2:如果你使用的是servlet3.0方式進行配置的話,你一定要確報你的jdk版本是1.6及1.6以上的,因為這是1.6或1.6以上才支持servlet注解配置的。所以確定jdk版本以后,你還要注意你的WebServelt("/demo1"),例如這個注解配置,你是否遺漏了很重要,卻不起眼的“/”,這個小斜杠,然后檢查你的所有servlet,逐個修改。
解決思路3:如果你是采用web.xml,加上servlet3.0的注解雙管齊下進行開發的,那么恭喜你,這樣出錯率更大,因為你如果在web.xml下面配置完成了的話,還使用servlet3.0注解配置,那么可能無意間使用了相同名稱可能會報錯,或者web.xml有一個配置,為Boolean值,錯誤定義了他的值,你將會報錯,即使你的servlet注解和web.xml的配置沒有相同名稱。
總結一下:
1.就是如果你是整個tomcat,服務器出錯了,那么可以選擇重新安裝,然后重新配置項目;也可以關閉服務器,移除項目,再重新運行項目。
2.如果你是單純servelt,訪問404錯誤,那么不要懷疑是tomcat的jar包和你引進的jar包引起的沖突導致你無法使用servlet,因為這種情況微乎其微,對於一個剛入門,才學習到servlet的人來說,更是如此,你應該多看看自己的代碼,因為95%以上是你的代碼不規范,或者邏輯錯誤引發的問題!那么唯一可以做的就是檢查你的代碼!
goodbye!!!
