404錯誤產生原因及解決方法
在剛開始進行Web應用開發的時候,經常看見頁面出現404這個數字,我們一般會稱之為執行產生了404錯誤。類似於404這個數字,還有可能在頁面上看到405、500這兩個數字,他們都是伺服器執行完客戶端的請求以後,返回給客戶端的一個關於執行結果的狀態編碼說明。 如果在執行結果頁面中沒有看到期待的頁面,卻看到了404、405、500這樣的數字,那麼代表著伺服器告訴客戶端執行產生了錯誤,掌握何種錯誤情況產生對應的數字將有利於問題的解決。
404產生的原因為Web伺服器(容器)根據請求地址找不到對應資源,以下情況都會出現404的錯誤提示:
輸入的地址有誤(應用名大小寫不正確,名稱拼寫不正確)
在web.xml檔案中和中的兩個不一致
沒有將工程部署到Tomcat的webapps下面
Web工程部署時的結構沒有遵循Servlet的規範
具體的解決辦法就是根據上面提到的4種情況,逐條進行檢查。
容器如何找到service()方法
當在瀏覽器中輸入 http://localhost:8080/firstweb/sayHi 這個地址後,容器是如何找到 HelloServlet.class這個檔案並執行的呢?
首先容器會根據firstweb這個應用名找到位於webapps下面對應的資料夾,然後根據地址中的“/sayHi”到web.xml檔案中尋找與之匹配的節點,找到匹配的節點後會找到與該節點緊鄰的節點,獲取名稱並在此尋找與該名稱相等的節點,找到相等的節點後,搜尋該節點下面緊鄰的節點,於是獲取到了與該地址相對應的類名,藉助於ClassLoader載入該類檔案,建立物件並呼叫service()方法,客戶端即看到了與該地址匹配的執行結果。
405錯誤產生原因及解決方法
405這個錯誤的產生原因是容器找不到service方法來處理請求。以下情況容器都將視為沒有找到service()方法
service方法名寫錯,字母順序不對或大小寫錯誤
service方法引數型別與標準不一致,或引數順序與標準不一致。一定是先HttpServletRequest,然後是HttpServletResponse型別
service方法異常、返回值型別與標準不一致,一定是丟擲ServletException、IOException。返回值型別是void。
解決405錯誤的方法即檢查service方法是否存在,簽名(方法名、引數、返回值、異常型別)是否與覆蓋的父類中的方法一致。
500錯誤產生原因及解決方法
500的錯誤原因是請求的Servlet在執行service方法的過程中出現了錯誤,程式不能繼續運行了。以下情況容器都將視為500的一種情況,而返回給客戶端這個錯誤說明。
Servlet沒有繼承HttpServlet或實現Servlet介面
web.xml檔案中的寫錯,與真正的包名類名不符
service方法中的程式碼執行時丟擲異常
解決500的方法為依據上面三種情況依次進行檢測,逐條排除。
404錯誤產生原因及解決方法
在剛開始進行Web應用開發的時候,經常看見頁面出現404這個數字,我們一般會稱之為執行產生了404錯誤。類似於404這個數字,還有可能在頁面上看到405、500這兩個數字,他們都是伺服器執行完客戶端的請求以後,返回給客戶端的一個關於執行結果的狀態編碼說明。 如果在執行結果頁面中沒有看到期待的頁面,卻看到了404、405、500這樣的數字,那麼代表著伺服器告訴客戶端執行產生了錯誤,掌握何種錯誤情況產生對應的數字將有利於問題的解決。
404產生的原因為Web伺服器(容器)根據請求地址找不到對應資源,以下情況都會出現404的錯誤提示:
輸入的地址有誤(應用名大小寫不正確,名稱拼寫不正確)
在web.xml檔案中和中的兩個不一致
沒有將工程部署到Tomcat的webapps下面
Web工程部署時的結構沒有遵循Servlet的規範
具體的解決辦法就是根據上面提到的4種情況,逐條進行檢查。
容器如何找到service()方法
當在瀏覽器中輸入 http://localhost:8080/firstweb/sayHi 這個地址後,容器是如何找到 HelloServlet.class這個檔案並執行的呢?
首先容器會根據firstweb這個應用名找到位於webapps下面對應的資料夾,然後根據地址中的“/sayHi”到web.xml檔案中尋找與之匹配的節點,找到匹配的節點後會找到與該節點緊鄰的節點,獲取名稱並在此尋找與該名稱相等的節點,找到相等的節點後,搜尋該節點下面緊鄰的節點,於是獲取到了與該地址相對應的類名,藉助於ClassLoader載入該類檔案,建立物件並呼叫service()方法,客戶端即看到了與該地址匹配的執行結果。
405錯誤產生原因及解決方法
405這個錯誤的產生原因是容器找不到service方法來處理請求。以下情況容器都將視為沒有找到service()方法
service方法名寫錯,字母順序不對或大小寫錯誤
service方法引數型別與標準不一致,或引數順序與標準不一致。一定是先HttpServletRequest,然後是HttpServletResponse型別
service方法異常、返回值型別與標準不一致,一定是丟擲ServletException、IOException。返回值型別是void。
解決405錯誤的方法即檢查service方法是否存在,簽名(方法名、引數、返回值、異常型別)是否與覆蓋的父類中的方法一致。
500錯誤產生原因及解決方法
500的錯誤原因是請求的Servlet在執行service方法的過程中出現了錯誤,程式不能繼續運行了。以下情況容器都將視為500的一種情況,而返回給客戶端這個錯誤說明。
Servlet沒有繼承HttpServlet或實現Servlet介面
web.xml檔案中的寫錯,與真正的包名類名不符
service方法中的程式碼執行時丟擲異常
解決500的方法為依據上面三種情況依次進行檢測,逐條排除。