1. 程式人生 > >springmvc始終跳轉至首頁,不報404錯誤

springmvc始終跳轉至首頁,不報404錯誤

本篇部落格特別補充:2017-3-4 9:42,經過分析和測試,本篇部落格的解決方案只是碰巧,暫時的解決了問題。在後續的執行中,又出現了同樣的毛病。經過日誌跟蹤,發現了端倪,下篇部落格深入的剖析!本篇部落格,就當看著玩兒吧。。。。。讓大家見笑了

一、專案背景

近期在做專案的時候,發現了一個怪事。真真的是怪事,就是突然之間,我的專案就出毛病了:每次開啟首頁之後,所有的連結都跳轉到首頁,但URL地址又是正確的。然而,當設定斷點除錯的時候,它是進入了後臺系統,也就是說springmvc是有作用的,但始終不進入到目標地址所對應的controller方法。愁死了。。。。

二、解決過程 

2.1,檢查相應的controller方法

為什麼會檢查這個,因為在這個方法裡面,有兩種情況會重定向或者轉發至首頁,所以當程式執行的時候,總是跳轉到首頁,我猜想是不是這兩種情況的條件符合了,是走向的正常邏輯處理。所以,加了斷點除錯,也看了瀏覽器的網路請求,發現這個方法根本沒有進入到controller的對應方法,也就不存在是符合了正常邏輯的正確跳轉。但是,它很奇怪的每次都執行controller的首頁方法,特別特別的奇怪。

思考:因為對應請求的程式碼裡,有兩種邏輯處理確實是令其重定向或者轉發至首頁,所以當發生請求始終跳轉至首頁的時候,檢查是否滿足了其條件才產生的邏輯處理,這是首先要做的事兒

2.2,檢查<a href=""></a>

以前做專案,包括給別人除錯bug的時候,遇到過頁面跳轉不成功的問題,就是因為這個a 標籤沒有用對,所以,我就檢查了一下這個標籤。但不管我換成什麼地址,它還是每次都跳轉到系統首頁,用瀏覽器的F12進入除錯頁面的時候,發現不報錯,然後eclipse的控制檯,也不報任何錯,相反還打出了進入主方法的日誌資訊。這下子就懵了!

思考:如果是a 標籤的連結出了問題,那麼至少應該報404或者500之類的問題,但是頁面可以成功跳轉,說明這個標籤是沒錯的。而且每次URL地址都符合自己預期的效果,所以檢查這一步,算是走投無路的選擇,而不是理論上的最優選。在這一步上測試,浪費了時間!  所幸,我也不是第一步就測試的這個標籤,

2.3,思考整個框架配置

因為之前一直做專案都好好的,但是下午重新工作後,就變成這個樣子了。而且檢查程式碼也沒有問題,我就在想:會不會是過程中改變了什麼配置,或者是程式在執行過程中出現了什麼問題?

基於這個思路,我就一直想這個系統執行,會經歷哪些步驟,我改了什麼內容:

首先檢查了web.xml應用程式描述檔案,沒什麼問題,那也就是說tomcat容器根據web.xml檔案的描述初始化容器配置沒有什麼問題

然後檢查了server.xml檔案,這個檔案是tomcat如何啟動和工作的描述性檔案,很重要,然後依次檢查了各個節點的配置,最後是發現在上下文配置<Context>這一步,我更改了docBase的設定,出問題了。(當時是為了測試釋出系統,不用輸入專案名和埠號給改的配置檔案)

然後更改了這一個檔案之後,又想到當時也更改了專案路徑下.setting.xml裡面的相關內容,為了不更改其他系統的使用。我重新換了個tomcat伺服器,重啟,一切正常。

三、思考

為什麼改了預設配置,不用輸入專案名的時候,就反覆跳轉到首頁呢?

因為我在web.xml裡面配置了預設進入頁,就是首頁。也就是說,當輸入地址,別的什麼都不輸入的時候,它其實會執行跳轉到首頁的controller方法。而當我把<a>標籤的連結地址改為www.baidu.com,它仍然跳轉到首頁的時候,會發現位址列的地址,變成了:http://localhost/專案名/www.baidu.com。而當其URL地址已經變成了:http://localhost/專案名/{引數}/controller方法時,依然會發生無法跳轉對應方法,仍然是執行首頁方法的時候,我就還是一臉懵逼!

猜想:

3.1,疑惑一:失蹤的404頁面

出現http://localhost/專案名/www.baidu.com的時候,應該報錯的。因為在web.xml裡面使用了以下程式碼去替換掉tomcat的預設Servlet:

<servlet-mapping>
<servlet-name>專案名</servlet-name>
<!--預設匹配所有的請求 -->
<url-pattern>/</url-pattern>
</servlet-mapping>

當地址為http://localhost/專案名/www.baidu.com時,Servlet匹配不到對應的對應的www.baidu.com請求,應該出現的404錯誤提示,為什麼沒有?

3.2,疑惑二:陰魂不散的首頁

當其URL地址已經變成了:http://localhost/專案名/{引數}/controller方法時,應該出現其對應的頁面。(不存在這springmvc的環境沒有配好,因為它可以正常訪問首頁,正常訪問首頁的controller方法。而且,這個專案之前能夠正常執行。)

那我正確的跳轉頁面,到底去哪兒了?為什麼每次都是首頁呢?為什麼一換了個tomcat伺服器,一切就正常了呢?

四、總結

經過上面一系列的思考(調bug整了一下午,然後安靜的想了2個小時左右)突然想到了一個詞:快取!如果有了頁面快取這個概念,那麼解釋問題就變得很容易了。PS:真的有快取的!

其實,我還有一個想法,既然每次都跳轉首頁,那肯定是和我配置的首頁、和springmvc的Servlet處理有關,額,餓了。我還是先去吃飯,然後回來接著幹活,接著思考吧。大概又得去啃springmvc的文件和資料了!

其實,還有一個地方要考慮,那就是我換掉的那個tomcat和不換之前有什麼區別,因為我把我之前改了的server.xml內容改回去的還是不行。麻煩死了,具體的原因再說吧,先將這個記錄下來。下篇部落格再寫寫遇到的關於引入JS的問題吧,也很奇葩!

如果對這個問題,有熟悉的,請多多指教!