Spring MVC错误“找不到带URI的HTTP请求的映射

时间:2014-08-25 20:38:08

标签: spring-mvc

我在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>

1 个答案:

答案 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节

希望有所帮助