一、開發JSP動態網頁時,我們通過瀏覽器請求伺服器上的某個資源的時候,或許會經常遇到報404錯誤的bug。
問題分析:出現這個bug的原因可能處在JSP網頁裡面,也可能是Servlet裡面。假如要訪問的資源不存在,就會產生404錯誤。
(1)404錯誤可能是應用本身的問題。例如沒有正常部署、web.xml部署時Servlet名字寫錯了
(2)也可能是檔案的問題,JSP檔案不存在、JSP名字打錯了,或者Servlet沒有配置
二、關於servlet配置參數url-pattern(Servlet路徑)的幾種不同標記法,或者講Servlet的幾種訪問方式,下面以代碼的形式展示並介紹:
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <display-name></display-name> <servlet> <servlet-name>TestServlet</servlet-name> <servlet-class>com.ccsu.zlWeb.TestServlet</servlet-class> </servlet> <!-- 預設訪問,使用單個斜杠("/")作為url-pattern參數值 --> <servlet-mapping> <servlet-name>TestServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- url-pattern參數值為[*.副檔名 ](副檔名是任意的)訪問 <servlet-mapping> <servlet-name>TestServlet</servlet-name> <url-pattern>/zl.ksgfj</url-pattern> </servlet-mapping>--> <!-- 路徑映射訪問,url-pattern參數值為[/*/*],"*"可取任意值 <servlet-mapping> <servlet-name>TestServlet</servlet-name> <url-pattern>/xdy/fhdsdjklf</url-pattern> </servlet-mapping> --> <!-- 精確匹配路徑訪問,url-pattern參數值為對應於web應用程式上下根的路徑 <servlet-mapping> <servlet-name>TestServlet</servlet-name> <url-pattern>/servlet/TestServlet</url-pattern> </servlet-mapping>--><!-- 注意,採用預設訪問,需把此參數刪掉,另外還需把index.jsp也刪掉 <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> --></web-app>
三、404錯誤常見案集棉:
【1】url-pattern標籤/參數不對,此時查看tomcat的work\Catalina\localhost目錄,看不到該JSP編譯後的java源檔案和類檔案。如:
"<url-pattern>/ShowContact</url-pattern>"誤寫成"<servlet-url>/ShowContact</servlet-url>"
(ps:一般的IDE工具中web.xml檔案都是在建立工程的時候自動產生的,然後Servlet配置也是在建立Servlet的時候自動產生的。也許有時候是我們自己在配置,又或許不小心改了點東西)
【2】web.xml配置Servlet的時候,Servlet的名字打錯了,與Servlet檔案的名字不一致(較為常見)
【3】web.xml配置Servlet的時候,servlet-class參數(應當是Servlet的完整類名)不對,即Servlet的類的完整路徑不對
下面與大家分享一下擷取Servlet完整類名的捷徑:
1、開啟需要配置Servlet的Servlet檔案,找到servlet類名(Public class修飾的)
2、游標移到servlet類名上面,雙擊它(這時它會變顏色)
3、然後滑鼠右擊,會出現一個下拉式功能表,點擊“Copy Qualified Name”(類似複製的操作)
4、然後回到要配置其類路徑的地方,粘貼即可(其實現在任意地方粘貼都會出現該Servlet類的完整類名)。
(操作執行個體:雙擊某Servlet的檔案(ShowContact.java)的類名ShowContact ---> 滑鼠右擊它 ---> 點擊“Copy Qualified Name” ---> 粘貼。接下來就會出現該Servlet類的完整類名“cn.ccsu.web.ShowContact”,而不是該Servlet的名字了)
【4】web.xml中welcome-file-list未配置;或者配置了,但其中welcome-file的參數錯了。即其參數值*.jsp或者*.htm或者*.html的名字不對,與網頁檔案的名字不一致
【5】找不到資源,即檔案不存在(較為常見),即路徑中的資源名字不對,打錯了;或者該資源本來就沒有。