網站首頁 編程語言 正文
出現問題:
安裝了Tomcat之后,開始用著還好好的。莫名其妙
的就很突然出現了一些玄學問題,某一次開始我雙擊了startup.bat
啟動Tomcat時我的黑窗口就很不給面子的運行著運行著就閃退
了,隱約間能看到個異常,可剛看清楚一個caused by...
黑窗口就已經關閉了。經歷了重啟電腦等常規解決問題的思路后依舊無法解決。
分析問題
既然問題出現在這個啟動后閃退,那就去看一眼啟動時都做了什么?用記事本打開startup.bat
,會發現一行腳本是這樣寫的:
set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat"
看得出它訪問了本目錄下的catalina.bat
腳本,那就記事本打開catalina.bat
,此時又發現里面出現了這些內容:
rem Get standard Java environment variables
if exist "%CATALINA_HOME%\bin\setclasspath.bat" goto okSetclasspath
echo Cannot find "%CATALINA_HOME%\bin\setclasspath.bat"
echo This file is needed to run this program
goto end
:okSetclasspath
call "%CATALINA_HOME%\bin\setclasspath.bat" %1
if errorlevel 1 goto end
這說明catalina.bat
又訪問了該目錄下的setclasspath.bat
,而記事本打開setclasspath.bat
后又發現它又訪問了catalina.bat
。
綜上發現startup.bat啟動流程
為:startup->catalina->setclasspath->catalina
閃退原因:
可見這三個文件一個都不能出問題。分析這三個文件得出閃退問題主要原因
原因一:java環境變量出問題了
從啟動腳本中看得出Tomcat多次訪問了環境變量信息,其中也包括java環境(畢竟Tomcat原碼也是java啊)。故要先去檢查jdk的環境配置
。
注意:CATALINA_HOME
是Tomcat的環境,你可以選擇不配置,不過這樣的話你就只能在bin目錄下啟動Tomcat了,換句話來講,配置完Tomcat環境后你可以把startup.bat
復制到其他地方雙擊啟動。
原因二:端口占用
如果Tomcat已經被啟動或者8080端口被占用,這自然是不允許的。
你可以直接訪問localhost:8080
看能否訪問Tomcat,如果可以那就說明是已經開啟過了的,你可以雙擊shutdown.bat
進行關閉。
或者你可以在黑窗口中執行netstat -ano | findstr "8080"
查看8080端口狀態,如果是TIME_WAIT
則說明未被占用。
原因三:你的Tomcat不干凈了
到現在還沒解決,那就有可能是你所下載的Tomcat是一些綠色版、無敵版、xx版
等閹貨或畸形貨。此時就可在記事本打開startup.bat
,在腳本最后面一行加上pause
,保存后啟動進行斷點調試了。(不一定非得像我圖片中加在倒數第二行,最后一行應該也可以,只要不放在前面的邏輯中就行)。
此時啟動效果和之前沒有區別,只是出了問題后不再會立刻閃退,而是你在窗口中按任意鍵后才會退出。OK!現在你就研究屬于你的bug吧(記得解決完問題后把pause刪掉)!
原文鏈接:https://blog.csdn.net/D_ps19990501/article/details/121289269
相關推薦
- 2022-06-09 ASP.NET?Core配置和管理Web主機_基礎應用
- 2022-09-05 C語言之sizeof與strlen的使用及區別_C 語言
- 2023-07-09 css樣式重疊解決辦法
- 2022-09-07 基于域名的方式訪問Istio服務網格中的多個應用程序的方法詳解_相關技巧
- 2023-01-08 Python?SQLAlchemy建立模型基礎關系模式過程詳解_python
- 2021-12-10 linux中的軟連接和硬連接詳解_Linux
- 2023-03-23 詳解python?ThreadPoolExecutor異常捕獲_python
- 2022-04-11 記錄ElasticSearch在Linux中的常見問題
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支