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访问,视图解析器会自动增加前缀和后缀,但是在运行网址http://localhost:8080/annotated1/input-product访问时总是提示“No mapping found for HTTP request with URI”
// 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>
</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>