有哪些情況會出現404?
以下為我從出現的情況中得到的一些結論:
1、路徑真的不存在,沒有訪問到服務器,瀏覽器解析為404
2、訪問到了服務器,但是要訪問的那個具體的資源(接口)不存在,在服務器的邏輯下,跳轉到404.jsp
3、訪問到了服務器,要訪問的接口也存在,但是在程序執行到接口之前(攔截器之類的),就出了錯,跳轉到404.jsp
4、訪問到了服務器,也訪問到了接口,但是在執行過程中程序出錯了,也會出現404(忘了是瀏覽器的404,還是服務器的404.jsp)
確定了不是第一種情況之后,可以在訪問的接口打斷點,看看程序是否會執行到接口的斷點,如果執行到了,那么是4,否則,可能是2或者3
下文的問題,就是遇到了第2種情況(注解寫錯、類沒有被掃描到)
問題:
在 postman 中訪問 http://localhost:8011/post-manager/test/t 時,status 的值為 404, “頁面”顯示內容為(跳轉到了404.jsp):
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>error</title> <link rel="stylesheet" href="http://localhost:8011/post-manager/static/css/reset.css"/> <link rel="stylesheet" href="http://localhost:8011/post-manager/static/css/basic.css"/> <link rel="stylesheet" href="http://localhost:8011/post-manager/static/css/style.css"/> <script type="text/javascript" src="http://localhost:8011/post-manager/static/js/jquery-1.10.2.min.js"> </script> </head> <body> <!--內容--> <div class="content"> <div class="content-box cont-word"> <img src="http://localhost:8011/post-manager/static/img/fail.png" alt="" class="succ-img"/> <span class="succ-txt">訪問資源不存在,請檢查請求路徑是否正確!!</span> <p> <br> <input name="" type="submit" value="返回" class="submit-butn capa-butn" onclick="window.history.go(-1)"/> </div> <div class="footer g"> <p>@2017 請聯系****管理員</p> </div> </div> </body> </html>
首先,可以確定控制台沒有報錯
由於 post-manager 工程中之前沒有 controller 類,TestController 類是我的新加的第一個 controller 類,連 controller 的 package 都是新加的,
所以有可能是沒有被掃描到的問題?
確實可能是掃描的問題:
在 spring-mvc.xml 文件中,有如下配置:
<!-- 自動掃描且只掃描@Controller --> <context:component-scan base-package="com.kexin.prc.join.post.web" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/> </context:component-scan>
即只配置了掃描包
com.kexin.prc.join.post.web
下的 controller 類,
將 TestController 類轉移到該包中,嘗試一下
2019.3.4 補充
又遇到了一次 404,最終發現原因是數據庫連接信息配置錯誤
但是在剛開始啟動 tomcat 的時候,控制台不報任何錯,而是在啟動了一會兒之后再在控制台報錯
所以一開始並不知道 404 的原因是這個(即,一開始以為 tomcat 啟動成功了,但實際上 tomcat 並沒有啟動成功)