Spring MVC靜態資源攔截(No mapping found for HTTP request with URI in DispatcherServlet with name ' ')問題
阿新 • • 發佈:2019-02-02
程式載入或用瀏覽器訪問靜態資源時出現以下的警告:
No mapping found for HTTP request with URI [/] in DispatcherServlet with name ”
問題原因:預設的訪問的URL都會被DispatcherServlet所攔截,從web.xml下對spring mvc的DispatcherServlet請求url對映的配置可以看出,具體配置如下:
<servlet>
<servlet-name>hello-dispatcher</servlet-name>
< servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/application.xml</param-value>
</init-param>
<load-on -startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>hello-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<url-pattern>/</url-pattern>
url-pattern使用的是/,而不是/,如果使用/,那麼請求時可以通過DispatcherServlet轉發到相應的Action或者Controller中的,但是返回的內容,如返回的jsp還會再次被攔截,這樣導致404錯誤,即訪問不到jsp。所以如果以後發現總是有404錯誤的時候,別忘了check一下 url-pattern的配置是否是/*.
那麼如何訪問自己需要的靜態資原始檔呢?
解決方案一(告訴spring 靜態資源的處理方式):
<mvc:resources location="/resources/" mapping="/resources/**"/>
解決方案二:
<servlet>
<servlet-name>hello-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/application.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>hello-dispatcher</servlet-name>
<url-pattern>/.jsp</url-pattern>
</servlet-mapping>
告訴spring mvc只攔截對於某一類檔案的請求,比如上面配置的只攔截對於字尾為jsp檔案的訪問。
解決方案三:
<servlet>
<servlet-name>hello-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/application.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>hello-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
告訴spring mvc 對於字尾為js的檔案是可以訪問的。依次類推,需要訪問其他資原始檔時可以通過servlet-mapping追加。