日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

关于tomcat服务器启动,Filter过滤器实现类中的方法:doFilter()调用两次的原因

發(fā)布時間:2024/8/26 综合教程 35 生活家
生活随笔 收集整理的這篇文章主要介紹了 关于tomcat服务器启动,Filter过滤器实现类中的方法:doFilter()调用两次的原因 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在測試過濾器的時候,設(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。