1. 程式人生 > >No mapping found for HTTP request with URI [....] in DispatcherServlet with name 'springMVC'

No mapping found for HTTP request with URI [....] in DispatcherServlet with name 'springMVC'

這個錯誤,為在頁面報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.

*至於 不同資料夾下相同的 檔名,會不會報錯。我還沒試過。