关于tomcat服务器启动,Filter过滤器实现类中的方法:doFilter()调用两次的原因
在測試過濾器的時候,設(shè)置過濾器對所有的請求都攔截,當idea啟動服務(wù)器后,這里我設(shè)置的是當服務(wù)器啟動,瀏覽器自動訪問默認頁面,也就是index.jsp頁面,如下圖:
然后,驚奇地發(fā)現(xiàn),doFilter()方法被調(diào)用了兩次,為啥不是預(yù)料中的調(diào)用一次?:
doFilter()方法的代碼如下:
控制臺輸出如下:
先說下,我這里是利用注解進行測試的,我沒生成web.xml文件,所以應(yīng)該不會存在這個項目加載兩次的原因,但為了證明不是項目被idea重復(fù)加載兩次導(dǎo)致的,我在Filter的初始化方法init()中寫了如下信息(后面我不用注解,我用web.xml配置,也出現(xiàn)了doFilter()方法調(diào)用兩次的問題):
如果控制臺輸出了兩句這句話,就證明是這個web項目在idea中被加載了兩次,所以默認訪問index頁面的請求也發(fā)了兩次,這個也能解釋為什么doFilter()方法會執(zhí)行兩次,但是,確實不是這個問題,控制臺只輸出了一次這句話:
這說明了項目只被加載了一次,是沒有問題的。那么問題就應(yīng)該出在:訪問默認頁面index.jsp頁面的時候,發(fā)出了兩次請求。但是,訪問默認頁面,按道理來講應(yīng)該只發(fā)了一次請求吧,那么另外一次請求是什么呢?我修改了一下doFilter()方法的代碼,想要獲取到請求的uri:
再次啟動服務(wù)器,控制臺輸出如下:
很失望,并沒有得到想要的請求uri信息,第一個uri我是能理解的:因為服務(wù)器啟動,默認訪問根目錄,就是在瀏覽器自動輸入的這個路徑。那第二個也是這個uri,這就說明了,在服務(wù)器啟動,在自動發(fā)出訪問index.jsp頁面的時候,在這一次請求中,瀏覽器應(yīng)該是發(fā)出了兩次請求,并且路徑都是一樣的!
那么,隱藏的另外一次請求究竟是什么呢?我去參考了網(wǎng)上的解答,在發(fā)出請求的時候,瀏覽器自動發(fā)出一個:/favicon.ico請求
關(guān)于這個請求的作用:
再查找資料,發(fā)現(xiàn)這是瀏覽器的一種機制,也就是說這是所有瀏覽器的一種默認行為,作用就是為了顯示搜索欄中的圖標。
那么能不能禁止呢?這個我沒深入研究,感興趣的可以去百度一下或者查閱一下資料,應(yīng)該有禁止的方法的。但是doFilter()方法為什么執(zhí)行了兩次,原因也就找到了。
但是呢,瀏覽器也不是每次請求都會自動加上/favicon.ico請求的,如果我不勾選:在瀏覽器啟動完畢后,手動輸入url訪問默認頁面,就不會發(fā)送/favicon.ico請求:
也就是說如果手動輸入url的話,doFilter()是不會執(zhí)行兩次。
至此,doFilter()方法在服務(wù)器啟動時被調(diào)用兩次的原因就找到了。
參考網(wǎng)友解答地址:
https://blog.csdn.net/weixin_33895016/article/details/92425764
總結(jié)
以上是生活随笔為你收集整理的关于tomcat服务器启动,Filter过滤器实现类中的方法:doFilter()调用两次的原因的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 重阳节的来历
- 下一篇: 怎么创建具有真实纹理的CG场景岩石?