調(diào)試項目的時候發(fā)現(xiàn)每次使用idea重新部署項目時會出現(xiàn)這個錯誤,但是不影響實(shí)際使用,重啟服務(wù)器第一次部署時也不會出現(xiàn)錯誤,嘗試搜索解決這個問題。
解決方法:
進(jìn)入tomcat目錄下查找配置文件,conf > Context.xml,查找Context標(biāo)簽,修改屬性reloadble為 reloadable=“false” (如果沒有reloadable屬性,就自己創(chuàng)建一個)
<Context reloadable="false">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
<Manager pathname="SESSIONS.ser" />
</Context>
reloadable的功能:如果這個屬性設(shè)為true,tomcat服務(wù)器在運(yùn)行狀態(tài)下會監(jiān)視在WEB-INF/classes和WEB-INF/lib目錄下class文件的改動,如果監(jiān)測到有class文件被更新的,服務(wù)器會自動重新加載Web應(yīng)用 ,也就是熱部署。 有助于調(diào)試servlet和其它的class文件,但這樣用加重服務(wù)器運(yùn)行負(fù)荷,建議在Web應(yīng)用的發(fā)存階段將reloadable設(shè)為false。
后續(xù)問題:
如果reloadable變?yōu)閒alse后依然有一個報錯:
意思是注冊過jdbc驅(qū)動,在容器關(guān)閉時沒有注銷,并且是在AbandonedConnectionCleanupThread線程中。 所以為了內(nèi)存避免泄露,就強(qiáng)制注銷了驅(qū)動。
解決方法:
寫一個容器監(jiān)聽器,在容器銷毀時注銷AbandonedConnectionCleanupThread。文章來源:http://www.zghlxwxcb.cn/news/detail-756712.html
網(wǎng)上的查找到的監(jiān)聽器代碼是基于舊版驅(qū)動的,我修改了一個新版本的,記得在配置中添加對應(yīng)的包掃描文章來源地址http://www.zghlxwxcb.cn/news/detail-756712.html
import com.mysql.cj.jdbc.AbandonedConnectionCleanupThread;
import jakarta.servlet.ServletContextEvent;
import jakarta.servlet.ServletContextListener;
import jakarta.servlet.annotation.WebListener;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Enumeration;
@WebListener
public class MyContextListener implements ServletContextListener {
//注銷驅(qū)動,防止服務(wù)器重新部署時jdbc報錯
@Override
public void contextDestroyed(ServletContextEvent sce) {
Enumeration<Driver> drivers = DriverManager.getDrivers();
while (drivers.hasMoreElements()) {
try {
DriverManager.deregisterDriver(drivers.nextElement());
} catch (SQLException e) {
e.printStackTrace();
}
}
// 關(guān)閉AbandonedConnectionCleanupThread線程
AbandonedConnectionCleanupThread.checkedShutdown();
System.out.println("注銷驅(qū)動、關(guān)閉AbandonedConnectionCleanupThread線程");
}
}
到了這里,關(guān)于解決Tomcat異常:java.lang.IllegalStateException: 非法訪問:此Web應(yīng)用程序?qū)嵗淹V埂o法加載。為了調(diào)試以及終止導(dǎo)致非法訪問的線程,將拋出以下堆棧跟蹤。的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!