發生緣由
- 學習Tomcat軟件的使用
環境
- Tomcat版本:8.5.75
- jdk版本:jdk-16.0.2
- 電腦系統:win10
問題及補救
啟動Tomcat
- 問題
我的系統是win10,所以打開Tomcat需要啟動bin目錄下面startup.bat文件。可是雙擊startup.bat文件,發現會閃退。
- 搜索
通過搜索引擎搜索發現:這種情況的發生是因為沒有正確的配置JAVA環境變量。
- 結果
可是我之前已經配置好了。使用cmd命令窗口分別輸入下面命令:java、javac、java -version都沒有任何問題。
下載jre
- 搜索
通過搜索引擎搜索發現:查找到了jre的影子。原來自從jdk11版本開始后,下載jdk已經不會自帶jre了,所以需要自行下載。果然,打開下載的jdk-16.0.2,里面並沒有jre。
- 修改
通過管理員身份打開cmd命令,進入jdk的文件夾,鍵入下面的代碼:bin\jlink.exe --module-path jmods --add-modules java.desktop --output jre
然后再配置jre的環境變量,也就是JRE_HOME:E:\JAVA\jdk-16.0.2\jre Path:%JRE_HOME%\bin
- 結果
雙擊打開startup.bat文件依舊是閃退,沒有作用。
修改源碼
- 搜索
通過搜索引擎搜索發現:仍然有可能是環境變量配置錯誤。查看源碼可以發現startup.bat–>catalina.bat–>setclasspath.bat,他們之間是層層調用的關系。
- 修改
所以我們可以在setclasspath.bat文件下面,聲明環境變量,添加上自己本地jdk、jre路徑。
右鍵通過記事本打開setclasspath.bat文件,然后在setclasspath.bat文件代碼最上方輸入
set JAVA_HOME=E:\JAVA\jdk-16.0.2(jdk路徑)
set JRE_HOME=E:\JAVA\jdk-16.0.2\jre(jre路徑)
- 結果
雙擊打開,這次閃退是閃兩下了,依舊打不開。
檢查端口號
- 搜索
通過搜索引擎搜索發現:有可能是有其他應用程序占用該端口號
- 修改
通過cmd命令查看是否有其他應用程序占用8080端口號
- 結果
並沒有軟件占用。
捕捉錯誤信息
- 搜索
通過搜索引擎搜索發現:可以通過捕捉查看錯誤信息。
- 修改
- 右鍵startup.bat文件,通過記事本打開,將倒數第三行修改一下。
call "%EXECUTABLE%" start %CMD_LINE_ARGS% # 修改為下面代碼 call "%EXECUTABLE%" run %CMD_LINE_ARGS%
保存,然后以cmd命令的形式打開startup.bat文件。這時候會在cmd窗口出現
Using CATALINA_BASE: "E:\Tomcat\apache-tomcat-8.5.75" Using CATALINA_HOME: "E:\Tomcat\apache-tomcat-8.5.75" Using CATALINA_TMPDIR: "E:\Tomcat\apache-tomcat-8.5.75\temp" Using JRE_HOME: "E:\JAVA\jdk-16.0.2\jre" Using CLASSPATH: "E:\Tomcat\apache-tomcat-8.5.75\bin\bootstrap.jar;E:\Tomcat\apache-tomcat-8.5.75\bin\tomcat-juli.jar" Using CATALINA_OPTS: "" NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED WARNING: Unknown module: java.rmi specified to --add-opens Exception in thread "main" java.lang.NoClassDefFoundError: java/util/logging/Logger at org.apache.juli.logging.DirectJDKLog.<init>(DirectJDKLog.java:61) at org.apache.juli.logging.DirectJDKLog.getInstance(DirectJDKLog.java:181) at org.apache.juli.logging.LogFactory.getInstance(LogFactory.java:130) at org.apache.juli.logging.LogFactory.getInstance(LogFactory.java:153) at org.apache.juli.logging.LogFactory.getLog(LogFactory.java:208) at org.apache.catalina.startup.Bootstrap.<clinit>(Bootstrap.java:50) Caused by: java.lang.ClassNotFoundException: java.util.logging.Logger at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:636) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:182) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:519) ... 6 more
- 右鍵startup.bat文件,通過記事本打開,在最后一行后面加上一行。鍵入:
pause
。
保存,然后雙擊打開startup.bat文件。這時候會出現一個新的Tomcat窗口,里面同樣有着報錯信息Using CATALINA_BASE: "E:\Tomcat\apache-tomcat-8.5.75" Using CATALINA_HOME: "E:\Tomcat\apache-tomcat-8.5.75" Using CATALINA_TMPDIR: "E:\Tomcat\apache-tomcat-8.5.75\temp" Using JRE_HOME: "E:\JAVA\jdk-16.0.2\jre" Using CLASSPATH: "E:\Tomcat\apache-tomcat-8.5.75\bin\bootstrap.jar;E:\Tomcat\apache-tomcat-8.5.75\bin\tomcat-juli.jar" Using CATALINA_OPTS: "" NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED WARNING: Unknown module: java.rmi specified to --add-opens Exception in thread "main" java.lang.NoClassDefFoundError: java/util/logging/Logger at org.apache.juli.logging.DirectJDKLog.<init>(DirectJDKLog.java:61) at org.apache.juli.logging.DirectJDKLog.getInstance(DirectJDKLog.java:181) at org.apache.juli.logging.LogFactory.getInstance(LogFactory.java:130) at org.apache.juli.logging.LogFactory.getInstance(LogFactory.java:153) at org.apache.juli.logging.LogFactory.getLog(LogFactory.java:208) at org.apache.catalina.startup.Bootstrap.<clinit>(Bootstrap.java:50) Caused by: java.lang.ClassNotFoundException: java.util.logging.Logger at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:636) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:182) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:519) ... 6 more
修改jre環境變量
- 搜索
通過搜索引擎搜索Caused by: java.lang.ClassNotFoundException: java.util.logging.Logger發現:jre的問題。
- 修改
右鍵通過記事本打開setclasspath.bat文件,然后將之前寫的代碼修改為
set JAVA_HOME=E:\JAVA\jdk-16.0.2
set JRE_HOME=E:\JAVA\jdk-16.0.2
- 結果
雙擊打開,發現可以成功運行,但是有亂碼問題。
修改亂碼問題
- 修改
我們來到conf目錄中,找到一個名為logging.properties的文件,打開這個配置文件,修改如下配置項:
java.util.logging.ConsoleHandler.encoding = UTF-8
修改為下面代碼
java.util.logging.ConsoleHandler.encoding = GBK
保存后,重啟tomcat!
- 結果
恭喜,成功了。
重新修改環境變量
- 在我寫這篇博客的時候,發現其實是把JAVA環境變量配置錯誤了。
- 應該為:JAVA_HOME:E:\JAVA\jdk-16.0.2 Path:%JAVA_HOME%\bin
- 我弄的:JAVA_HOUME:E:\JAVA\jdk-16.0.2 Path:%JAVA_HOUME%\bin
- 所以導致了錯誤,可是使用cmd命令窗口分別輸入下面命令:java、javac、java -version都沒有任何問題。
- 修改完了環境變量,將之前在配置文件中寫的代碼刪除:
set JAVA_HOME=E:\JAVA\jdk-16.0.2
set JRE_HOME=E:\JAVA\jdk-16.0.2
- 然后就沒有什么問題了。