2012-12-16 29 views
7

nói, tôi có một ứng dụng Spring MVC với mục web.xml sau:Bắt một URL dẫn đến lỗi (404) từ bộ điều khiển lỗi trang trong mùa xuân MVC

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

và sau điều khiển lỗi trang :

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

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

     return "root/error.tile"; 
    } 
} 

Bây giờ người dùng đã yêu cầu URL không tồn tại/người dùng/show/iamnotauser đã kích hoạt trình điều khiển trang lỗi. Làm cách nào để tôi nhận URL '/ user/show/iamnotauser' không tồn tại này từ phương thức errorPage() của RootController để đưa nó vào mô hình và hiển thị trên trang lỗi?

Trả lời

14

Bí quyết là thuộc tính yêu cầu javax.servlet.forward.request_uri, nó chứa uri được yêu cầu ban đầu.

@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); 
} 

Nếu bạn vẫn sử dụng Servlet API 2.5, sau đó hằng RequestDispatcher.FORWARD_REQUEST_URI không tồn tại, nhưng bạn có thể sử dụng request.getAttribute("javax.servlet.forward.request_uri"). hoặc nâng cấp lên javax.servlet:javax.servlet-api:3.0.1

+0

Chúng tôi đang sử dụng máy chủ hỗ trợ API Servlet 3.0.x nhưng sử dụng 2.5 như đặc tả trong tệp web.xml. Với cài đặt này, các phương pháp trên không mang lại bất kỳ điều gì hữu ích, nhưng 'request.getAttribute (" javax.servlet.error.request_uri "); –

Các vấn đề liên quan