我在eclipse控制台中的错误是
[WARN ] PageNotFound.noHandlerFound() - No mapping found for HTTP request with URI [/student-data/status/student/10] in DispatcherServlet with name student-detail
在调用url http://localhost:8080/student-data/status/student/10
的浏览器中,我收到HTTP状态404.请求的资源不可用
在几乎相同的标题上回答了大约3个问题,我经历了所有这些问题。但似乎这里的问题是不同的。我收到标题中提到的错误,下面是我的Spring MVC配置文件
的web.xml
<servlet-mapping>
<servlet-name>student-detail</servlet-name>
<url-pattern>/status/student</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>student-detail</servlet-name>
<url-pattern>/status/student/*</url-pattern>
</servlet-mapping>
我使用/ status / student获取页面,因为学生列表已经填充 但是在使用/ status / student / *
时没有获得个别学生的详细信息用于获取下面显示的学生列表的控制器工作正常,并且所有学生列表都已填充
@RequestMapping(value = "/student", method = RequestMethod.GET)
public String getStudentList(ModelMap model) {
// code
return "studentList";
}
但是当我在控制器中使用getStudentDetail()方法时,我在Eclipse控制台中收到错误
@RequestMapping(value = "/student/{id}", method = RequestMethod.GET)
public String getStudentDetail(@PathVariable String id,ModelMap model) {
System.out.println("The Id is :"+id);
return "studentDetail";
}
错误是:
[DEBUG] DispatcherServlet.doService() - DispatcherServlet with name 'student-detail' processing GET request for [/student-data/status/student/10]
[25 Aug 2014 10:22:21,336] [DEBUG] RequestMappingHandlerMapping.getHandlerInternal() - Looking up handler method for path /10
[25 Aug 2014 10:22:21,338] [DEBUG] RequestMappingHandlerMapping.getHandlerInternal() - Did not find handler method for [/10]
[25 Aug 2014 10:22:21,338] [WARN ] PageNotFound.noHandlerFound() - No mapping found for HTTP request with URI [/student-data/status/student/10] in DispatcherServlet with name 'student-detail'
studentList.jsp包含
<c:forEach items="${studentList}" var="studentList">
<tr onclick="location.href='../status/student/${studentList.UUID}'">
<td><c:out value="${studentList.UUID}" /></td>
<td><c:out value="${studentList.userName}" /></td>
<td><c:out value="5" /></td>
</tr>
</c:forEach>
答案 0 :(得分:0)
我怀疑正在发生的事情是通配符匹配,servlet没有将前缀转发到控制器匹配,这意味着它只是截断“/ status / student /”而只转发/ 10。
如果你想让它匹配,你可以使初始映射更广泛,只需使用spring mvc映射从那里进行路由(这就是我的工作)
<servlet-mapping>
<servlet-name>student-detail</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
然后你只需向控制器添加详细程度
@Controller
@RequestMapping("/status/student")
public class MyController {
@RequestMapping(method = RequestMethod.GET)
public String getStudentList(ModelMap model) {...}
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public String getStudentDetail(@PathVariable String id,ModelMap model) {...}
...
}
http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html
见第16.3.2节
希望有所帮助