2011-09-19 40 views
10

Tôi đang chuyển hướng lỗi 404 tới servlet thông qua phần sau trong tệp web.xml của tôi.chuyển hướng web.xml 404 sang servlet, cách lấy URI gốc?

<error-page> 
    <error-code>404</error-code> 
    <location>/notFound.do</location> 
</error-page> 

Tôi muốn đăng nhập nơi theo yêu cầu đã cố gắng để đi, nhưng tôi không nhận được thư từ tiêu đề giới thiệu: request.getHeader ("giới thiệu")

Điều đó cho thấy 'null' nếu tôi chỉ cần nhấn bất kỳ trang ngẫu nhiên cũ nào không tồn tại.

Và request.getRequestURL()/request.getRequestURI() cả hai chỉ hiển thị thông tin servlet đích cuối cùng (I.e.,/notFound).

Bất kỳ cách nào để nhận URL trang 'xấu' đã được yêu cầu?

Trả lời

18

Có, thuộc tính yêu cầu có tên javax.servlet.forward.request_uri, được khóa bằng RequestDispatcher#FORWARD_REQUEST_URI. Vị trí trang lỗi được gọi cụ thể bằng một cuộc gọi RequestDispatcher#forward() đơn giản.

Vì vậy, bạn có thể lấy nó như sau trong servlet:

String originalUri = request.getAttribute(RequestDispatcher.FORWARD_REQUEST_URI); 

hoặc trong EL:

<p>Original URI: ${requestScope['javax.servlet.forward.request_uri']}</p> 
+0

Có vẻ như servlet-api.jar (cung cấp javax.servlet.RequestDispatcher) trong cài đặt Tomcat 7.0.19 của tôi không có bất kỳ trường tĩnh nào; chỉ các phương thức 'chuyển tiếp' và 'bao gồm'. Nhưng tôi có thể làm cho nó hoạt động nếu tôi chỉ đặt chuỗi trực tiếp. Ví dụ: các công trình sau đây. request.getAttribute ("javax.servlet.forward.request_uri") Cảm ơn sự giúp đỡ của bạn! –

+1

Nó chắc chắn có mặt trong đó (nhấp vào các liên kết trong câu trả lời của tôi để xem javadocs). Vấn đề này gợi ý rằng bạn đã cấu hình IDE để xử lý dự án của bạn như là một dự án Servlet 2.4 hoặc cũ hơn, hoặc bạn đang dựa vào classpath compiletime của bạn trên một tệp 'servlet-api.jar' lỏng lẻo và cũ hơn được đặt ở nơi khác. Bạn đang sử dụng Eclipse? Nếu có, vui lòng đọc: http://stackoverflow.com/questions/4076601/how-do-i-import-the-javax-servlet-api-in-my-eclipse-project/4076706#4076706 – BalusC

+0

Lạ. Tôi bật mở servlet-api.jar và nhìn vào mã byte RequestDispatcher.class, và tôi thấy FORWARD_REQUEST_URI trong đó (cũng như các hằng số khác). Nhưng việc khai báo trong Eclipse chỉ hiển thị hai phương thức. Cả hai đều được chỉ vào cùng một cái lọ trên đĩa ... –

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