一、問題由來
一位朋友最近在學習JavaWeb開發,使用Servlet做練習的時候,突然出現一個問題。他去訪問自己建立的html檔案時,發現返回的資料是html程式碼,而不是解析後的頁面。
很是疑惑,自己嘗試著解決這個問題,很久都沒有解決問題,然後就找到我。問題復現情況如下,
正常來說,訪問html頁面,瀏覽器可以正常解析html程式碼,可是這位朋友訪問時卻出現了這種情況,讓他很是苦惱。
二、問題分析
對於有經驗的開發來說,看到這個問題大致能夠猜測出問題出在哪裡,多半是返回的資料格式不對。伺服器返回給瀏覽器的資料
格式常規的有幾種,比如text/html 格式,表示文字格式;application/json 表示JSON資料格式; application/octet-stream 就表示二進位制
資料,表示下載檔案。自己去開啟瀏覽器除錯工具,然後檢視返回的資料格式,發現返回的JSON格式的資料,因此瀏覽器就無法正常解析。
三、解決方案
問題搞清楚後,就嘗試著去解決問題。自己去看了一下他寫的程式碼,發現他寫了一個過濾器,用來統一處理請求和響應資料的中文亂碼。
繼續檢視他配置的路徑是/*,攔截所有請求,如圖所示。看到這裡問題就徹底搞清楚啦。解決問題的方式就很好處理,配置路徑的時候,可以多配置一個字首。
比如過濾器的路徑配置為/api/*,就表示匹配路徑包含xxx/api/xxx 的所有請求。在寫Servlet處理請求的時候,路徑就可以配置為/api/user或者/api/system等等。
修改後過濾器攔截路徑配置示例如下,
修改後的Servlet路徑配置示例如下,
最終的測試頁面訪問效果如下,
訪問Servlet結果如下,
問題解決。
總結:真實做開發,做專案的時候,後臺請求的路徑一般都會配置為多級,比如/a/b/c,很少配置為一級。
因為配置多級可以根據實際需要來對路徑做攔截處理,如果只配置為一級,就不好根據路徑做攔截處理。