异常出现的背景:
SSM项目向服务器发送get请求后404错误。服务器打印错误:
org.springframework.web.servlet.PageNotFound - No mapping for GET|POST xxx
下面只给出关键代码:
index.jsp:
<a href="${pageContext.request.contextPath}/demo.action">访问服务器</a>
web.xml:
<url-pattern>*.action</url-pattern>
springmvc.xml :
<property name="prefix" value="/admin/"/>
<property name="suffix" value=".jsp"/>
DemoAction.java:
@Controller
public class DemoAction {
@RequestMapping(value="/demo")
public String demo(){
System.out.println("GET请求");
return "main";// 可以直接跳转到/admin/main.jsp页面上。
}
}
异常出现的原因:
No mapping for GET xxx
对于请求的路径没有正确的映射,也就是说路径肯定是有错误的。
问题的解决:
@RequestMapping映射路径要写后缀,前端请求的是/demo.action,这里就要写@RequestMapping("/demo.action")。
注意:我这里使用的是tomcat10+JDK19,maven依赖用的是jakarta.servlet-api 6.0.0版本,版本不同会影响路径的编写。有些版本的@RequestMapping的路径不需要写后缀.action【直接就是@RequestMapping("/demo")】,这是我这个问题出现的根本原因。这个问题我看了网上好多说法,说url-pattern路径写错和prefix、suffix路径拼接错误的比较多,说版本不匹配导致404的很少。路径写错比较好改,版本不匹配出错这个比较难发现。
ps:log4j查bug很好用。