8

比如说,我有一个带有以下 web.xml 条目的 Spring MVC 应用程序:

<error-page>
    <error-code>404</error-code>
    <location>/error/404</location>
</error-page>

和以下错误页面控制器:

@RequestMapping({"","/"})
@Controller
public class RootController {

    @RequestMapping("error/{errorId}")
    public String errorPage(@PathVariable Integer errorId, Model model) {
        model.addAttribute("errorId",errorId);

        return "root/error.tile";
    }
}

现在用户请求不存在的 URL /user/show/iamnotauser 触发错误页面控制器。如何从 RootController 的 errorPage() 方法中获取这个不存在的 '/user/show/iamnotauser' URL 以将其放入模型并显示在错误页面上?

4

1 回答 1

15

诀窍是 request 属性javax.servlet.forward.request_uri,它包含原始请求的 uri。

@RequestMapping("error/{errorId}")
public ModelAndView resourceNotFound(@PathVariable Integer errorId,
                                                   HttpServletRequest request) {
    //request.getAttribute("javax.servlet.forward.request_uri");
    String origialUri = (String) request.getAttribute(
                                               RequestDispatcher.FORWARD_REQUEST_URI);

    return new ModelAndView("root/error.jspx", "originalUri", origialUri);
}

如果您仍然使用 Servlet API 2.5,则该常量RequestDispatcher.FORWARD_REQUEST_URI不存在,但您可以使用request.getAttribute("javax.servlet.forward.request_uri"). 或升级到javax.servlet:javax.servlet-api:3.0.1

于 2012-12-16T13:22:49.437 回答