springMVC No mapping found for HTTP request with URI

No mapping found for HTTP request with URI

出現這個問題的原因是在web.xml中配置錯了,如:

 <servlet>
 <servlet-name>springMVCDispatcherServlet</servlet-name>
 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
 <init-param>
 <param-name>contextConfigLocation</param-name>
 <param-value>/WEB-INF/springMVC-servlet.xml</param-value>
 </init-param>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
 <servlet-name>springMVCDispatcherServlet</servlet-name>
 <url-pattern>/*</url-pattern>
 </servlet-mapping>

當你在control中返回一個路徑的時候,它又把路徑(/view/index.jsp)當作一個請求被dispatcherServlet所攔截。所以會拋出異常,解決的辦法有兩個:

第一即使讓dispatcherServlet的攔截加上後綴如:*.do;

這樣以jsp後綴的就不會別攔截了。

第二個方法是在spring-servlet.xml中加入:

<mvc:default-servlet-handler/>

對於第二種方法的說明

我們可以用Web服務器的defaultServlet來處理靜態文件,也可用Spring框架來處理靜態文件。使用Spring來處理,可以在配置中加入以下代碼

           <mvc:default-servlet-handler/>  

這樣spring會用默認的Servlet來響應靜態文件,(DefaultServletHttpRequestHandler在容器啓動是會使用主流web容器默認servlet的名稱列表自動查找容器的默認servlet,包括Tomcat, Jetty, Glassfish, JBoss, Resin, WebLogic, and WebSphere。),如果爲默認servlet配置了新的名稱,或者這個容器servlet名字不在spring列表中是,必須顯式配置默認servlet的名字,如下:
           <mvc:default-servlet-handler default-servlet-name="customServlet"/>

或者使用mvc:resources方式來處理,如下:

         <mvc:resources mapping="/images/**" location="/images/" />  

使用<mvc:resources/>元素把images/**映射到ResourceHttpRequestHandler進行處理,location指定靜態資源的位置



由此,可以發現還有第三種解決方式,就是用mvc:resources方式來處理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章