1、問題描述
servlet使用注解配置,經檢查無錯誤,如圖:
tomcat正常啟動,頁面正常運行,當訪問servlet時出現無響應的情況,控制台報錯404,未訪問到servlet。
經檢查,我的錯誤原因屬於下邊的第②種情況。
2、解決方案
打開web.xml檢查web-app標簽中的兩個屬性
①version是否大於3.0
因為web-app標簽3.0以上版本才可以使用servlet的注解的,這是必要條件。如果web-app版本低於3.0,可以去tomcat的這個路徑:
C:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps\ROOT\WEB-INF 找到web.xml文件,打開,檢查web-app標簽版本,如果大於等於3.0,直接復制一份替換原有web-app標簽就好了,或者直接用我的這個web-app標簽去替換,版本為3.1
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1" metadata-complete="true">
②metadata-complete是否為false
該屬性為true,則容器在部署時只依賴部署描述文件,忽略所有標注,如果不配置該屬性,或者將其設置為false,則表示啟動注解支持。當metadata-complete="false"時,web.xml和注解對於Servlet的影響同時起作用,兩種方法定義的url-partten都可以訪問到該Servlet,但是當通過web.xml定義的url-partten訪問時,注解定義的屬性將失效。所以如果你想用servlet注解來配置servlet的話,一定記得修改該屬性為metadata-complete="false "。