8

たとえば、次のweb.xmlエントリを持つSpringMVCアプリケーションがあります。

<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

トリックはリクエスト属性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);
}

サーブレットAPI2.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 に答える