首先我們來看看容器如何找到service()方法?
(1)當在浏覽器中輸入 http://localhost:8080/firstweb/sayHi 這個位址後,容器是如何找到 HelloServlet.class這個檔案并執行的呢?
(2)首先容器會根據firstweb這個應用名找到位于webapps下面對應的檔案夾,
(3)然後根據位址中的“/sayHi”到web.xml檔案中尋找與之比對的<url-pattern>節點,找到比對的節點後會找到與該節點緊鄰的<servlet-name>節點,擷取名稱并在此尋找與該名稱相等的<servlet-name>節點,找到相等的節點後,搜尋該節點下面緊鄰的<servlet-class>節點,于是擷取到了與該位址相對應的類名,借助于ClassLoader加載該類檔案,建立對象并調用service()方法,用戶端即看到了與該位址比對的運作結果。
一、404錯誤産生原因及解決方法
在剛開始進行Web應用開發的時候,經常看見頁面出現404這個數字,我們一般會稱之為運作産生了404錯誤。類似于404這個數字,還有可能在頁面上看到405、500這兩個數字,他們都是伺服器執行完用戶端的請求以後,傳回給用戶端的一個關于執行結果的狀态編碼說明。 如果在運作結果頁面中沒有看到期待的頁面,卻看到了404、405、500這樣的數字,那麼代表着伺服器告訴用戶端運作産生了錯誤,掌握何種錯誤情況産生對應的數字将有利于問題的解決。
404産生的原因為Web伺服器(容器)根據請求位址找不到對應資源,以下情況都會出現404的錯誤提示:
1. 輸入的位址有誤(應用名大小寫不正确,名稱拼寫不正确)
2. 在web.xml檔案中<servlet>和<servlet-mapping>中的兩個<servlet-name>不一緻
3. 沒有将工程部署到Tomcat的webapps下面
4. Web工程部署時的結構沒有遵循Servlet的規範
具體的解決辦法就是根據上面提到的4種情況,逐條進行檢查。
二、405錯誤産生原因及解決方法
405這個錯誤的産生原因是容器找不到service方法來處理請求。以下情況容器都将視為沒有找到service()方法
1. service方法名寫錯,字母順序不對或大小寫錯誤
2. service方法參數類型與标準不一緻,或參數順序與标準不一緻。一定是先HttpServletRequest,然後是HttpServletResponse類型
3. service方法異常、傳回值類型與标準不一緻,一定是抛出ServletException、IOException。傳回值類型是void。
解決405錯誤的方法即檢查service方法是否存在,簽名(方法名、參數、傳回值、異常類型)是否與覆寫的父類中的方法一緻。
三、500錯誤産生原因及解決方法
500的錯誤原因是請求的Servlet在執行service方法的過程中出現了錯誤,程式不能繼續運作了。以下情況容器都将視為500的一種情況,而傳回給用戶端這個錯誤說明。
1. Servlet沒有繼承HttpServlet或實作Servlet接口
2. web.xml檔案中的<servlet-class>寫錯,與真正的包名類名不符
3. service方法中的代碼運作時抛出異常
解決500的方法為依據上面三種情況依次進行檢測,逐條排除。
原文作者:daliu_it
博文出處:http://www.cnblogs.com/liuhongfeng/p/4180579.html
本文版權歸作者和部落格園共有,但未經作者同意轉載必須保留以上的聲明且在放在文章頁面明顯位置。謝謝合作。