Spring MVC 遇到No mapping found for HTTP request with URI的解決方法
第一次學習SpringMVC4.0 時遇到了一個小問題“No mapping found for HTTP request with URI”困擾了一天,最後試了好多方法終於得到解決和大家分享
練習環境:Eclipse Mars +MVC4+Tomcat8.0
一、遇到的問題:
1 按照《SpingMVC學習指南》的例子進行SpingMVC第一個例子的練習,實現MVC結構訪問一個網址,工程結構如圖:
然後在MVC配置檔案中增加了如下程式碼(紅色部分)按照書上原文抄寫
作用是在輸入網址時可以簡化輸入,例如訪問/WEB-INF/jsp/myPage.jsp時可以只是用myPage訪問,檢視解析器會自動增加字首和字尾,但是在執行網址
// spingMVC-config.xml
<mvc:annotation-driven/>
<context:component-scan base-package="controller" />
<mvc:resources mapping="/css/**" location="/css/"/>
<mvc:resources mapping="/*.html" location="/WEB-INF/jsp/" />
<mvc:default-servlet-handler/>
<bean id="viewResolver"
</beans>
//productController.java
public class ProductController
{
private static final Log logger=LogFactory.getLog(ProductController.class);
@RequestMapping(value="/input-product")
public String inputProduction()
{
logger.info("inputProduction called");
return "ProductForm"; //不使用網址簡化需要寫成return "/WEB-INF/jsp/ProductForm.jsp"
}
}
試了很多方法都不能解決此問題,但是去掉 字首和字尾屬性是可以訪問成功的。
解決方法:
在MVC配置檔案中修改如下紅色程式碼部分可以成功解決此問題
// spingMVC-config.xml
<mvc:annotation-driven/> //這句也是要有的
<context:component-scan base-package="controller" />
<mvc:resources mapping="/css/**" location="/css/"/>
<mvc:resources mapping="/*.html" location="/WEB-INF/jsp/" />
<mvc:default-servlet-handler/><bean id="viewResolver" class=" org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"> </property> <property name="suffix" value=".jsp/"> </property>
</bean>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/jsp/" p:suffix=".jsp"></bean>
</beans>