No mapping found for HTTP request with URI [....] in DispatcherServlet with name 'springMVC'
阿新 • • 發佈:2018-11-19
這個錯誤,為在頁面報404錯誤。
web.xml 配置如下:
<servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springMVC-servlet.xml</param-value> </init-param> <!-- load-on-startup元素標記容器是否在啟動的時候就載入這個servlet(例項化並呼叫其init()方法)。 取值1,2,3,4,5代表的是優先順序,而非啟動延遲時間 --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
<url-pattern>/</url-pattern> 這樣的配置,就是把所有的請求,都交給spring 的DispatcherServlet前端控制器,做統一處理。
這樣,就會造成,無法訪問所有靜態資源,如:html,js,css,image等等。
所以,我們需要讓spring做一件事,就是如果訪問的是靜態資源,就讓這個請求交給web容器處理。
方法一:直接在 web.xml 中,配置預設的servlet-mapping。程式碼如下
<servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>/*.html</url-pattern> <url-pattern>/*.css</url-pattern> <url-pattern>/*.js</url-pattern> </servlet-mapping> //這裡的 default 配置。spring 就會知道,應該使用web容器的處理。 而下面的<url-pattern> 的配置,就是告訴 web處理哪些資源。
方法二: 就是在 springservlet-mvc.xml中加上一句 mvc標籤:<mvc:default-servlet-handler />
<!-- 在springMVC-servlet.xml中配置<mvc:default-servlet-handler />後, 會在Spring MVC上下文中定義一個 org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler, 它會像一個檢查員,對進入DispatcherServlet的URL進行篩查, 如果發現是靜態資源的請求,就將該請求轉由Web應用伺服器預設的Servlet處理, 如果不是靜態資源的請求,才由DispatcherServlet繼續處理。 --> <mvc:default-servlet-handler />
方法三:<mvc:resources />
<mvc:resources location="/,classpath:/page/" mapping="/resources/**"/>
/*
* location:靜態資源的位置。多個用‘,’隔開。 我這裡是的位置是:‘/’表示 web根路徑。
*classpath:/page/ 表示 類路徑下的page檔案下的資源。
*
*都對映成/resources 而** 代表 所有子目錄。
*
*如果 page下有個 html目錄,下面有個index.html. 我們可以用:/resources/html/index.html
*如果WebContent下有個image目錄,下面有個 ioc.png。 我們也可以用:/resources/image/ioc.png.
*至於 不同資料夾下相同的 檔名,會不會報錯。我還沒試過。