2009-10-28 29 views
9

Tôi đang viết một JSP/Servlet và tôi đang cố gắng để có được những phần neo của URI ví dụ:Nhận neo từ URI

blabla.rdf#mark 

Làm thế nào để có được dấu ấn của tôi từ yêu cầu của tôi? Rõ ràng request.getParameter() không hoạt động?

Mọi trợ giúp đều được hoan nghênh.

+0

Đây là câu hỏi tương tự cho PHP, với câu trả lời tương tự như được tải lên: http://stackoverflow.com/questions/1032242/how-to-obtain-anchor-part-of-url-after-in-php –

Trả lời

19

này là không thể vì khách hàng không gửi "phần neo" đến máy chủ

Như một ví dụ, đây là yêu cầu chính xác rằng Chrome tạo ra sau khi nộp http://example.com/#foobar (ghi lại bằng Wireshark):

GET/HTTP/1.1 
Host: example.com 
Connection: keep-alive 
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/532.3 (KHTML, like Gecko) Chrome/4.0.223.11 Safari/532.3 
Cache-Control: max-age=0 
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 
Accept-Encoding: gzip,deflate 
Accept-Language: en-US,en;q=0.8 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 
If-None-Match: "b300b4-1b6-4059a80bfd280" 
If-Modified-Since: Tue, 15 Nov 2005 13:24:10 GMT 

Xem, không #foobar. Vì vậy, không có cách nào một ứng dụng máy chủ có thể đọc nó.

Bạn có thể thực hiện một số phép thuật JavaScript để lưu trữ neo trong cookie hoặc trong trường nhập ẩn hoặc bất kỳ voodoo nào bạn đang sử dụng. Nhưng nó sẽ không bao giờ làm việc cho các yêu cầu không có nguồn gốc từ các trang web của riêng bạn. Nó đơn giản hơn để thực hiện bất kỳ thứ gì bạn cần trên phần máy chủ của chuỗi truy vấn và chỉ sử dụng neo cho các tác vụ chỉ JavaScript hoặc sử dụng nó để điều hướng bên trong một tài liệu HTML đơn giản - nhưng đó là 90 giây;).

Dưới đây là một phần quan trọng từ RFC nêu 1808:

Lưu ý rằng các nhận dạng mảnh (và "#" đứng trước) là không được coi là một phần của URL. Tuy nhiên, vì nó thường được sử dụng trong bối cảnh chuỗi giống như URL, trình phân tích cú pháp phải có khả năng nhận ra phân đoạn khi nó hiện diện và đặt nó sang một bên là một phần của quá trình phân tích cú pháp .

+0

Để biết thông tin , [RFC 1808] (http://www.ietf.org/rfc/rfc1808.txt) giải thích tại sao phần neo không gửi đến máy chủ. –

0

Giải pháp này sẽ chỉ làm việc sau một nút gửi đã được đẩy, nhưng: bạn có thể sử dụng javascript để đặt một giá trị ẩn vào mẫu của bạn được thiết lập với giá trị của document.location. Điều đó sẽ cho bạn biết chính xác những gì trình duyệt đang xem là địa chỉ của bạn.

2

Tôi đoán bạn muốn tạo một ứng dụng web Ajax có thể đánh dấu trang và bạn muốn thay thế một số đoạn mã DOM nhất định mà không cần tải lại toàn bộ trang. (Nếu không, bạn có thể sử dụng tham số truy vấn.) Khi sfussenegger đề cập, trình duyệt không truyền 'neo' vào máy chủ. Giải pháp nằm ở phía máy khách.

Javascript window.location.hash cung cấp thông tin về neo. Bạn có thể thêm một trình xử lý sự kiện vào sự kiện window.onload lấy window.location.hash và truyền nó tới máy chủ trong một Ajax XHttpRequest. Bạn nắm bắt được phản hồi và xây dựng nó vào DOM.

Thật không may, đó là hai vòng máy khách-máy chủ.

Thông tin thêm về điều này tại ajaxpatterns.

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